リリース日: 2018-10-18
PostgreSQL 11の主な強化点には以下のものがあります。
パーティションニング機能の改善:
ハッシュキーによるパーティションに対応しました。
パーティションテーブルに対するPRIMARY KEY
、FOREIGN KEY
、インデックス、トリガに対応しました。
既存パーティションのどれにも一致しないデータを格納する「デフォルト」パーティションを作れるようにしました。
パーティションキー列を変更するUPDATE
文では、変更行が適切なパーティションに移動するようになりました。
問い合わせのプラン作成時と実行時の強化されたパーティション排除方式によってSELECT
性能を改善しました。
並列処理の改善:
CREATE INDEX
がBツリーインデックスを構築するときに並列処理できるようになりました。
並列化がCREATE TABLE ... AS
、CREATE MATERIALIZED VIEW
、および、UNION
を使用するいくらかの問い合わせで可能になりました。
パラレルハッシュ結合とパラレルシーケンシャルの実行が改善しました。
組み込みトランザクションに対応したSQLストアドプロシージャ。
オプションで一部SQLコードに対するJist-in-Time(JIT)コンパイルに対応し、式の評価が高速化します。
ウィンドウ関数が、RANGE
、距離
PRECEDING/FOLLOWINGGROUPS
モード、およびフレームの除外オプションを含む、SQL:2011標準で示される全てのフレームオプションに対応するようになりました。
CREATE INDEX
のINCLUDE
句を使って、カバリングインデックスが作れるようになりました。
非NULLの列デフォルトを伴うALTER TABLE ... ADD COLUMN
でテーブル書き直しを回避できることを含む、その他多数の有用な性能改善。
上記の項目は次節でより詳しく説明されます。
以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpallを利用したダンプとリストア、あるいはpg_upgradeの使用が必要です。
バージョン11には、以前のバージョンとの互換性に影響する多数の変更点が含まれています。以下の非互換性に注意してください。
pg_dumpがデータベースの中身だけでなく属性もダンプするようにしました。 (Haribabu Kommi)
これまでは、データベース単位のGRANT
/REVOKE
権限付与やALTER DATABASE SET
の変数設定などのデータベース自体の属性はpg_dumpallでのみダンプされました。
これからはpg_dump --create
とpg_restore --create
がデータベース内のオブジェクトに加えてデータベース属性をリストアします。
これからはpg_dumpall -g
はロールとテーブル空間関連の属性のみをダンプします。
pg_dumpallの完全な出力(-g
無し)に変更はありません。
--create
無しのpg_dumpとpg_restoreは、もはやデータベース単位のコメントとセキュリティラベルをダンプ/リストアしません。今後これらはデータベースの属性として扱われます。
これからはpg_dumpallの出力スクリプトは常に元のロケールとエンコーディングでデータベースを作成します。また、そのためロケールやエンコーディング名が宛先システムで未知の場合には失敗します。
これまでは、データベースのロケールとエンコーディングが元のクラスタのデフォルトと一致していた場合、CREATE DATABASE
はこれらの指定無しに出力されていました。
これからはpg_dumpall --clean
はユーザ作成のデータベースと同様にpostgres
およびtemplate1
データベースのロケールおよびエンコーディング設定を元通りにリストアします。
関数と列参照との曖昧さを解決するとき、構文形式を重視するようにしました。 (Tom Lane)
x
がテーブル名または複合列であるとき、PostgreSQLは伝統的に
とf
(x
)
の構文形式を同じと見做して、関数を書いてそれをオンデマンドで計算される列のように使う細工を可能にしていました。
なお、両方の解釈が可能な場合には列の解釈が常に選ばれ、ユーザが関数実行を意図していた場合に驚くべき結果をもたらしていました。
これからは曖昧な場合には構文形式に一致する解釈が選択されます。
x
.f
テーブルとドメインの制約名について唯一性を完全に強制するようにしました。 (Tom Lane)
PostgreSQLはテーブル制約名が互いに異なると想定していて、ドメインの制約名についても同様です。 しかしながら、これまでは厳密な強制になっておらず、重複する名前が作られる稀な場合がありえました。
power(numeric, numeric)
とpower(float8, float8)
がNaN
入力をPOSIX標準に従って扱うようにしました。
(Tom Lane, Dang Minh Huong)
POSIXでは、NaN ^ 0 = 1
、1 ^ NaN = 1
であり、しかし、他の全てのNaN
入力を含むケースはNaN
を返すべし、とされています。
power(numeric, numeric)
はNaN
入力がある場合の全てで単にNaN
を返していましたが、これからは前述の二つの例外に従います。
power(float8, float8)
は、Cライブラリが標準通りであれば標準に従った動作でしたが、一部の古いUnixプラットフォームのライブラリはそうなっておらず、一部バージョンのWindowsでも問題がありました。
to_number()
がテンプレート区切りが一致しないときに文字を消費するのを防止しました。
(Oliver Ford)
具体的には、SELECT to_number('1234', '9,999')
が134
を返していましたが、これからは1234
を返すようになります。
L
とTH
は数字、正負記号、小数点やカンマ以外の文字のみを消費するようになります。
to_date()
、to_number()
およびto_timestamp()
を、各テンプレート文字に対する1文字を読み飛ばすように修正しました。
(Tom Lane)
これまでは、テンプレート文字の各バイトに対して1バイトを読み飛ばしていて、いずれかの文字列にマルチバイト文字が含まれている場合に奇妙な振る舞いが生じました。
to_char()
、to_number()
およびto_timestamp()
のテンプレート文字列で、ダブルクォート内のバックスラッシュの扱いを調整しました。
このようなバックスラッシュは次の文字、特にダブルクォートや別のバックスラッシュを、エスケープするようになります。
xmltable()
、xpath()
および他のXML処理関数で相対パス式を正しく扱うようにしました。
(Markus Winand)
SQL標準によると、相対パスはルートノードではなくXML入力ドキュメントのドキュメントノードから開始します。これまでこれら関数ではルートノードから開始していました。
拡張問い合わせプロトコルで、statement_timeout
がSync前の全コマンドではなく、各Executeメッセージに別々に適用されるようにしました。
(Tatsuo Ishii, Andres Freund)
システムカタログpg_class
からrelhaspkey
列を除きました。
(Peter Eisentraut)
プライマリキーの検査を必要とするアプリケーションはpg_index
に問い合わせるべきです。
システムカタログpg_proc
のproisagg
列とproiswindow
列をprokind
で置き換えました。
(Peter Eisentraut)
この新たな列は関数、プロシージャ、集約、ウィンドウ関数をより明確に区別します。
情報スキーマの列tables
.table_type
がFOREIGN TABLE
の代わりにFOREIGN
を返すように修正しました。
(Peter Eisentraut)
この新たな出力はSQL標準に適合します。
バックグラウンドワーカのpsプロセスの表示ラベルをpg_stat_activity
.backend_type
のラベルと一致するように変更しました。
(Peter Eisentraut)
ラージオブジェクトを読み書きするときではなくオープンするときに、その権限検査が行われるようにしました。 (Tom Lane, Michael Paquier)
もし書き込みアクセスが要求されて、それが不可能であったなら、たとえラージオブジェクトに書き込み行われなかったとしても、これからはエラーが生じます。
非スーパーユーザが共有カタログのインデックス再作成をするのを防止しました。 (Michael Paquier, Robert Haas)
これまではデータベース所有者もインデックス再作成が許されていましたが、これからは権限範囲外とみなされます。
非推奨となっていたadminpack
の関数pg_file_read()
、pg_file_length()
、pg_logfile_rotate()
を廃止しました。
(Stephen Frost)
現在では同等機能がコアバックエンドに存在します。
インストール済みのadminpack
では、ALTER EXTENSION ... UPDATE
でアップデートするまで、これら関数を引き続き利用できます。
ダブルクォートで囲われたコマンドオプションの大文字使用を維持するようにしました。 (Daniel Gustafsson)
これまではある種のSQLコマンドでのオプション名はたとえダブルクォート内に入っていても強制的に小文字に変換されました。
例えば、インデックスストレージオプションの"FillFactor"
は、正しい名称は小文字なのですが、受け入れられていました。
このようなケースでは今後はエラーが発生します。
サーバパラメータreplacement_sort_tuples
を廃止しました。
(Peter Geoghegan)
置換ソートはもはや有用ではないと判断されました。
CREATE FUNCTION
でのWITH
句を廃止しました。
(Michael Paquier)
PostgreSQLは同じことができる標準準拠の構文を以前からサポートしていました。
In PL/pgSQL trigger functions, the OLD
and NEW
variables now read as NULL when not
assigned (Tom Lane)
Previously, references to these variables could be parsed but not executed.
以下にPostgreSQL 11と前のメジャーリリースとの詳細な変更点を記載します。
キー列のハッシュに基づくパーティションを作れるようにしました。 (Amul Sul)
パーティションテーブル上のインデックスに対応しました。 (Álvaro Herrera, Amit Langote)
パーティションテーブル上の「インデックス」は、パーティションテーブル全体にまたがる物理的なインデックスではなく、むしろ、テーブルの各パーティション上の同様のインデックスを自動的に作成するテンプレートです。
パーティションキーがインデックス列セットの一部であるなら、パーティションインデックスはUNIQUE
と宣言してもよいです。
各物理インデックスは各パーティション内の一意性しか強制しませんが、これはパーティションテーブル全体にわたる有効な一意性制約を意味します。
新コマンドALTER INDEX ATTACH PARTITION
は、パーティション上の既存のインデックスを属するパーティションテーブルの適合するインデックステンプレートと関連付けします。
これは既存パーティションテーブルに新たなパーティションインデックスを用意する際に柔軟性をもたらします。
パーティションテーブル上の外部キーに対応しました。 (Álvaro Herrera)
パーティションテーブル上のFOR EACH ROW
トリガに対応しました。
(Álvaro Herrera)
パーティションテーブル上のトリガを作成すると、自動的に全ての既存パーティションと今後作られるパーティションにトリガが作成されます。 これによりパーティションテーブル上の遅延された一意性制約にも対応します。
パーティションテーブルがデフォルトパーティションを持てるようにしました。 (Jeevan Ladhe, Beena Emerson, Ashutosh Bapat, Rahila Syed, Robert Haas)
デフォルトパーティションにはどの定義済みパーティションにも適合しなかった行が格納され、それに応じて適宜に検索されます。
パーティションキー列を変更するUPDATE
文は、影響を受ける行を適切なパーティションに移動するようになります。
(Amit Khandekar)
パーティションケーブルでのINSERT
、UPDATE
およびCOPY
が行を外部パーティションに適切に転送できるようにしました。
(Etsuro Fujita, Amit Langote)
これはpostgres_fdw
外部テーブルで対応されています。
Since the ExecForeignInsert
callback function
is called for this in a different way than it used to be,
foreign data wrappers must be modified to cope with this change.
問い合わせ処理中のより高速なパーティション排除を可能にしました。
これは多数のパーティションを伴うパーティションテーブルへのアクセスを高速化します。
問い合わせ実行中のパーティション排除を可能にしました。 (David Rowley, Beena Emerson)
これまではパーティション排除はプラン作成時のみ行われ、それは、多数の結合と準備された問い合わせではパーティション排除が使えないことを意味しました。
パーティションテーブル同士の等価結合で、一致するパーティション同士が直接結合できるようにしました。 (Ashutosh Bapat)
この機能はデフォルトでは無効ですが、enable_partitionwise_join
を変更して有効にできます。
パーティションテーブルに対する集約関数が各パーティションを別々に評価し、次にそれら結果をマージできるようにしました。 (Jeevan Chalke, Ashutosh Bapat, Robert Haas)
この機能はデフォルトでは無効ですが、enable_partitionwise_aggregate
を変更して有効にできます。
postgres_fdw
がパーティションである外部テーブルに集約をプッシュダウンできるようにしました。
(Jeevan Chalke)
並列にBツリーインデックス構築ができるようにしました (Peter Geoghegan, Rushabh Lathia, Heikki Linnakangas)
ハッシュ結合を共有ハッシュテーブルを使って並列で行えるようにしました。 (Thomas Munro)
UNION
が個々のSELECT
が並列化できない場合にも各SELECT
を並列に実行できるようにしました。
(Amit Khandekar, Robert Haas, Amul Sul)
パーティションスキャンがパラレルワーカをより効果的に使えるようにしました。 (Amit Khandekar, Robert Haas, Amul Sul)
LIMIT
をパラレルワーカに渡せるようにしました。
(Robert Haas, Tom Lane)
これにより返される結果の減少と対象としたインデックススキャンの使用を可能とします。
単一評価問い合わせ(例えばWHERE
句の集約問い合わせ)や対象リスト内の関数を並列化できるようにしました。
(Amit Kapila, Robert Haas)
リーダーもサブプランを実行するかどうかを制御するサーバパラメータparallel_leader_participation
を追加しました。
(Thomas Munro)
デフォルトで有効になっており、リーダーもサブプランを実行します。
CREATE TABLE ... AS
、SELECT INTO
、および、CREATE MATERIALIZED VIEW
コマンドの系列化を可能にしました。
(Haribabu Kommi)
多数のパラレルワーカがあるときのシーケンシャルスキャンの性能を改善しました。 (David Rowley)
EXPLAIN
にパラレルワーカのソート動作の報告を加えました。
(Robert Haas, Tom Lane)
Bツリーインデックスに、検索キーに含まれないけれどもインデックスオンリースキャンで参照可能な列を、含めることができるようにしました。 (Anastasia Lubennikova, Alexander Korotkov, Teodor Sigaev)
これはCREATE INDEX
の新たなINCLUDE
句でできるようになります。
これはある種の問い合わせを最適化する「カバリングインデックス」の構築を容易にします。
単調増加のインデックスの追加の性能を改善しました。 (Pavan Deolasee, Peter Geoghegan)
ハッシュインデックスのスキャン性能を改善しました。 (Ashutosh Sharma)
ハッシュ、GiST、GINインデックスに対する述語ロックを追加しました。 (Shubham Barai)
これはシリアライザブルモードのトランザクションで直列化競合の可能性を減らします。
前方一致演算子text
^@
text
を追加しました。
これはSP-GiSTによりサポートされます。
(Ildus Kurbangaliev)
これはBツリーインデックスでvar
LIKE 'word%'
を使うことと似ていますが、より効果的です。
ポリゴンにSP-GiSTでインデックス付けできるようにしました。 (Nikita Glukhov, Alexander Korotkov)
SP-GiSTがリーフキーの非可逆表現を使えるようにしました。 (Teodor Sigaev, Heikki Linnakangas, Alexander Korotkov, Nikita Glukhov)
統計情報における最頻値の選択を改善しました。 (Jeff Janes, Dean Rasheed)
これまでは、最頻値(MCV)は全ての列値と比較した頻度に基づいて特定されていました。 これからはMCVはMCVでない値と比較した頻度に基づいて選ばれます。 これは一様な分布と一様でない分布の両方でアルゴリズムの頑健性を改善します。
>=
と<=
に対する選択率の見積を改善しました。
(Tom Lane)
これまではこのような場合は、比較する定数がMCVでない限り、それぞれ>
および<
と同じ選択率見積が使われていました。
この変更は小さい範囲のBETWEEN
を伴う問い合わせで特に有用です。
var
=
var
を同等であるならvar
IS NOT NULL
に変換するようにしました。
(Tom Lane)
これはよりよい選択率見積をもたらします。
EXISTS
とNOT EXISTS
の問い合わせについて、オプティマイザの行数見積を改善しました。
(Tom Lane)
オプティマイザがHAVING
句のコスト評価と選択率を考慮するようにしました。
(Tom Lane)
実行速度を改善させる、問い合わせプランの一部のジャストインタイム(JIT)コンパイルに対応しました。 (Andres Freund)
この機能を有効にするにはLLVMが必要です。 本機能をサポートするビルドにおいても、今のところデフォルトでは有効になっていません。
ビットマップスキャンが可能であるときにインデックスオンリースキャンを実行できるようにしました。 (Alexander Kuzmenkov)
VACUUM
中にフリースペースマップを更新するようにしました。
(Claudio Freire)
これによりフリースペースがより早く再利用されます。
VACUUM
が不要なインデックススキャンを回避できるようにしました。
(Masahiko Sawada, Alexander Korotkov)
複数同時実行トランザクションをコミットする性能を改善しました。 (Amit Kapila)
集合を返す関数を対象リストに使う問い合わせでメモリ使用を減らしました。 (Andres Freund)
集約計算の速度を改善しました。 (Andres Freund)
postgres_fdw
が結合を使うUPDATE
とDELETE
を外部サーバにプッシュできるようにしました。
(Etsuro Fujita)
これまでは結合の無いUPDATE
とDELETE
だけがプッシュされました。
Windowsでlarge pagesをサポートしました。 (Takayuki Tsunakawa, Thomas Munro)
これはhuge_pages設定パラメータで制御されます。
log_statement_stats
、log_parser_stats
、log_planner_stats
およびlog_executor_stats
の出力でメモリ利用を示すようにしました。
(Justin Pryzby, Peter Eisentraut)
バックグラウンドワーカの種別を示す列pg_stat_activity
.backend_type
を追加しました。
(Peter Eisentraut)
バックグラウンドワーカ種別はps出力でも参照できます。
log_autovacuum_min_duration
のログ出力が、同時に削除されていたテーブルをとばすようにしました。
(Nathan Bossart)
テーブル制約とトリガに関するinformation_schema
の列を追加しました。
(Peter Eisentraut)
具体的には、これまで常にNULLであったtriggers
.action_order
、triggers
.action_reference_old_table
、および、triggers
.action_reference_new_table
に値が入るようになります。
また、table_constraints
.enforced
も値を持つようになりますが、未だ役立つ存在ではありません。
search/bindモードでより複雑なLDAP指定ができるようにしました。 (Thomas Munro)
具体的には、ldapsearchfilter
でLDAP属性の組み合わせを用いたパターンマッチができます。
LDAP認証で暗号化LDAPが使えるようにしました。 (Thomas Munro)
私達は既にldaptls=1
によるTLS上のLDAPをサポートしています。
この新たな暗号化LDAPのTLS LDAP方式は、ldapscheme=ldaps
またはldapurl=ldaps://
で有効になります。
LDAPエラーのログ出力を改善しました。 (Thomas Munro)
ファイルシステムアクセスが可能なデフォルトロールを追加しました。 (Stephen Frost)
具体的には新たなロールは、pg_read_server_files
、pg_write_server_files
、pg_execute_server_program
です。
これらロールはサーバ側COPY
とfile_fdw
拡張を誰が使えるかも制御します。
これまでは、現在もデフォルトの振る舞いですが、スーパーユーザのみがこれらの関数を使えました。
ファイルシステム関数をスーパーユーザの検査ではなくGRANT
/REVOKE
で制御できるようにしました。
(Stephen Frost)
具体的には次の関数、pg_ls_dir()
、pg_read_file()
、pg_read_binary_file()
、pg_stat_file()
が変更されました。
lo_import()
とlo_export()
に対するアクセス制御にGRANT
/REVOKE
を使うようにしました。
(Michael Paquier, Tom Lane)
これまではスーパーユーザのみがこれら関数の使用を許されていました。
コンパイル時オプションALLOW_DANGEROUS_LO_FUNCTIONS
は廃止されました。
postgres_fdw
テーブルへのパスワード無しアクセスを防止するときに、セッション所有者ではなくビュー所有者を使うようにしました。
(Robert Haas)
PostgreSQLではスーパーユーザのみがpostgres_fdw
テーブルに(例えばpeer
で)パスワード無しのアクセスができます。
これまでは、このようなアクセスが可能であるためにはセッション所有者がスーパーユーザである必要がありました。
これからは代わりにビュー所有者がチェックされます。
ビュー上のSELECT FOR UPDATE
での無効なロック権限検査を修正しました。
(Tom Lane)
SSLキーファイルのパスフレーズを供給できるサーバ設定ssl_passphrase_command
を追加しました。
(Peter Eisentraut)
サーバ設定がリロードされたときに、SSL設定がリロードされてssl_passphrase_command
が呼ばれるかどうかを指定するssl_passphrase_command_supports_reload
も追加しました。
TOAST格納が考慮される最小タプル長を制御するストレージパラメータtoast_tuple_target
を追加しました。
(Simon Riggs)
デフォルトのTOAST閾値は変更されていません。
メモリやファイルのサイズに関するサーバオプションをバイト単位で指定できるようにしました。 (Beena Emerson)
この新たな単位の接尾詞は「B」です。 既存の単位「kB」、「MB」、「GB」および「TB」に追加されます。
WALファイルサイズをinitdb時に設定できるようにしました。 (Beena Emerson)
これまでは16MBのデフォルトをコンパイル時にのみ、変更できました。
一つのチェックポイントのみに対してWALデータを保持するようにしました。 (Simon Riggs)
これまでは二つのチェックポイントに対してWALが保持されていました。
圧縮性の改善のため、強制切り替えされたWALセグメントファイルの使われない部分をゼロで埋めるようにしました。 (Chapman Flack)
ロジカルレプリケーション使用時にTRUNCATE
動作をレプリケーションするようにしました。
(Simon Riggs, Marco Nenciarini, Peter Eisentraut)
準備されたトランザクションの情報をロジカルレプリケーションのサブスクライバに渡すようにしました。 (Nikhil Sontakke, Stas Kelvich)
ログを取らないテーブル、一時テーブル、および、pg_internal.init
ファイルをストリーミングベースバックアップから除外しました。
(David Steele)
これらのファイルをコピーする必要はありません。
ヒープページのチェックサムをストリーミングベースバックアップの際に検証できるようにしました。 (Michael Banck)
レプリケーションスロットをサブスクライバにより消費されなくとも指定に従って前進できるようにしました。 (Petr Jelinek)
これにより、不要な内容であるときにレプリケーションスロットを効率的に前進できます。
これはpg_replication_slot_advance()
で実行されます。
backup_label
ファイルにタイムライン情報を追加しました。
(Michael Paquier)
また、WALタイムラインがbackup_label
のタイムラインと一致するかを検査するようにしました。
ホストとポートの接続情報をpg_stat_wal_receiver
システムビューに追加しました。
(Haribabu Kommi)
ALTER TABLE
がテーブルの書き直しをすることなしに非NULLのデフォルトを伴う列を追加できるようにしました。
(Andrew Dunstan, Serge Rielau)
デフォルト値が定数の場合に使えます。
元となるテーブルをロックすることにより、ビューをロックできるようにしました。 (Yugo Nagata)
ALTER INDEX
が式インデックスに対して統計情報収集の対象を設定できるようにしました。
(Alexander Korotkov, Adrien Nayrat)
psqlで\d+
がインデックスの統計情報対象を表示するようになりました。
一つのVACUUM
またはANALYZE
コマンドで複数テーブルを指定可能にしました。
(Nathan Bossart)
また、VACUUM
で指定されるテーブルのいずれかが列リストを使っている場合、ANALYZE
キーワードが必須となります。
これまでは、このような場合にはANALYZE
が暗黙に含まれました。
ANALYZE
に括弧書きのオプション構文を追加しました。
(Nathan Bossart)
これはVACUUM
でサポートされている構文と同様です。
集約の最終関数の振る舞いを指定するCREATE AGGREGATE
のオプションを追加しました。
(Tom Lane)
これはユーザ定義集約関数を最適化し、ウィンドウ関数として動作させるのに有益です。
ドメインの配列を作成できるようにしました。 (Tom Lane)
また、array_agg()
がドメインに対して使用できるようになります。
複合型のドメインに対応しました。 (Tom Lane)
加えて、PL/Perl、PL/PythonおよびPL/Tclで、複合ドメインの、関数の引数と戻り値を扱えるようにしました。 また、PL/Pythonのドメイン処理を改善しました。
JSONB
スカラから数値および論理値のデータ型へのキャストを追加しました。
(Anastasia Lubennikova)
SQL:2011で指定されている全てのウィンドウ関数フレームオプションを追加しました。 (Oliver Ford, Tom Lane)
具体的には、RANGE
モードで指定された差分値のプラス/マイナスの範囲内のグルーピング値を持つ行を選択するPRECEDING
とFOLLOWING
が使えるようにしました。
指定数のプラス/マイナスの隣接グループを含めるGROUPS
モードを追加しました。
フレーム除外構文も追加されました。
ハッシュ関数のSHA-2ファミリーを追加しました。 (Peter Eisentraut)
具体的には、sha224()
、sha256()
、sha384()
、sha512()
が追加されました。
64ビットの非暗号ハッシュ関数のサポートを追加しました。 (Robert Haas, Amul Sul)
to_char()
とto_timestamp()
がタイムゾーンのUTCからのオフセットを時間と分で指定できるようにしました。
(Nikita Glukhov, Andrew Dunstan)
これには書式指定TZH
およびTZM
を使います。
Web検索エンジンで使われているのと同様の問い合わせ構文に対応したテキスト検索関数websearch_to_tsquery()
を追加しました。
(Victor Drobny, Dmitry Ivanov)
JSON
/JSONB
の値と照合するテキスト検索問い合わせを作る関数json(b)_to_tsvector()
を追加しました。
(Dmitry Dolgov)
SQLレベルのプロシージャを追加しました。これは、自身のトランザクションを開始してコミットすることができます。 (Peter Eisentraut)
プロシージャは新たなCREATE PROCEDURE
コマンドで作成し、CALL
により駆動します。
新たなALTER
/DROP ROUTINE
コマンドで、プロシージャ、関数、集約を含む全てのルーチン的オブジェクトの変更/削除ができます。
なお、CREATE OPERATOR
やCREATE TRIGGER
ではPROCEDURE
と書くよりもFUNCTION
と書くのが望ましいです。なぜなら、参照されるオブジェクトはプロシージャではなく関数でなければならないからです。
しかしながら、古い構文は互換性のために依然受け入れられます。
PL/pgSQL、PL/Perl、PL/Python、PL/TclおよびSPIサーバサイド言語にトランザクション制御を追加しました。 (Peter Eisentraut)
トップトランザクションレベルのプロシージャ内と、他のDO
およびCALL
ブロックのみを含む、入れ子になったDO
およびCALL
ブロックでのみ、トランザクション制御が可能です。
PL/pgSQLの複合型変数をNOT NULL、定数、あるいは初期値を伴うものとして定義できるようにしました。 (Tom Lane)
PL/pgSQLで同セッション中に関数を最初に実行してから後に実行するまでの間の複合型(レコードや行など)の変更を処理できるようにしました。 (Tom Lane)
これまではこのような状況ではエラーが生じました。
JSONB
とPL/Pythonの型との間で変換を行う拡張jsonb_plpython
を追加しました。
(Anthony Bykov)
JSONB
とPL/Perlの型との間で変換を行う拡張jsonb_plperl
を追加しました。
(Anthony Bykov)
デフォルトでは圧縮を無効とするようにlibpqを変更しました。 (Peter Eisentraut)
圧縮は最近のOpenSSLバージョンでは既に無効となっており、そのためそのようなライブラリではlibpq設定に影響はありません。
ecpgのWHENEVER
文にDO CONTINUE
オプションを追加しました。
(Vinayak Pokale)
これはCのcontinue
文を生成し、指定された条件になったときに現在のループの先頭に戻します。
文字配列のOracle Pro*Cスタイルの処理を有効にするecpgのモードを追加しました。
このモードは-C
で有効になります。
psqlに問い合わせ結果の列の名前と型を出力するコマンド\gdesc
を追加しました。
(Pavel Stehule)
psqlに問い合わせ動作とエラーを報告する変数を追加しました。 (Fabien Coelho)
具体的には、新たな変数はERROR
、SQLSTATE
、ROW_COUNT
、LAST_ERROR_MESSAGE
、および、LAST_ERROR_SQLSTATE
です。
psqlで変数の存在をテストできるようにしました。 (Fabien Coelho)
具体的には、\if
文にて構文:{?variable_name}
で変数の存在をテストできます。
環境変数PSQL_PAGER
でpsqlのページャを制御できるようにしました。
(Pavel Stehule)
これによりpsqlのデフォルトページャを他のアプリケーションむけのページャとは別の環境変数で指定できます。
PSQL_PAGER
が設定されていない場合、PAGER
は引き続き参照されます。
psqlの\d+
コマンドが常にテーブルのパーティション情報を出力するようにしました。
(Amit Langote, Ashutosh Bapat)
これまではパーティションを持っていないパーティションテーブルの場合にはパーティション情報が出力されませんでした。 また、どのパーティションがそれ自身もパーティション分けされているかも示すようにしました。
psqlがパスワードプロンプトを出すときに適切なユーザ名を報告するようにしました。 (Tom Lane)
これまでは、-U
とURIに埋め込まれたユーザ名との組み合わせで誤った表示になっていました。
また、--password
が指定されたときにパスワードプロンプトの前のユーザ名を隠すようにしました。
先行する入力が無い場合にquit
とexit
でpsqlを終了できるようにしました。
(Bruce Momjian)
また、入力バッファが空でない状態でquit
とexit
のみの行が入力された場合に、終了のしかたについてヒントを出力します。
help
に対して同様のヒントを追加しました。
psqlが、行に\q
のみが入力されたものの無視されたときに、control-Dを使うことを示唆するヒント出すようにしました。
(Bruce Momjian)
例えば\q
は文字列を入力しているときには終了しません。
ALTER INDEX RESET
/SET
のタブ補完を改善しました。
(Masahiko Sawada)
psqlがタブ補完の問い合わせをサーババージョンに基づいて適合させる基盤を追加しました。 (Tom Lane)
これまでは古いサーバに対してタブ補完の問い合わせが失敗する可能性がありました。
pgbenchに、NULL、真理値、およびいくつかの関数と演算子に対応する表現を追加しました。 (Fabien Coelho)
pgbenchに\if
条件節のサポートを追加しました。
(Fabien Coelho)
pgbenchの変数名で非ASCII文字が使用できるようにしました。 (Fabien Coelho)
pgbenchに実行される初期化手順を制御するオプション--init-steps
を追加しました。
(Masahiko Sawada)
pgbenchにおおよそジップ分布をするランダムジェネレータを追加しました。 (Alik Khilazhev)
pgbenchで乱数シードを設定できるようにしました。 (Fabien Coelho)
pgbenchがpow()
とpower()
で冪乗を行えるようにしました。
(Raúl Marín Rodríguez)
pgbenchにハッシュ関数を追加しました。 (Ildar Musin)
pgbenchの--latency-limit
と--rate
を使ったときの統計をより正確にしました。
(Fabien Coelho)
pg_basebackupに名前付けされたレプリケーションスロットを作るオプションを追加しました。 (Michael Banck)
オプション--create-slot
は、WALストリーミング方式が使われているとき(--wal-method=stream
)に、名前付けされたレプリケーションスロット(--slot
)を作ります。
initdbがデータディレクトリにグループ読み取りアクセスを設定できるようにしました。 (David Steele)
これは新たなinitdbオプション--allow-group-access
で実現されます。
管理者はinitdbを実行する前の空データディレクトリにグループパーミッションを設定することもできます。
サーバ変数data_directory_mode
でデータディレクトリのグループパーミッションを参照することができます。
データベースチェックサムをオフラインで検証するpg_verify_checksumsツールを追加しました。 (Magnus Hagander)
pg_resetwalが--wal-segsize
オプションでWALセグメントサイズを変更できるようにしました。
(Nathan Bossart)
pg_resetwalとpg_controldataにロングオプションを追加しました。 (Nathan Bossart, Peter Eisentraut)
pg_receivewalに同期WAL書き込みを抑止できるオプション--no-sync
を追加しました。テスト用途のものです。
(Michael Paquier)
WAL受信を止めるべき位置を指定するpg_receivewalのオプション--endpos
を追加しました。
(Michael Paquier)
pg_ctlがプロセスにSIGKILL
シグナルを送れるようにしました。
(Andres Freund)
これまでは誤用の可能性を懸念してサポートされていませんでした。
pg_rewindでコピーされるファイルの数を減らしました。 (Michael Paquier)
pg_rewindがroot
で実行されるのを防止しました。
(Michael Paquier)
出力エンコーディングを制御するpg_dumpallのオプション--encoding
を追加しました。
(Michael Paquier)
pg_dumpには既にこのオプションがあります。
オリジナルのパーティションではなくパーティションのルートテーブルへのデータ読み込みを強制するpg_dumpのオプション--load-via-partition-root
を追加しました。
(Rushabh Lathia)
これは、照合定義やエンディアンが違うシステムに読み込み、必要とする行が前と異なるパーティションに格納される可能性がある場合に有用です。
データベースオブジェクトのコメントのダンプとリストアを抑制するオプションを追加しました。 (Robins Tharakan)
この新たなpg_dump、pg_dumpall、および、pg_restoreのオプションは--no-comments
です。
PGXSがインクルードファイルのインストールに対応しました。 (Andrew Gierth)
これは他のモジュールに依存した拡張モジュールの作成を助けます。
これまでは依存モジュールに対して参照されるインクルードファイルを見つける簡単な方法がありませんでした。
データ型を定義するいくつかの既存のcontrib
モジュールが関連ファイルをインストールするために調整されています。
また、これからはPL/PerlとPl/Pythonはインクルードファイルがインストールされ、これら言語に対する変換モジュールの作成を助けます。
拡張がPostgreSQLで知られているエラーコードのリストにアクセスできるようにerrcodes.txt
を導入しました。
(Thomas Munro)
ドキュメントをDocBook XMLに切り替えました。 (Peter Eisentraut, Alexander Lakhin, Jürgen Purtz)
過去ブランチとの互換性のためファイル名には未だsgml
拡張子を使います。
そうするのが相応しいプラットフォーム(ほとんどのプラットフォームです)でbool
型を定義するためにstdbool.h
を使うようにしました。
(Peter Eisentraut)
これはstdbool.h
のインクルードを必要とする拡張モジュールのコーディングの危険を除去します。
初期システムカタログ内容を定義する方法を全面的に書き換えました。 (John Naylor)
初期データはこれからはPerlデータ構造で表現され、機械的に操作することが大幅に簡単になります。
拡張がクォートされた値のリストを取るカスタムサーバパラメータを作るのを防止しました。 (Tom Lane)
パラメータの属性に関する知識が拡張をロードする前にも必要となることから、これは今のところサポートできません。
SCRAM認証のときにチャンネルバインディングを使えるようにしました。 (Michael Paquier)
チャンネルバインディングは中間者攻撃を防止することを目的としていますが、これを強制的に有効にできない限りSCRAMでは防止できません。 残念ながらlibpqにはこれを行う方法がありません。 libpqと、JDBCなどのlibpqを使わずに構築されるインタフェースの将来バージョンでサポートされることが期待されます。
バックエンドワーカが通常は接続不可能なデータベースにつなげられるようにしました。 (Magnus Hagander)
ARMv8でハードウェアによるCRC計算に対応しました。 (Yuqi Gu, Heikki Linnakangas, Thomas Munro)
OIDによる組み込み関数の検索を高速化しました。 (Andres Freund)
これまでの二分探索は検索配列で置き換えられました。
問い合わせ結果の構成を高速化しました。 (Andres Freund)
システムキャッシュのアクセス速度を改善しました。 (Andres Freund)
連続した割り当て/解放むけに最適化された世代メモリアロケータを追加しました。 (Tomas Vondra)
これはロジカルデコーディングのメモリ使用を減らします。
pg_class
.reltuples
のVACUUM
による計算をANALYZE
による計算と一貫性を持つようにしました。
(Tomas Vondra)
perltidyバージョン20170521
を使うようにアップデートしました。
(Tom Lane, Peter Eisentraut)
拡張pg_prewarm
が起動時に以前の共有バッファ内容を復元できるようにしました。
(Mithun Cy, Robert Haas)
これはpg_prewarm
がサーバ稼動中に時々とシャットダウン時に、共有バッファのリレーションとブロック番号のデータをディスクに格納することで実現されます。
複数語の全体の類似度を計算するpg_trgm
の関数strict_word_similarity()
を追加しました。
(Alexander Korotkov)
同じ目的の関数word_similarity()
は既にありますが、これは複数語の類似した部分を探すように設計されていました。一方、strict_word_similarity()
は複数語全体の類似度を計算します。
citext
列のLIKE
比較で使えるインデックスを作成できるようにしました。
(Alexey Chernyshov)
これを行うには、インデックスをcitext_pattern_ops
演算子クラスで作らなければなりません。
btree_gin
がbool
、bpchar
、name
、および、uuid
データ型にインデックスを作れるようにしました。
(Matheus Oliveira)
cube
拡張とseg
拡張がGiSTインデックスを使ったインデックスオンリースキャンを実行できるようにしました。
(Andrey Borodin)
~>
演算子を使って負のcube座標を取得できるようにしました。
(Alexander Korotkov)
これはKNN-GiST検索で降順に座標を検索するときに有用です。
unaccent
拡張にベトナム語の文字の処理を追加しました。
(Dang Minh Huong, Michael Paquier)
amcheck
を各ヒープタプルがインデックスエントリを持っているかを検査するように強化しました。
(Peter Geoghegan)
adminpack
が新たなデフォルトのファイルシステムアクセスのロールを使うようにしました。
(Stephen Frost)
これまではスーパーユーザのみがadminpack
関数を呼び出しできました。これからはロール権限が検査されます。
pg_stat_statement
の問い合わせIDを64ビットに拡張しました。
(Robert Haas)
これは問い合わせIDのハッシュ衝突を大幅に削減します。 問い合わせIDは今後は負の値として表示される可能性があります。
もはや推奨されないためcontrib/start-scripts/osx
スクリプトを廃止しました。
(代替にcontrib/start-scripts/macos
を使ってください)
(Tom Lane)
chkpass
拡張を廃止しました。
(Peter Eisentraut)
この拡張はもはや有用なセキュリティツールあるいは拡張の書き方の例ではないと考えられます。
以下の人々(アルファベット順)はパッチ作者、コミッター、レビューア、テスターあるいは問題の報告者として本リリースに貢献しました。
Abhijit Menon-Sen |
Adam Bielanski |
Adam Brightwell |
Adam Brusselback |
Aditya Toshniwal |
Adrián Escoms |
Adrien Nayrat |
Akos Vandra |
Aleksander Alekseev |
Aleksandr Parfenov |
Alexander Korotkov |
Alexander Kukushkin |
Alexander Kuzmenkov |
Alexander Lakhin |
Alexandre Garcia |
Alexey Bashtanov |
Alexey Chernyshov |
Alexey Kryuchkov |
Alik Khilazhev |
Álvaro Herrera |
Amit Kapila |
Amit Khandekar |
Amit Langote |
Amul Sul |
Anastasia Lubennikova |
Andreas Joseph Krogh |
Andreas Karlsson |
Andreas Seltenreich |
André Hänsel |
Andrei Gorita |
Andres Freund |
Andrew Dunstan |
Andrew Fletcher |
Andrew Gierth |
Andrew Grossman |
Andrew Krasichkov |
Andrey Borodin |
Andrey Lizenko |
Andy Abelisto |
Anthony Bykov |
Antoine Scemama |
Anton Dignös |
Antonin Houska |
Arseniy Sharoglazov |
Arseny Sher |
Arthur Zakirov |
Ashutosh Bapat |
Ashutosh Sharma |
Ashwin Agrawal |
Asim Praveen |
Atsushi Torikoshi |
Badrul Chowdhury |
Balazs Szilfai |
Basil Bourque |
Beena Emerson |
Ben Chobot |
Benjamin Coutu |
Bernd Helmle |
Blaz Merela |
Brad DeJong |
Brent Dearth |
Brian Cloutier |
Bruce Momjian |
Catalin Iacob |
Chad Trabant |
Chapman Flack |
Christian Duta |
Christian Ullrich |
Christoph Berg |
Christoph Dreis |
Christophe Courtois |
Christopher Jones |
Claudio Freire |
Clayton Salem |
Craig Ringer |
Dagfinn Ilmari Mannsåker |
Dan Vianello |
Dan Watson |
Dang Minh Huong |
Daniel Gustafsson |
Daniel Vérité |
Daniel Westermann |
Daniel Wood |
Darafei Praliaskouski |
Dave Cramer |
Dave Page |
David Binderman |
David Carlier |
David Fetter |
David G. Johnston |
David Gould |
David Hinkle |
David Pereiro Lagares |
David Rader |
David Rowley |
David Steele |
Davy Machado |
Dean Rasheed |
Dian Fay |
Dilip Kumar |
Dmitriy Sarafannikov |
Dmitry Dolgov |
Dmitry Ivanov |
Dmitry Shalashov |
Don Seiler |
Doug Doole |
Doug Rady |
Edmund Horner |
Eiji Seki |
Elvis Pranskevichus |
Emre Hasegeli |
Erik Rijkers |
Erwin Brandstetter |
Etsuro Fujita |
Euler Taveira |
Everaldo Canuto |
Fabien Coelho |
Fabrízio de Royes Mello |
Feike Steenbergen |
Frits Jalvingh |
Fujii Masao |
Gao Zengqi |
Gianni Ciolli |
Greg Stark |
Gunnlaugur Thor Briem |
Guo Xiang Tan |
Hadi Moshayedi |
Hailong Li |
Haribabu Kommi |
Heath Lord |
Heikki Linnakangas |
Hugo Mercier |
Igor Korot |
Igor Neyman |
Ildar Musin |
Ildus Kurbangaliev |
Ioseph Kim |
Jacob Champion |
Jaime Casanova |
Jakob Egger |
Jean-Pierre Pelletier |
Jeevan Chalke |
Jeevan Ladhe |
Jeff Davis |
Jeff Janes |
Jeremy Evans |
Jeremy Finzel |
Jeremy Schneider |
Jesper Pedersen |
Jim Nasby |
Jimmy Yih |
Jing Wang |
Jobin Augustine |
Joe Conway |
John Gorman |
John Naylor |
Jon Nelson |
Jon Wolski |
Jonathan Allen |
Jonathan S. Katz |
Julien Rouhaud |
Jürgen Purtz |
Justin Pryzby |
KaiGai Kohei |
Kaiting Chen |
Karl Lehenbauer |
Keith Fiske |
Kevin Bloch |
Kha Nguyen |
Kim Rose Carlsen |
Konstantin Knizhnik |
Kuntal Ghosh |
Kyle Samson |
Kyotaro Horiguchi |
Lætitia Avrot |
Lars Kanis |
Laurenz Albe |
Leonardo Cecchi |
Liudmila Mantrova |
Lixian Zou |
Lloyd Albin |
Luca Ferrari |
Lucas Fairchild |
Lukas Eder |
Lukas Fittl |
Magnus Hagander |
Mai Peng |
Maksim Milyutin |
Maksym Boguk |
Mansur Galiev |
Marc Dilger |
Marco Nenciarini |
Marina Polyakova |
Mario de Frutos Dieguez |
Mark Cave-Ayland |
Mark Dilger |
Mark Wood |
Marko Tiikkaja |
Markus Winand |
Martín Marqués |
Masahiko Sawada |
Matheus Oliveira |
Matthew Stickney |
Metin Doslu |
Michael Banck |
Michael Meskes |
Michael Paquier |
Michail Nikolaev |
Mike Blackwell |
Minh-Quan Tran |
Mithun Cy |
Morgan Owens |
Nathan Bossart |
Nathan Wagner |
Neil Conway |
Nick Barnes |
Nicolas Thauvin |
Nikhil Sontakke |
Nikita Glukhov |
Nikolay Shaplov |
Noah Misch |
Noriyoshi Shinoda |
Oleg Bartunov |
Oleg Samoilov |
Oliver Ford |
Pan Bian |
Pascal Legrand |
Patrick Hemmer |
Patrick Krecker |
Paul Bonaud |
Paul Guo |
Paul Ramsey |
Pavan Deolasee |
Pavan Maddamsetti |
Pavel Golub |
Pavel Stehule |
Peter Eisentraut |
Peter Geoghegan |
Petr Jelínek |
Petru-Florin Mihancea |
Phil Florent |
Philippe Beaudoin |
Pierre Ducroquet |
Piotr Stefaniak |
Prabhat Sahu |
Pu Qun |
QL Zhuo |
Rafia Sabih |
Rahila Syed |
Rainer Orth |
Rajkumar Raghuwanshi |
Raúl Marín Rodríguez |
Regina Obe |
Richard Yen |
Robert Haas |
Robins Tharakan |
Rod Taylor |
Rushabh Lathia |
Ryan Murphy |
Sahap Asci |
Samuel Horwitz |
Scott Ure |
Sean Johnston |
Shao Bret |
Shay Rojansky |
Shubham Barai |
Simon Riggs |
Simone Gotti |
Sivasubramanian Ramasubramanian |
Stas Kelvich |
Stefan Kaltenbrunner |
Stephen Froehlich |
Stephen Frost |
Steve Singer |
Steven Winfield |
Sven Kunze |
Taiki Kondo |
Takayuki Tsunakawa |
Takeshi Ideriha |
Tatsuo Ishii |
Tatsuro Yamada |
Teodor Sigaev |
Thom Brown |
Thomas Kellerer |
Thomas Munro |
Thomas Reiss |
Tobias Bussmann |
Todd A. Cook |
Tom Kazimiers |
Tom Lane |
Tomas Vondra |
Tomonari Katsumata |
Torsten Grust |
Tushar Ahuja |
Vaishnavi Prabakaran |
Vasundhar Boddapati |
Victor Drobny |
Victor Wagner |
Victor Yegorov |
Vik Fearing |
Vinayak Pokale |
Vincent Lachenal |
Vitaliy Garnashevich |
Vitaly Burovoy |
Vladimir Baranoff |
Xin Zhang |
Yi Wen Wong |
Yorick Peterse |
Yugo Nagata |
Yuqi Gu |
Yura Sokolov |
Yves Goergen |
Zhou Digoal |