PostgreSQL 12がやってくる！(2) - 設定パラメータの差分

# はじめに
いつものように、PostgreSQL新バージョンの差分先行調査の時期になりました。
ということで、今回はPostgreSQL 11とPostgreSQL 12の設定パラメータの差分を調べてみる。

## 注意
beta2およびbeta3(2019-08-08)版時点で再調査したが、まだbetaフェーズなので、RC/正式版リリース時には少し変更が入るかもしれない。

# 調査方法
* PostgreSQL 11.2を使って、以下の操作を実行。
  * initdb（``-Dオ``プションと``-U postgres``オプションのみ指定）を実行。
  * 生成されたデータベースクラスタを起動。
  * postgresユーザでpostgresデータベースにログイン。
  * psqlの``\a``メタコマンドを実行。
  * psqlの``\o``オプションで出力ファイルを指定。
  * ``SELECT * FROM pg_settings``を実行。
* PostgreSQL 12betaを用いて同じ操作を実行。
* 生成されたPostgreSQL 11の結果とPostgreSQL 12betaの結果をdiffる。

# 調査結果
## 行数
``wc``コマンドの結果を見ると、PostgreSQL 11は292行、PostgreSQL 12-develは312行。結構な差分があるようだ。

## 差分
例によって生成されたデータベースクラスタパスに依存する値や、バージョン番号に依存する値、configureオプション(--enable-debug/--enable-cassert)による差、設定ファイル内の行数差、説明文のみの変更などは差分としてはカウントしない。

|パラメータ名|差分種別|差分概要|
|:--|:-:|:--|
|archive_cleanup_command|追加|リスタートポイントで実行できるコマンドを指定出来るようになった。|
|autovacuum_vacuum_cost_delay|変更|設定値が20から2に変更|
|default_table_access_method|追加|新しいテーブルのデフォルトのテーブルアクセス方法を設定する。デフォルトはheap。<br>beta3から追加？|
|default_with_oids|削除|作成したテーブルへのoid列追加有無ののデフォルト指定がなくなった。|
|dynamic_shared_memory_type|変更|値域から``none``が消え、``posix,sysv,mmap``のみとなった。|
|extra_float_digits|変更|設定値が0から1へ変更。real, double precision,  geometricデータ型の出力がより正確なモードになる|
|jit|変更|デフォルト値がon(有効)になった！|
|log_min_duration_statement|変更|0指定時に``log_statement_sample_rate``という新パラメータの挙動に影響するっぽい。|
|log_statement_sample_rate|追加→無効|``log_min_duration_statement``の閾値を超えたログの出力レートを指定するものっぽい。0は全くログを出さない。1は全ログを出す。閾値を低く設定したときのログ出力量を抑えるのに有効そう。<br>**beta2までは残っていたが、beta3で消えた！**<br>(参考) 13develにもない。|
|log_transaction_sample_rate|追加|トランザクションの一部からすべてのステートメントをログに記録します。 0.0（ログを記録しない）〜1.0の値を使用する|
|plan_cache_mode|追加|PREPARE文のプランとしてカスタム化されたものあるいは汎用的なものをのうち、より良いプランで上書きする？という指定っぽい。|
|primary_conninfo|追加|おや、``recovery.conf``で見たことのあるような設定が・・・|
|primary_slot_name|追加|リカバリ時のslot指定|
|promote_trigger_file|追加|promote時に参照されるトリガファイル名を指定できるようになったのかな？|
|recovery_end_command|追加|リカバリ完了時に何かをしたいコマンドの指定がここで出来るようになったのか。|
|recovery_min_apply_delay|追加|遅延リカバリ周りの設定がこっちに移動したっぽい|
|recovery_target|追加|リカバリ周りの設定が(以下略|
|recovery_target_action|追加|リカバリ周りの設定が(以下略|
|recovery_target_inclusive|追加|リカバリ周りの設定が(以下略|
|recovery_target_lsn|追加|リカバリ周りの設定が(以下略|
|recovery_target_name|追加|リカバリ周りの設定が(以下略|
|recovery_target_time|追加|リカバリ周りの設定が(以下略|
|recovery_target_timeline|追加|リカバリ周りの設定が(以下略|
|recovery_target_xid|追加|リカバリ周りの設定が(以下略|
|restore_command|追加|リカバリ周りの設定が(以下略|
|shared_memory_type|追加|共有メモリ方式を指定可能になった。値域はsysvとmmap。デフォルトは``mmap``ぽい|
|ssl_library|追加|SSL処理を行うライブラリが指定可能になったのかな。|
|ssl_max_protocol_version|追加|SSLの対応バージョンに関する指定？|
|ssl_min_protocol_version|追加|SSLの対応バージョンに関する指定？|
|tcp_user_timeout|追加|TCPのタイムアウト指定？0だとシステム(OS)規定の値が使われる。|
|transaction_isolation|変更|型がstringからenumに変更。値域は``serializable,"repeatable read","read committed","read uncommitted"``。デフォルト値は``"read committed"``|
|vacuum_cost_delay|変更|型がintegerからrealに変更。小数点を含む指定が可能になったようだ・・・けど、そんな細かいチューニングする人っているのかしらん。|
|wal_init_zero|追加|最初に使用する前に、新しいWALファイルにゼロを書き込む。デフォルトはon？<br>beta2から追加？|
|wal_recycle|追加|WALファイルの名前を変更してリサイクルする。<br>beta2から追加？|
|wal_sender_timeout|変更|contextが``sighup``から``user``へ変更|

# おわりに
ということで、現時点の版とPostgreSQL 11をざっと比較してみた。
大きい話としては、

* JIT機能がデフォルトで有効になった。
* リカバリ周りのパラメータがpostgresql.confに統合された。

というあたりだろうか。もちろん、ベータ版の時点でこの辺も変わるだろうし、正式版まではあと半年以上あるので、正式版でどこまで変わったので、RC版が出た時点で再確認したほうが良さげ。

## beta2/beta3での変更点(追記)
* default_table_access_method の追加(beta2)
* wal_init_zero の追加(beta2)
* wal_recycle の追加(beta2)
* log_statement_sample_rate についてはbeta2までは残っていたがbeta3で消えた。(beta3)