他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.6. リリース11

リリース日: 2018-10-18

E.6.1. 概要

PostgreSQL 11の主な強化点には以下のものがあります。

  • パーティションニング機能の改善:

    • ハッシュキーによるパーティションに対応しました。

    • パーティションテーブルに対するPRIMARY KEYFOREIGN KEY、インデックス、トリガに対応しました。

    • 既存パーティションのどれにも一致しないデータを格納するデフォルトパーティションを作れるようにしました。

    • パーティションキー列を変更するUPDATE文では、変更行が適切なパーティションに移動するようになりました。

    • 問い合わせのプラン作成時と実行時の強化されたパーティション排除方式によってSELECT性能を改善しました。

  • 並列処理の改善:

    • CREATE INDEXがBツリーインデックスを構築するときに並列処理できるようになりました。

    • 並列化がCREATE TABLE ... ASCREATE MATERIALIZED VIEW、および、UNIONを使用するいくらかの問い合わせで可能になりました。

    • パラレルハッシュ結合とパラレルシーケンシャルの実行が改善しました。

  • 組み込みトランザクションに対応したSQLストアドプロシージャ。

  • オプションで一部SQLコードに対するJist-in-Time(JIT)コンパイルに対応し、式の評価が高速化します。

  • ウィンドウ関数が、RANGE 距離 PRECEDING/FOLLOWINGGROUPS モード、およびフレームの除外オプションを含む、SQL:2011標準で示される全てのフレームオプションに対応するようになりました。

  • CREATE INDEXINCLUDE句を使って、カバリングインデックスが作れるようになりました。

  • 非NULLの列デフォルトを伴うALTER TABLE ... ADD COLUMNでテーブル書き直しを回避できることを含む、その他多数の有用な性能改善。

上記の項目は次節でより詳しく説明されます。

E.6.2. バージョン11への移行

以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpallを利用したダンプとリストア、あるいはpg_upgradeの使用が必要です。

バージョン11には、以前のバージョンとの互換性に影響する多数の変更点が含まれています。以下の非互換性に注意してください。

  • pg_dumpがデータベースの中身だけでなく属性もダンプするようにしました。 (Haribabu Kommi)

    これまでは、データベース単位のGRANT/REVOKE権限付与やALTER DATABASE SETの変数設定などのデータベース自体の属性はpg_dumpallでのみダンプされました。 これからはpg_dump --createpg_restore --createがデータベース内のオブジェクトに加えてデータベース属性をリストアします。 これからはpg_dumpall -gはロールとテーブル空間関連の属性のみをダンプします。 pg_dumpallの完全な出力(-g無し)に変更はありません。

    --create無しのpg_dumppg_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 = 11 ^ 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を返すようになります。 LTHは数字、正負記号、小数点やカンマ以外の文字のみを消費するようになります。

  • 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_procproisagg列とproiswindow列をprokindで置き換えました。 (Peter Eisentraut)

    この新たな列は関数、プロシージャ、集約、ウィンドウ関数をより明確に区別します。

  • 情報スキーマの列tables.table_typeFOREIGN 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.

E.6.3. 変更点

以下にPostgreSQL 11と前のメジャーリリースとの詳細な変更点を記載します。

E.6.3.1. サーバ

E.6.3.1.1. パーティショニング
  • キー列のハッシュに基づくパーティションを作れるようにしました。 (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)

  • パーティションケーブルでのINSERTUPDATEおよび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)

E.6.3.1.2. 並列問い合わせ
  • 並列に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 ... ASSELECT INTO、および、CREATE MATERIALIZED VIEWコマンドの系列化を可能にしました。 (Haribabu Kommi)

  • 多数のパラレルワーカがあるときのシーケンシャルスキャンの性能を改善しました。 (David Rowley)

  • EXPLAINにパラレルワーカのソート動作の報告を加えました。 (Robert Haas, Tom Lane)

E.6.3.1.3. インデックス
  • Bツリーインデックスに、検索キーに含まれないけれどもインデックスオンリースキャンで参照可能な列を、含めることができるようにしました。 (Anastasia Lubennikova, Alexander Korotkov, Teodor Sigaev)

    これはCREATE INDEXの新たなINCLUDE句でできるようになります。 これはある種の問い合わせを最適化するカバリングインデックスの構築を容易にします。

  • 単調増加のインデックスの追加の性能を改善しました。 (Pavan Deolasee, Peter Geoghegan)

  • ハッシュインデックスのスキャン性能を改善しました。 (Ashutosh Sharma)

  • ハッシュ、GiST、GINインデックスに対する述語ロックを追加しました。 (Shubham Barai)

    これはシリアライザブルモードのトランザクションで直列化競合の可能性を減らします。

E.6.3.1.3.1. SP-Gist
  • 前方一致演算子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)

E.6.3.1.4. オプティマイザ
  • 統計情報における最頻値の選択を改善しました。 (Jeff Janes, Dean Rasheed)

    これまでは、最頻値(MCV)は全ての列値と比較した頻度に基づいて特定されていました。 これからはMCVMCVでない値と比較した頻度に基づいて選ばれます。 これは一様な分布と一様でない分布の両方でアルゴリズムの頑健性を改善します。

  • >=<=に対する選択率の見積を改善しました。 (Tom Lane)

    これまではこのような場合は、比較する定数がMCVでない限り、それぞれ>および<と同じ選択率見積が使われていました。 この変更は小さい範囲のBETWEENを伴う問い合わせで特に有用です。

  • var = varを同等であるならvar IS NOT NULLに変換するようにしました。 (Tom Lane)

    これはよりよい選択率見積をもたらします。

  • EXISTSNOT EXISTSの問い合わせについて、オプティマイザの行数見積を改善しました。 (Tom Lane)

  • オプティマイザがHAVING句のコスト評価と選択率を考慮するようにしました。 (Tom Lane)

E.6.3.1.5. 性能全般
  • 実行速度を改善させる、問い合わせプランの一部のジャストインタイム(JIT)コンパイルに対応しました。 (Andres Freund)

    この機能を有効にするにはLLVMが必要です。 本機能をサポートするビルドにおいても、今のところデフォルトでは有効になっていません。

  • ビットマップスキャンが可能であるときにインデックスオンリースキャンを実行できるようにしました。 (Alexander Kuzmenkov)

  • VACUUM中にフリースペースマップを更新するようにしました。 (Claudio Freire)

    これによりフリースペースがより早く再利用されます。

  • VACUUMが不要なインデックススキャンを回避できるようにしました。 (Masahiko Sawada, Alexander Korotkov)

  • 複数同時実行トランザクションをコミットする性能を改善しました。 (Amit Kapila)

  • 集合を返す関数を対象リストに使う問い合わせでメモリ使用を減らしました。 (Andres Freund)

  • 集約計算の速度を改善しました。 (Andres Freund)

  • postgres_fdwが結合を使うUPDATEDELETEを外部サーバにプッシュできるようにしました。 (Etsuro Fujita)

    これまでは結合の無いUPDATEDELETEだけがプッシュされました。

  • Windowsでlarge pagesをサポートしました。 (Takayuki Tsunakawa, Thomas Munro)

    これはhuge_pages設定パラメータで制御されます。

E.6.3.1.6. モニタリング
  • log_statement_statslog_parser_statslog_planner_statsおよびlog_executor_statsの出力でメモリ利用を示すようにしました。 (Justin Pryzby, Peter Eisentraut)

  • バックグラウンドワーカの種別を示す列pg_stat_activity.backend_typeを追加しました。 (Peter Eisentraut)

    バックグラウンドワーカ種別はps出力でも参照できます。

  • log_autovacuum_min_durationのログ出力が、同時に削除されていたテーブルをとばすようにしました。 (Nathan Bossart)

E.6.3.1.6.1. 情報スキーマ
  • テーブル制約とトリガに関するinformation_schemaの列を追加しました。 (Peter Eisentraut)

    具体的には、これまで常にNULLであったtriggers.action_ordertriggers.action_reference_old_table、および、triggers.action_reference_new_tableに値が入るようになります。 また、table_constraints.enforcedも値を持つようになりますが、未だ役立つ存在ではありません。

E.6.3.1.7. 認証
  • search/bindモードでより複雑なLDAP指定ができるようにしました。 (Thomas Munro)

    具体的には、ldapsearchfilterLDAP属性の組み合わせを用いたパターンマッチができます。

  • LDAP認証で暗号化LDAPが使えるようにしました。 (Thomas Munro)

    私達は既にldaptls=1によるTLS上のLDAPをサポートしています。 この新たな暗号化LDAPTLS LDAP方式は、ldapscheme=ldapsまたはldapurl=ldaps://で有効になります。

  • LDAPエラーのログ出力を改善しました。 (Thomas Munro)

E.6.3.1.8. 権限
  • ファイルシステムアクセスが可能なデフォルトロールを追加しました。 (Stephen Frost)

    具体的には新たなロールは、pg_read_server_filespg_write_server_filespg_execute_server_programです。 これらロールはサーバ側COPYfile_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)

E.6.3.1.9. サーバ設定
  • 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です。 既存の単位kBMBGBおよびTBに追加されます。

E.6.3.1.10. 先行書き込みログ (Write-Ahead Log、WAL)
  • WALファイルサイズをinitdb時に設定できるようにしました。 (Beena Emerson)

    これまでは16MBのデフォルトをコンパイル時にのみ、変更できました。

  • 一つのチェックポイントのみに対してWALデータを保持するようにしました。 (Simon Riggs)

    これまでは二つのチェックポイントに対してWALが保持されていました。

  • 圧縮性の改善のため、強制切り替えされたWALセグメントファイルの使われない部分をゼロで埋めるようにしました。 (Chapman Flack)

E.6.3.2. ベースバックアップとストリーミングレプリケーション

  • ロジカルレプリケーション使用時に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)

E.6.3.3. ユーティリティコマンド

  • 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)

    これはユーザ定義集約関数を最適化し、ウィンドウ関数として動作させるのに有益です。

E.6.3.4. データ型

  • ドメインの配列を作成できるようにしました。 (Tom Lane)

    また、array_agg()がドメインに対して使用できるようになります。

  • 複合型のドメインに対応しました。 (Tom Lane)

    加えて、PL/Perl、PL/PythonおよびPL/Tclで、複合ドメインの、関数の引数と戻り値を扱えるようにしました。 また、PL/Pythonのドメイン処理を改善しました。

  • JSONBスカラから数値および論理値のデータ型へのキャストを追加しました。 (Anastasia Lubennikova)

E.6.3.5. 関数

  • SQL:2011で指定されている全てのウィンドウ関数フレームオプションを追加しました。 (Oliver Ford, Tom Lane)

    具体的には、RANGEモードで指定された差分値のプラス/マイナスの範囲内のグルーピング値を持つ行を選択するPRECEDINGFOLLOWINGが使えるようにしました。 指定数のプラス/マイナスの隣接グループを含める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)

E.6.3.6. サーバサイド言語

  • SQLレベルのプロシージャを追加しました。これは、自身のトランザクションを開始してコミットすることができます。 (Peter Eisentraut)

    プロシージャは新たなCREATE PROCEDUREコマンドで作成し、CALLにより駆動します。

    新たなALTER/DROP ROUTINEコマンドで、プロシージャ、関数、集約を含む全てのルーチン的オブジェクトの変更/削除ができます。

    なお、CREATE OPERATORCREATE 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)

E.6.3.7. クライアントインタフェース

  • デフォルトでは圧縮を無効とするようにlibpqを変更しました。 (Peter Eisentraut)

    圧縮は最近のOpenSSLバージョンでは既に無効となっており、そのためそのようなライブラリではlibpq設定に影響はありません。

  • ecpgWHENEVER文にDO CONTINUEオプションを追加しました。 (Vinayak Pokale)

    これはCのcontinue文を生成し、指定された条件になったときに現在のループの先頭に戻します。

  • 文字配列のOracle Pro*Cスタイルの処理を有効にするecpgのモードを追加しました。

    このモードは-Cで有効になります。

E.6.3.8. クライアントアプリケーション

E.6.3.8.1. psql
  • psqlに問い合わせ結果の列の名前と型を出力するコマンド\gdescを追加しました。 (Pavel Stehule)

  • psqlに問い合わせ動作とエラーを報告する変数を追加しました。 (Fabien Coelho)

    具体的には、新たな変数はERRORSQLSTATEROW_COUNTLAST_ERROR_MESSAGE、および、LAST_ERROR_SQLSTATEです。

  • psqlで変数の存在をテストできるようにしました。 (Fabien Coelho)

    具体的には、\if文にて構文:{?variable_name}で変数の存在をテストできます。

  • 環境変数PSQL_PAGERpsqlのページャを制御できるようにしました。 (Pavel Stehule)

    これによりpsqlのデフォルトページャを他のアプリケーションむけのページャとは別の環境変数で指定できます。 PSQL_PAGERが設定されていない場合、PAGERは引き続き参照されます。

  • psqlの\d+コマンドが常にテーブルのパーティション情報を出力するようにしました。 (Amit Langote, Ashutosh Bapat)

    これまではパーティションを持っていないパーティションテーブルの場合にはパーティション情報が出力されませんでした。 また、どのパーティションがそれ自身もパーティション分けされているかも示すようにしました。

  • psqlがパスワードプロンプトを出すときに適切なユーザ名を報告するようにしました。 (Tom Lane)

    これまでは、-UURIに埋め込まれたユーザ名との組み合わせで誤った表示になっていました。 また、--passwordが指定されたときにパスワードプロンプトの前のユーザ名を隠すようにしました。

  • 先行する入力が無い場合にquitexitpsqlを終了できるようにしました。 (Bruce Momjian)

    また、入力バッファが空でない状態でquitexitのみの行が入力された場合に、終了のしかたについてヒントを出力します。 helpに対して同様のヒントを追加しました。

  • psqlが、行に\qのみが入力されたものの無視されたときに、control-Dを使うことを示唆するヒント出すようにしました。 (Bruce Momjian)

    例えば\qは文字列を入力しているときには終了しません。

  • ALTER INDEX RESET/SETのタブ補完を改善しました。 (Masahiko Sawada)

  • psqlがタブ補完の問い合わせをサーババージョンに基づいて適合させる基盤を追加しました。 (Tom Lane)

    これまでは古いサーバに対してタブ補完の問い合わせが失敗する可能性がありました。

E.6.3.8.2. pgbench
  • pgbenchに、NULL、真理値、およびいくつかの関数と演算子に対応する表現を追加しました。 (Fabien Coelho)

  • pgbench\if条件節のサポートを追加しました。 (Fabien Coelho)

  • pgbenchの変数名で非ASCII文字が使用できるようにしました。 (Fabien Coelho)

  • pgbenchに実行される初期化手順を制御するオプション--init-stepsを追加しました。 (Masahiko Sawada)

  • pgbenchにおおよそジップ分布をするランダムジェネレータを追加しました。 (Alik Khilazhev)

  • pgbenchで乱数シードを設定できるようにしました。 (Fabien Coelho)

  • pgbenchpow()power()で冪乗を行えるようにしました。 (Raúl Marín Rodríguez)

  • pgbenchにハッシュ関数を追加しました。 (Ildar Musin)

  • pgbench--latency-limit--rateを使ったときの統計をより正確にしました。 (Fabien Coelho)

E.6.3.9. サーバアプリケーション

  • 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_resetwalpg_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_rewindrootで実行されるのを防止しました。 (Michael Paquier)

  • 出力エンコーディングを制御するpg_dumpallのオプション--encodingを追加しました。 (Michael Paquier)

    pg_dumpには既にこのオプションがあります。

  • オリジナルのパーティションではなくパーティションのルートテーブルへのデータ読み込みを強制するpg_dumpのオプション--load-via-partition-rootを追加しました。 (Rushabh Lathia)

    これは、照合定義やエンディアンが違うシステムに読み込み、必要とする行が前と異なるパーティションに格納される可能性がある場合に有用です。

  • データベースオブジェクトのコメントのダンプとリストアを抑制するオプションを追加しました。 (Robins Tharakan)

    この新たなpg_dumppg_dumpall、および、pg_restoreのオプションは--no-commentsです。

E.6.3.10. ソースコード

  • 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.reltuplesVACUUMによる計算をANALYZEによる計算と一貫性を持つようにしました。 (Tomas Vondra)

  • perltidyバージョン20170521を使うようにアップデートしました。 (Tom Lane, Peter Eisentraut)

E.6.3.11. 追加モジュール

  • 拡張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_ginboolbpcharname、および、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)

    この拡張はもはや有用なセキュリティツールあるいは拡張の書き方の例ではないと考えられます。

E.6.4. 謝辞

以下の人々(アルファベット順)はパッチ作者、コミッター、レビューア、テスターあるいは問題の報告者として本リリースに貢献しました。

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