リリース日: 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 |