先日、開発中のPostgreSQL 11がFeature Freezeを迎えました。Feature Freeze以降は、基本的には新しい機能は入らず、正式リリースに向けた安定化作業に入ります。 コミットログからPostgreSQL 11の雰囲気を掴んでみます。

集計方法

  • 2017-09-01から本日(2018-04-11)までのコミットが対象
  • 各コミットログの追加行数が対象
    • git log --oneline --shortstat --since=2017-09-01 --until=2018-04-11
  • 追加行が多い順に30件表示
    • 複数のコミットに分かれていたり、追加行数は多くないけど重要な機能はたくさんあります。あくまでの雰囲気を掴むためだけですので、今回は追加行数のみに注目します。
  • 集計用プログラムを用意
# /tmp/gitlog.rbファイル
type = 0
title = ""

loop do
  line = gets
  break if line.nil?

  if (type == 0)
    title = line.split(' ', 2)[1].chomp
    type = 1
  else
    ins = line.split(' ')[3]
    type = 0
    puts "%d\t\"%s\"" % [ins, title]
  end
end
$ git clone git://git.postgresql.org/git/postgresql.git
$ cd postgresql
$ git log --oneline --shortstat --since=2017-09-01 --until=2018-04-11 | ruby /tmp/gitlog.rb | | sort -k1 -n -r | head -30

結果

$ git log --oneline --shortstat --since=2017-09-01 --until=2018-04-11 | ruby /tmp/gitlog.rb | | sort -k1 -n -r | head -30
31636   "Don't use SGML empty tags"
22928   "Replace our traditional initial-catalog-data format with a better design."
5677    "MERGE SQL Command following SQL:2016"
5539    "New files for MERGE"
4589    "Make plpgsql use its DTYPE_REC code paths for composite-type variables."
4300    "Support all SQL:2011 options for window frame clauses."
4257    "Convert documentation to DocBook XML"
4160    "Replace raw timezone source data with IANA's new compact format."
4089    "Basic partition-wise join functionality."
3993    "Faster partition pruning"
3270    "Add prokind column, replacing proisagg and proiswindow"
3172    "Local partitioned indexes"
3085    "Add parallel-aware hash joins."
2951    "SQL procedures"
2890    "Add expression compilation support to LLVM JIT provider."
2714    "Support partition pruning at execution time"
2600    "MERGE SQL Command following SQL:2016"
2570    "Modified files for MERGE"
2544    "Implement partition-wise grouping/aggregation."
2237    "Support parallel btree index builds."
2210    "Clean up duplicate table and function names in regression tests."
2149    "Transaction control in PL procedures"
2118    "Allow on-line enabling and disabling of data checksums"
2115    "Indexes with INCLUDE columns and their support in B-tree"
1957    "Allow UPDATE to move rows between partitions."
1898    "Fast ALTER TABLE ADD COLUMN with a non-NULL default"
1648    "Update copyright for 2018"
1491    "Release notes for 10.2, 9.6.7, 9.5.11, 9.4.16, 9.3.21."
1461    "Add strict_word_similarity to pg_trgm module"
1420    "Add hash partitioning."
  • 1番目、2番目はPostgreSQLのコードを書かない限りは関係ないやつ
  • パーティショニング関連のコミットが一番多い
    • “Basic partition-wise join functionality.”
    • “Faster partition pruning”
    • “Local partitioned indexes”
    • “Support partition pruning at execution time”
    • “Implement partition-wise grouping/aggregation.”
    • “Allow UPDATE to move rows between partitions.”
    • “Add hash partitioning.”
  • MERGEコマンド関連や、Procedure関連の機能も大きい変更が多いです。
    • MERGEコマンド
      • “MERGE SQL Command following SQL:2016”
      • “New files for MERGE”
      • “Modified files for MERGE”
    • Procedure関連
      • “SQL procedures”
      • “Transaction control in PL procedures”
  • その他、魅力的な機能も多くコミットされている
    • “Add expression compilation support to LLVM JIT provider.”
    • “Support parallel btree index builds.”
    • “Indexes with INCLUDE columns and their support in B-tree”(Coveringインデックス)

※PostgreSQL 11の正式リリースはまだに変更があるかもしれませんのでご注意ください。

30位以降も見てみると面白そう。 これらの機能からいくつか選んでレビュー、テストしていきたいと思います。