E.1. リリース16 #

リリース日: 2023-09-14

E.1.1. 概要 #

PostgreSQL 16には、以下をはじめとする多数の新機能と拡張が含まれます。

  • FULLハッシュ結合および内部右OUTERハッシュ結合で並列処理ができるようになりました。

  • スタンバイサーバからの論理レプリケーションができるようになりました。

  • 論理レプリケーションのサブスクライバーで大規模なトランザクションを並列に適用できるようになりました。

  • 新しいpg_stat_ioビューを使用したI/O統計情報の監視ができるようになりました。

  • SQL/JSONコンストラクタと識別関数を追加しました。

  • バキューム凍結の性能を改善しました。

  • pg_hba.confのユーザ名とデータベース名、およびpg_ident.confのユーザ名の正規表現マッチングがサポートされました。

PostgreSQL 16の上記の項目とその他の新機能は次節でより詳しく説明されます。

E.1.2. バージョン16への移行 #

以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpallを利用したダンプとリストア、あるいはpg_upgradeや論理レプリケーションの使用が必要です。 新たなメジャーバージョンへの移行に関する一般的な情報については19.6を参照してください。

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

  • PL/pgSQLのバウンドカーソル変数の割り当て規則が変更されました。 (Tom Lane)

    以前は、このような変数の文字列値は、カーソル割り当て時に変数名に一致するように設定されていました。 これからは、OPEN時に割り当てられ、変数名と一致しません。 以前の動作に戻すには、OPENの前にカーソル変数に目的のポータル名を割り当ててください。

  • 主キーに対するNULLS NOT DISTINCTインデックスを禁止しました。 (Daniel Gustafsson)

  • REINDEX DATABASEreindexdbがシステムカタログのインデックスを処理しないように変更しました。 (Simon Riggs)

    このようなインデックスの処理は、REINDEX SYSTEMreindexdb --systemを使用して引き続き可能です。

  • 継承テーブルとパーティションテーブルに対するGENERATED式の制限を強化しました。 (Amit Langote, Tom Lane)

    親テーブル(パーティションテーブル)と子テーブル(パーティション)の列はすべて同じ生成状態を持つ必要があります。しかし、実際の生成式は異なっていても構いません。

  • pg_walinspect関数pg_get_wal_records_info_till_end_of_wal()pg_get_wal_stats_till_end_of_wal()を削除しました。 (Bharath Rupireddy)

  • サーバパラメータforce_parallel_modedebug_parallel_queryに変更しました。 (David Rowley)

  • ON SELECTルールを使用したcreate viewsを禁止しました。 (Tom Lane)

  • サーバパラメータvacuum_defer_cleanup_ageを削除しました。 (Andres Freund)

    hot_standby_feedbackレプリケーションスロットが追加されたことで、これは不要になりました。

  • サーバパラメータpromote_trigger_fileを削除しました。 (Simon Riggs)

    これはスタンバイからプライマリへの昇格に使用されていましたが、現在はpg_ctl promoteまたはpg_promote()関数で容易に実行できます。

  • 読み取り専用サーバパラメータlc_collatelc_ctypeを削除しました。 (Peter Eisentraut)

    照合順序とロケールはデータベースによって異なる可能性があるため、読み取り専用のサーバパラメータは役に立っていませんでした。

  • ロール継承で、GRANTの実行時に追加されたメンバロールのデフォルトの継承ステータスが制御されるようにしました。 (Robert Haas)

    ロールのデフォルトの継承動作は、新しいGRANT ... WITH INHERIT句で上書きできます。 これにより、メンバの継承ステータスはGRANT時に設定されるため、一部のロールだけが継承され、他のロールは継承されません。 以前は、メンバの継承ステータスはロールの継承ステータスによってのみ制御され、ロールの継承ステータスに対する変更は、以前と将来のすべてのメンバロールに影響していました。

  • CREATEROLEの権限と他のロールを変更する能力を制限しました。 (Robert Haas)

    以前は、CREATEROLE権限を持つロールは、スーパーユーザ以外のロールの多くの側面を変更することができました。 メンバーの追加を含むこれらの変更には、変更を要求するロールにADMIN OPTION権限が要求されるようになりました。 たとえば、CREATEDBREPLICATIONBYPASSRLSプロパティを変更できるのは、これらの権限を持つ場合に限られます。

  • postmasterバイナリへのシンボリックリンクを削除しました。 (Peter Eisentraut)

E.1.3. 変更点 #

PostgreSQL 16と前メジャーリリースとの詳細な変更点を記載しました。

E.1.3.1. サーバ #

E.1.3.1.1. オプティマイザ #
  • インクリメンタルソートがDISTINCTを含むより多くの場合で使用可能にしました。 (David Rowley)

  • ORDER BYまたはDISTINCTを持つ集約で、ソート済みのデータを使用できるようにしました。 (David Rowley)

    新しいサーバパラメータenable_presorted_aggregateを使用することで、この機能を無効にできます。

  • UNION ALLの最上位ノードでMemoizeを利用可能にしました。 (Richard Guo)

  • 非NULL入力を内部リレーションとするアンチ結合を実行可能にしました。 (Richard Guo)

  • FULLハッシュ結合と内部の右OUTERハッシュ結合で並列処理が実行できるようにしました。 (Melanie Plageman, Thomas Munro)

  • GINインデックスアクセスのオプティマイザコスト精度を改善しました。 (Ronan Dunklau)

E.1.3.1.2. 性能一般 #
  • ヒープページとインデックスページをより効率的に追加できるようにしました。 (Andres Freund)

  • 非凍結処理中でも、必要に応じてページの凍結を実行するようにしました。 (Peter Geoghegan)

    これにより、テーブル全体の凍結バキュームの必要性が低くなります。

  • RANGEモードがアクティブであるが不要な場合に、ウィンドウ関数が内部的に高速なROWSモードを使用できるようにしました。 (David Rowley)

  • 常に増加するウィンドウ関数ntile()cume_dist()percent_rank()の最適化を可能にしました。 (David Rowley)

  • 集約関数string_agg()array_agg()で並列処理をできるようにしました。 (David Rowley)

  • RANGEおよびLISTパーティション検索をキャッシュすることでパフォーマンスを改善しました。 (Amit Langote, Hou Zhijie, David Rowley)

  • VACUUMとANALYZEによる共有バッファ使用量の制御が可能になりました。 (Melanie Plageman)

    VACUUM/ANALYZEオプションはBUFFER_USAGE_LIMITで、vacuumdbオプションは--buffer-usage-limitです。 デフォルト値はサーバパラメータvacuum_buffer_usage_limitで設定され、自動バキュームもこれで制御されます。

  • Windowswal_sync_method=fdatasyncがサポートされました。 (Thomas Munro)

  • BRINインデックスの列のみが更新される場合でもHOT更新できるようにしました。 (Matthias van de Meent, Josef Simanek, Tomas Vondra)

  • プロセスタイトルの更新速度を改善しました。 (David Rowley)

  • xid/subxid検索とASCII文字列検出でベクトル演算が使用できるようになりました。 (Nathan Bossart, John Naylor)

    ASCII文字列検出は、COPY FROMで特に役立ちます。 ベクトル演算は、いくつかのC配列検索にも使用されます。

  • メモリ割り当てのオーバーヘッドを削減しました。 (Andres Freund, David Rowley)

E.1.3.1.3. モニタリング #
  • I/O統計を追跡するためのpg_stat_ioシステムビューを追加しました。 (Melanie Plageman)

  • テーブルに対する最後のシーケンシャルスキャンとインデックススキャンに関する統計情報を記録するようにしました。 (Dave Page)

    この情報はpg_stat_*_tablespg_stat_*_indexesに表示されます。

  • 新しいページへの移動が発生した更新された行の統計情報を記録するようにしました。 (Corey Huinker)

    pg_stat_*_tables列はn_tup_newpage_updです。

  • 投機的ロックの情報をpg_locksシステムビューに追加しました。 (Sawada Masahiko, Shinoda Noriyoshi)

    トランザクションIDはtransactionid列に、投機的挿入トークンはobjid列に表示されます。

  • pg_prepared_statementsビューにプリペアド文の結果型の表示を追加しました。 (Dagfinn Ilmari Mannsåker)

  • stats_resetが正確になるように、サブスクリプション作成時にサブスクリプション統計エントリを作成するようにしました。 (Andres Freund)

    以前は、最初の統計が報告されたときにのみエントリが作成されていました。

  • pg_stat_databaseで表示される一時リレーション書き込みのI/O集計を修正しました。 (Melanie Plageman)

  • セッションのサブトランザクションキャッシュを報告するpg_stat_get_backend_subxact()関数を追加しました。 (Dilip Kumar)

  • pg_stat_get_backend_idset()pg_stat_get_backend_activity()、および関連する関数で、変更されないバックエンドIDを使用するようにしました。 (Nathan Bossart)

    以前は、セッションの存続期間中にインデックス値が変更される可能性がありました。

  • 特別なバックエンドタイプを持つスタンドアローンのバックエンドが表示されるようになりました。 (Melanie Plageman)

  • スピンロック遅延時間を報告するための待機イベントSpinDelayを追加しました。 (Andres Freund)

  • 動的共有メモリ割り当て待機を示す新しい待機イベントDSMAllocateを作成しました。 (Thomas Munro)

    以前は、このタイプの待機はmmap()割り当てでも使用されているDSMFillZeroWriteと報告されていました。

  • 論理WAL送信のプロセスタイトルにデータベース名を追加しました。 (Tatsuhiro Nakamori)

    物理WAL送信ではデータベース名を表示しません。

  • チェックポイントとREDO LSN情報をlog_checkpointsメッセージに追加しました。 (Bharath Rupireddy, Kyotaro Horiguchi)

  • クライアント証明書のエラー時に、より詳細な情報を提供するようにしました。 (Jacob Champion)

E.1.3.1.4. 権限 #
  • サブスクリプション作成の権限を持つ定義済みロールpg_create_subscriptionを追加しました。 (Robert Haas)

  • パスワードを必要としないサブスクリプションが利用可能になりました。 (Robert Haas)

    これは、password_required=falseオプションで実現できます。

  • LOCK TABLEの権限を単純化しました。 (Jeff Davis)

    以前は、ユーザがさまざまなロックレベルでLOCK TABLEを実行できる機能は、テーブルに対して実行する権限を持つコマンドに必要なロックレベルに制限されていました。 たとえば、UPDATE権限を持つユーザは、たとえそれが低いロックレベルであっても、ACCESS SHAREを除くすべてのロックレベルを実行できました。 現在ではユーザは、より大きなロックレベルの権限を持っていれば、より小さなロックレベルを発行できるようになりました。

  • ADMIN OPTIONを伴ったGRANT group_name TO user_nameを実行できるようにしました。 (Robert Haas)

    以前はCREATEROLE権限が必要でした。

  • GRANTWITH ADMIN TRUE/FALSE構文を使用できるようにしました。 (Robert Haas)

    以前は、WITH ADMIN OPTION構文のみがサポートされていました。

  • 他のロールを作成するロールが、新しいロールの権限、または新しいロールにSET ROLEをする機能を自動的に継承できるようにしました。 (Robert Haas, Shi Yu)

    これはサーバパラメータcreaterole_self_grantで制御します。

  • ユーザが継承していないロールのデフォルト権限を変更できないようにしました。 (Robert Haas)

    これからは、継承されたロールに対してのみ許可されるようになりました。

  • ロールのメンバーシップを付与するときに、付与元のロールが適切な権限を持つロールであることを要求されるようになりました。 (Robert Haas)

    これは、ブートストラップ以外のスーパーユーザがロールメンバーシップを付与する場合でも必要です。

  • スーパーユーザ以外のユーザが、現在のユーザでない付与元のユーザを使用して権限を付与できるようにしました。 (Robert Haas)

    現在のユーザは、依然として指定された付与元のユーザによって与えられた権限を持っている必要があります。

  • GRANTSET ROLEを使用する権限の制御を追加しました。 (Robert Haas)

    これは新しいGRANT ... SETオプションで制御されます。

  • 付与された権限を持つロールの依存関係を追跡するようになりました。 (Robert Haas)

    たとえば、ADMIN OPTIONを使用している権限がある場合、そのオプションの削除は失敗します。 依存する権限を取り消すにはCASCADEを使用する必要があります。

  • GRANTレコードの権限所有者(grantor)の依存関係の追跡を追加しました。 (Robert Haas)

    これにより、pg_auth_members.grantorの値が常に有効であることが保証されます。

  • 複数のロールメンバーシップを持つレコードが許可されるようになりました。 (Robert Haas)

    以前は、新しいメンバーシップ付与が付与の他の側面と一致していなくても、以前の一致するメンバーシップ付与を削除していました。

  • ブートストラップユーザからのスーパーユーザ権限の削除を禁止しました。 (Robert Haas)

    このようなユーザをリストアすると、エラーが発生する可能性があります。

  • makeaclitem()が複数の権限名を受け付けられるようにしました。 (Robins Tharakan)

    以前はSELECTなどのように、1つの権限名しか受け付けませんでした。

E.1.3.1.5. サーバ設定 #
  • Kerberosの認証情報の委任をサポートしました。 (Stephen Frost)

    これは、サーバパラメータgss_accept_delegationlibpq接続パラメータgssdelegationで有効にできます。

  • サーバパラメータscram_iterationsSCRAMの繰り返し回数を設定できるようにしました。 (Daniel Gustafsson)

  • サーバパラメータ管理のパフォーマンスを改善しました。 (Tom Lane)

  • サーバパラメータのリセットに関する制限を強化しました。 (Masahiko Sawada)

    以前は、transaction_isolationのような特定の変数はRESET ALLの影響を受けませんでしたが、不適切な状況では個別にリセットする可能性がありました。

  • さまざまなpostgresql.conf項目を新しいカテゴリに移動しました。 (Shinya Kato)

    これはpg_settingsビューに表示されるカテゴリにも影響します。

  • 設定ファイルが10レベルを超えて再帰アクセスすることを防止しました。 (Julien Rouhaud)

  • autovacuumが遅延設定の変更をより頻繁に確認するようにしました。 (Melanie Plageman)

    各リレーションの開始時にのみ変更を確認するのではなく、各ブロックの開始時にも確認するようになりました。

  • アーカイブファイルの名前を永続的に変更する制限を削除しました。 (Nathan Bossart)

    archive_commandコマンドは、クラッシュ後にすでにアーカイブ済みのファイルを呼び出す可能性が高くなりました。

  • archive_libraryarchive_commandを同時に設定できないようにしました。 (Nathan Bossart)

    以前は、archive_libraryarchive_commandよりも優先されていました。

  • postmasterがABORTシグナルで子プロセスを終了できるようにしました。 (Tom Lane)

    これにより、停止した子プロセスのコアダンプを収集できるようになりました。 これはsend_abort_for_crashsend_abort_for_killで制御されます。 現在、postmasterの-Tスイッチはsend_abort_for_crashを設定することと同じです。

  • 機能しないpostmaster-nオプションを削除しました。 (Tom Lane)

  • pg_use_reserved_connectionsメンバシップであるロールに対して、バックエンドスロットを予約できるようにサーバを設定しました。 (Nathan Bossart)

    予約スロット数は、サーバパラメータreserved_connectionsで設定します。

  • Windows 10以降のバージョンでhuge pagesを使用できるようにしました。 (Thomas Munro)

    これにより、Windows 10以降のバージョンでヒープページを有効にするために必要となる特別な処理が追加されます。

  • 開発者用のdebug_io_direct設定を追加しました。 (Thomas Munro, Andres Freund, Bharath Rupireddy)

    主に開発者向けですが、wal_sync_method=open_sync/open_datasyncは、wal_level=minimalでのダイレクトI/Oを使用しないように修正されました。 これは、debug_io_direct=walで有効にできます。

  • WALファイル名のセグメント値とタイムライン値を報告するpg_split_walfile_name()関数を追加しました。 (Bharath Rupireddy)

E.1.3.1.6. pg_hba.conf #
  • pg_hba.conf内のデータベースエントリとロールエントリで正規表現マッチングをサポートしました。 (Bertrand Drouvot)

    正規表現パターンはスラッシュで始まります。 スラッシュで始まるデータベース名とロール名は、pg_hba.confで参照される場合、二重引用符で囲む必要があります。

  • pg_ident.confのユーザ列処理をpg_hba.confと一致するよう改善しました。 (Jelte Fennema)

    具体的にはall+でのロールメンバーシップ、先頭にスラッシュを付けた正規表現のサポートを追加しました。 これらのパターンに一致するユーザ名は二重引用符で囲む必要があります。

  • pg_hba.confpg_ident.confでファイルのインクルードができるようになりました。 (Julien Rouhaud)

    これらはincludeinclude_if_existsinclude_dirで制御されます。 システムビューpg_hba_file_rulespg_ident_file_mappingsにファイル名が表示されるようになりました。

  • pg_hba.confでのトークンの長さ制限を無くしました。 (Tom Lane)

  • システムビューpg_hba_file_rulesにルール番号とマップ番号を追加しました。 (Julien Rouhaud)

E.1.3.1.7. 多言語対応 #
  • ICUを使用する場合はロケールからデフォルトのエンコーディングを決定するようにしました。 (Jeff Davis)

    以前のデフォルトは常にUTF-8でした。

  • CREATE DATABASECREATE COLLATIONLOCALEオプション、およびinitdbcreatedb--localeオプションは、libc以外の照合順序プロバイダを制御するようにしました。 (Jeff Davis)

    以前は、libcプロバイダのみを制御していました。

  • 定義済み照合順序としてunicodeucs_basicを追加しました。 (Peter Eisentraut)

    これはICUサポートが有効になっている場合にのみ機能します。

  • カスタムICU照合ルールの作成できるようにしました。 (Peter Eisentraut)

    これは、CREATE COLLATIONの新しいRULES句と、CREATE DATABASEcreatedbinitdbの新しいオプションを使用して行われます。

  • Windowsでシステムロケールを自動的にインポートできるようにしました。 (Juan José Santamaría Flecha)

    以前はWindows上ではICUロケールのみインポートできました。

  • スタンバイでのロジカルデコーティングができるようになりました。 (Bertrand Drouvot, Andres Freund, Amit Khandekar)

    スナップショットWALレコードはロジカルスロットの作成に必要ですが、スタンバイでは作成できません。 遅延を回避するために、新しい関数pg_log_standby_snapshot()でこのようなレコードの作成ができるようになりました。

  • ロジカルデコーティングのパブリッシャーが変更を転送する方法と、サブスクライバーが変更を適用する方法を制御するためのサーバパラメータを追加しました。 (Shi Yu)

    そのパラメータはdebug_logical_replication_streamingです。

  • 論理レプリケーションの初期テーブル同期で行をバイナリ形式でコピーできるようにしました。 (Melih Mutlu)

    これは、バイナリとしてマークされたサブスクリプションに対してのみ可能です。

  • 論理レプリケーションのパラレル適用が可能になりました。 (Hou Zhijie, Wang Wei, Amit Kapila)

    CREATE SUBSCRIPTIONSTREAMINGオプションで、パラレルワーカーによる大規模なトランザクションの適用を可能にする新たなparallelをサポートするようになりました。 パラレルワーカー数は新しいサーバパラメータmax_parallel_apply_workers_per_subscriptionで制御されます。 また、待機イベントLogicalParallelApplyMainLogicalParallelApplyStateChange、およびLogicalApplySendDataも追加されました。 パラレルアクティビティを追跡するために、システムビューpg_stat_subscriptionleader_pid列が追加されました。

  • 主キーを使用しない論理レプリケーション適用のパフォーマンスを改善しました。 (Onder Kalaci, Amit Kapila)

    具体的には、REPLICA IDENTITY FULLは一致を見つけるためにテーブルをシーケンシャルスキャンするのではなく、Btreeインデックスを使用できるようになりました。

  • 論理レプリケーションのサブスクライバが、オリジンを持たない変更のみを処理できるようにしました。 (Vignesh C, Amit Kapila)

    これを使用することで、レプリケーションループを回避できます。 これは、新しいCREATE SUBSCRIPTION ... ORIGINオプションで制御されます。

  • 論理レプリケーションのSELECTDMLアクションをテーブルの所有者として実行するようにしました。 (Robert Haas)

    これによりセキュリティが向上し、サブスクリプションの所有者はスーパーユーザであるか、またはレプリケーションセット内のテーブルを所有するすべてのロールに対するSET ROLE権限を持っている必要があります。 以前の動作である、すべての操作をサブスクリプション所有者として実行するには、サブスクリプションのrun_as_ownerオプションを使用することで可能です。

  • wal_retrieve_retry_intervalがサブスクリプション単位で動作するようになりました。 (Nathan Bossart)

    以前は、リトライ時間はグローバルに適用されていました。 これにより、待機イベントLogicalRepLauncherDSAおよびLogicalRepLauncherHashも追加されます。

E.1.3.3. ユーティリティコマンド #

  • パラメータ化された問い合わせの汎用プランを表示するEXPLAINGENERIC_PLANを追加しました。 (Laurenz Albe)

  • COPY FROMで列のDEFAULTに値をマップできるようにしました。 (Israel Barth Rubio)

  • 外部テーブルへのCOPYで行をバッチ追加できるようにしました。 (Andrey Lepikhov, Etsuro Fujita)

    これはpostgres_fdwbatch_sizeオプションで制御します。

  • CREATE TABLESTORAGEタイプを指定できるようにしました。 (Teodor Sigaev, Aleksander Alekseev)

    以前は、ALTER TABLEのみがこれを制御できました。

  • 外部テーブルでのTRUNCATEトリガができるようにしました。 (Yugo Nagata)

  • VACUUMvacuumdbTOASTテーブルのみを処理できるようにしました。 (Nathan Bossart)

    これは、VACUUMPROCESS_MAINをオフにするか、vacuumdb--no-process-mainオプションを使用して実現できます。

  • VACUUM凍結された統計情報をスキップまたはすべて更新するオプションを追加しました。 (Tom Lane, Nathan Bossart)

    オプションはSKIP_DATABASE_STATSONLY_DATABASE_STATSです。

  • REINDEX DATABASEREINDEX SYSTEMで引数が不要になりました。 (Simon Riggs)

    以前は、データベース名を指定する必要がありました。

  • 何も指定されていない場合はCREATE STATISTICSで統計名を生成できるようにしました。 (Simon Riggs)

E.1.3.4. データ型 #

  • 10進数以外の整数リテラルが利用可能になりました。 (Peter Eisentraut)

    例えば、0x42F0o2730b100101などです。

  • NUMERICが任意のサイズの16進数、8進数、2進数の整数を処理できるようにしました。 (Dean Rasheed)

    以前は、これらの非10進数では、引用符で囲まれていない8バイトの整数のみがサポートされていました。

  • 整数と数値の定数でアンダースコアを使用できるようにしました。 (Peter Eisentraut, Dean Rasheed)

    これにより、長い数字列の読みやすさが向上します。

  • 日時入力で+infinityの表現を受け付けるようにしました。 (Vik Fearing)

  • 日時文字列で他のフィールドと一緒にepochinfinityを指定することを禁止しました。 (Joseph Koshakow)

  • 文書化されていないYyearMmonthDday形式の日付入力サポートを削除しました。 (Joseph Koshakow)

  • 型変換エラーをチェックする関数pg_input_is_valid()pg_input_error_info()を追加しました。 (Tom Lane)

E.1.3.5. General Queries #

  • FROM句の副問い合わせで別名を省略できるようにしました。 (Dean Rasheed)

  • SQL/JSONパスで拡張された数値リテラルに対応しました。 (Peter Eisentraut)

    たとえば、16進数、8進数、および2進数の整数で、桁間のアンダースコアが利用可能になりました。

E.1.3.6. 関数 #

  • SQL/JSONのコンストラクタを追加しました。 (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote)

    新しい関数JSON_ARRAY()JSON_ARRAYAGG()JSON_OBJECT()、およびJSON_OBJECTAGG()は、SQL標準の一部です。

  • SQL/JSONオブジェクト検査を追加しました。 (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote, Andrew Dunstan)

    IS JSON検査は、値、配列、オブジェクト、スカラ、一意キーの検査を含みます。

  • JSON文字列解析でベクトル演算を使用できるようにしました。 (John Naylor)

  • 全文検索結果を強調する(ts_headline())関数でのORおよびNOT式に対する処理を改善しました。 (Tom Lane)

  • 指定したタイムゾーンのtimestamptz値を加算、減算、生成する関数を追加しました。 (Przemyslaw Sztoch, Gurjeet Singh)

    関数はdate_add()date_subtract()generate_series()です。

  • date_trunc(unit, timestamptz, time_zone)を不変(immutable)関数に変更しました。 (Przemyslaw Sztoch)

    これにより、この関数を使用して式インデックスを作成できます。

  • サーバパラメータSYSTEM_USERを追加しました。 (Bertrand Drouvot)

    認証方式と認証したユーザを報告します。

  • 関数array_sample()array_shuffle()を追加しました。 (Martin Kalcher)

  • 集合から任意の値を返す集約関数ANY_VALUE()を追加しました。 (Vik Fearing)

  • 正規分布の乱数を提供するrandom_normal()関数を追加しました。 (Paul Ramsey)

  • 誤差関数erf()と相補誤差関数erfc()を追加しました。 (Dean Rasheed)

  • 整数の指数に対するpower()の数値の精度を改善しました。 (Dean Rasheed)

  • 出力を読みやすく表示するためのXMLSERIALIZE()関数のINDENTオプションを追加しました。 (Jim Jones)

  • デフォルトの照合順序に対して妥当な値を返すようにpg_collation_actual_version()関数を変更しました。 (Jeff Davis)

    以前はNULLを返していました。

  • pg_read_file()pg_read_binary_file()があるべき場所に無いファイルを無視できるようにしました。 (Kyotaro Horiguchi)

  • pg_size_bytes()にバイト指定の(B)を追加しました。 (Peter Eisentraut)

  • to_reg*関数群がOIDの数値を入力として受け付けるようにしました。 (Tom Lane)

E.1.3.7. PL/pgSQL #

E.1.3.8. libpq #

  • 受け入れ可能な認証方式のリストを指定するためのlibpq接続オプションrequire_authを追加しました。 (Jacob Champion)

    これは、特定の認証方式を禁止するためにも使用できます。

  • libpqで指定した複数のホストからランダムに選択できるようにしました。 (Jelte Fennema)

    これはload_balance_hosts=randomで有効になり、ロードバランシングに使用できます。

  • クライアント証明書の送信を制御するlibpqsslcertmodeオプションを追加しました。 (Jacob Champion)

    オプションの値は、disableallowrequireです。

  • libpqが証明書の検証にシステム証明書プールを使用できるようにしました。 (Jacob Champion, Thomas Habets)

    これはsslrootcert=systemで有効になります。 これによりsslmode=verify-fullも有効にします。

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

  • ECPGの変数宣言で予約されていないSQLキーワードに一致するtypedef名を使用できるようにしました。 (Tom Lane)

    この変更により、Cのtypedef名と一致するキーワードは、後のEXEC SQLブロックでキーワードとして処理されなくなります。

E.1.3.9.1. psql #
  • psqlで展開された形式でのヘッダ行の最大幅を制御できるようにしました。 (Platon Pronko)

    これはxheader_widthで制御します。

  • psqlにロールメンバーシップの詳細を表示する\drgコマンドを追加しました。 (Pavel Luzanov)

    この新しいコマンドでより詳細な情報を表示するため\du\dgからMember of出力列が削除されました。

  • psqlのアクセス権限コマンドでシステムオブジェクトを表示できるようにしました。 (Nathan Bossart)

    オプションは\dpS\zSです。

  • psql\d+に外部テーブルの子テーブルとパーティションのFOREIGN表示を追加しました。 (Ian Lawrence Barwick)

  • \df+で関数のソースコードを表示しないようにしました。 (Isaac Morland)

    関数本体は\sfで見やすくなりました。

  • psqlが拡張問い合わせプロトコルを使用して問い合わせを送信できるようにしました。 (Peter Eisentraut)

    このような問い合わせへの引数の渡しは、新しいpsql\bindコマンドを使って行います。

  • psql\watchを実行回数を制限できるようにしました。 (Andrey Borodin)

    \watchオプションは、指定されたときに名前を付けることができるようになりました。

  • psql\watchで無効な値を検出し、遅延なしを指定できるよう0を許可しました。 (Andrey Borodin)

  • psqlスクリプトでシェルコマンドや問い合わせの終了ステータスを取得できるようにしました。 (Corey Huinker, Tom Lane)

    新しいpsql制御変数は、SHELL_ERRORSHELL_EXIT_CODEです。

  • 様々なpsqlのタブ補完機能を改善しました。 (Vignesh C、Aleksander Alekseev、Dagfinn Ilmari Mannsåker、Shi Yu、Michael Paquier、Ken Kato、Peter Smith)

E.1.3.9.2. pg_dump #
  • pg_dumpで子テーブルとパーティションのダンプを制御できるようにしました。 (Gilles Darold)

    新しいオプションは--table-and-children--exclude-table-and-children--exclude-table-data-and-childrenです。

  • pg_dumpLZ4圧縮とZstandard圧縮を追加しました。 (Georgios Kokolatos、Justin Pryzby)

  • pg_dumppg_basebackupで圧縮にlongモードを使用できるようにしました。 (Justin Pryzby)

  • pg_dumpを改良して、より一貫性のある圧縮構文を受け付けるようにしました。 (Georgios Kokolatos)

    --compress=gzip:5のようなオプションです。

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

  • initdbおよび将来のすべてのサーバ起動時にサーバパラメータを設定するためのinitdbオプションを追加しました。 (Tom Lane)

    オプションは-c name=valueです。

  • createuserに、より多くのユーザオプションを制御するオプションを追加しました。 (Shinya Kato)

    具体的には、新しいオプションは、有効期限、行レベルのセキュリティのバイパス、およびロールメンバーシップを制御します。

  • createuser--roleオプションを非推奨としました。 (Nathan Bossart)

    このオプションは、新しいcreateuserロールのメンバーシップオプションと混同されやすいため、同じ機能を持つ--member-ofオプションが追加されました。 --roleオプションは引き続き使用できます。

  • vacuumdbでスキーマ処理の制御ができるようにしました。 (Gilles Darold)

    これらは、--schemaおよび--exclude-schemaオプションで制御されます。

  • vacuumdbのパフォーマンスを改善するために新しいVACUUMオプションを使用するようにしました。 (Tom Lane, Nathan Bossart)

  • pg_upgradeで新しいクラスタのロケールとエンコーディングを設定しました。 (Jeff Davis)

    これにより、新しいクラスタを同じロケールとエンコーディング設定で作成する必要がなくなります。

  • pg_upgradeにデフォルトの転送モードを指定するためのオプションを追加しました。 (Peter Eisentraut)

    そのオプションは--copyです。

  • pg_basebackupが数値の圧縮オプションを受け付けるように改善しました。 (Georgios Kokolatos, Michael Paquier)

    --compress=server-5のようなオプションがサポートされるようになりました。

  • pg_basebackupPGDATAディレクトリに格納されたテーブル空間を処理できるように修正しました。 (Robert Haas)

  • pg_waldumpにページ全体のイメージをダンプするための--save-fullpageオプションを追加しました。 (David Christensen)

  • pg_waldump-t/--timelineオプションで16進数値を受け付けるようにしました。 (Peter Eisentraut)

  • pg_verifybackupに進捗レポート機能を追加しました。 (Masahiko Sawada)

  • pg_rewindがタイムラインの変更を正しく追跡できるようにしました。 (Heikki Linnakangas)

    以前は、pg_rewindがタイムラインの切り替え後でチェックポイントが発行される前に実行された場合、pg_rewindは巻き戻しが不要であると誤って判断する可能性がありました。

  • pg_receivewalpg_recvlogicalSIGTERMで正常終了するようになりました。 (Christoph Berg)

    このシグナルは、systemdによってしばしば使用されます。

E.1.3.11. ソースコード #

  • ICUサポートのビルドがデフォルトになりました。 (Jeff Davis)

    これにより、ビルドフラグ--with-icuが削除され、--without-icuフラグが追加されます。

  • x86-64アーキテクチャでのSSE2(Streaming SIMD Extensions 2)ベクトル演算のサポートを追加しました。 (John Naylor)

  • ARMアーキテクチャで高度なSIMD(Single Instruction Multiple Data)(NEON)命令のサポートを追加しました。 (Nathan Bossart)

  • MSVCによるWindowsバイナリビルドでRandomizedBaseAddress(ASLR)を使用するようにしました。 (Michael Paquier)

    これはすでにMinGWビルドで有効になっています。

  • 拡張ライブラリのシンボルがデフォルトでエクスポートしないようにしました。 (Andres Freund, Tom Lane)

    コアバックエンドや他の拡張機能から呼び出す必要のある関数は、明示的にPGDLLEXPORTとマークする必要があります。

  • Windows 10以降のバージョンが必要になりました。 (Michael Paquier、Juan José Santamaría Flecha)

    以前は、Windows VistaWindows XPがサポートされていました。

  • Perlバージョン5.14以降が必要になりました。 (John Naylor)

  • Bisonバージョン2.3以降が必要になりました。 (John Naylor)

  • Flexバージョン2.5.35以降が必要になりました。 (John Naylor)

  • GSSAPIサポートのためにMITKerberosを必要になりました。 (Stephen Frost)

  • Visual Studio 2013のサポートを削除しました。 (Michael Paquier)

  • HP-UXのサポートを削除しました。 (Thomas Munro)

  • HP/Intel Itaniumのサポートを削除しました。 (Thomas Munro)

  • M68KM88KM32RSuperH CPUアーキテクチャのサポートを削除しました。 (Thomas Munro)

  • SCM証明書認証用のlibpqサポートを削除しました。 (Michael Paquier)

    この認証方式のバックエンドサポートはPostgreSQL 9.1で削除されました。

  • mesonビルドシステムを追加しました。 (Andres Freund, Nazir Bilal Yavuz, Peter Eisentraut)

    これは最終的に、AutoconfWindowsベースのMSVCビルドシステムを置き換えることになります。

  • ビルドシステムが使用するopensslバイナリの場所を制御できるようにしました。 (Peter Eisentraut)

    configureまたはmesonオプションでopensslプログラムの検索をできるようにしました。

  • 小さなWALセグメントサイズのテストを可能にするビルドオプションを追加しました。 (Andres Freund)

    ビルドオプションは--with-segsize-blocks-Dsegsize_blocksです。

  • pgindentオプションを追加しました。 (Andrew Dunstan)

    新しいオプションは--show-diff--silent-diff--commit--helpで、複数の--excludeオプションが可能です。 また、typedefファイルを明示的に指定する必要があります。 オプション--code-base--buildは削除されました。

  • pg_bsd_indentソースコードをメインツリーに追加しました。 (Tom Lane)

  • make_ctagsmake_etagsを改善しました。 (Yugo Nagata)

  • 効率を上げるためにpg_attributeの列を調整しました。 (Peter Eisentraut)

E.1.3.12. 追加モジュール #

  • boolean型の列で拡張ベースのインデックスを使用する機能を改善しました。 (Zongliang Quan, Tom Lane)

  • fuzzystrmatchでDaitch-Mokotoff Soundexがサポートされました。 (Dag Lem)

  • auto_explainがパラメータ化された文に渡された値をログへ記録するようになりました。 (Dagfinn Ilmari Mannsåker)

    これは、サーバ側のPREPARE/EXECUTEとクライアント側のPARSE/BINDを使用する問い合わせに影響します。 ログの記録はauto_explain.log_parameter_max_lengthで制御されます。 デフォルトでは、問い合わせパラメータは長さ制限なしでログに記録されます。

  • auto_explainlog_verboseモードがcompute_query_idの値を遵守するようになりました。 (Atsushi Torikoshi)

    以前は、compute_query_idが有効になっていても、log_verboseは問い合わせ識別子を表示していませんでした。

  • ltreeラベルの最大長が256から1000に変更され、ハイフンが利用可能になりました。 (Garen Torikian)

  • pg_stat_statementsでユーティリティコマンドで使用される定数を正規化します。 (Michael Paquier)

    以前は、プレースホルダの代わりに定数、例えば$1が表示されていました。

  • WALブロック情報を報告するpg_walinspectpg_get_wal_block_info()関数を追加しました。 (Michael Paquier, Melanie Plageman, Bharath Rupireddy)

  • pg_walinspectpg_get_wal_records_info()pg_get_wal_stats()関数が末尾LSNを解釈する方法を変更しました。 (Bharath Rupireddy)

    以前は存在しないWALの場所を表す末尾のLSNはエラーを生成していましたが、今後はWALの末尾として解釈されます。

  • WALレコードの詳細な記述をpg_walinspectpg_waldumpに追加しました。 (Melanie Plageman, Peter Geoghegan)

  • pageinspectで複数ページの統計を報告するbt_multi_page_stats()関数を追加しました。 (Hamid Akhtar)

    これはbt_page_stats()と似ていますが、ページの範囲を指定してレポートできる点が異なります。

  • pageinspectbrin_page_items()関数に空の範囲出力を示す列を追加しました。 (Tomas Vondra)

  • アーカイブモジュールをより柔軟に再設計しました。 (Nathan Bossart)

    初期化の変更により、古いバージョンのPostgres用に書かれたモジュールを更新する必要があります。

  • 不正確なpg_stat_statementsの拡張問い合わせプロトコル文追跡を修正しました。 (Sami Imseih)

  • pg_buffercacheに使用量の合計を報告するpg_buffercache_usage_counts()関数を追加しました。 (Nathan Bossart)

  • pg_buffercacheにバッファの概要を報告するpg_buffercache_summary()関数を追加しました。 (Melih Mutlu)

  • 新しい構文@extschema:referenced_extension_name@を使用して、必要な拡張のスキーマを拡張スクリプトで参照できるようにしました。 (Regina Obe)

  • no_relocateを使用して、必要な拡張を再配置不可能としてマークできるようにしました。 (Regina Obe)

    これにより、@extschema:referenced_extension_name@は、拡張の存続期間中、定数として扱われます。

E.1.3.12.1. postgres_fdw #
  • postgres_fdwが並列処理を中断できるようにしました。 (Etsuro Fujita)

    これはpostgres_fdwのオプションparallel_abortで有効にできます。

  • 外部postgres_fdwテーブルのANALYZEをより効率的にしました。 (Tomas Vondra)

    postgres_fdwオプションのanalyze_samplingはサンプリング方法を制御します。

  • postgres_fdwでのreg*型の定数の送出を、送出可能としてマークされた組み込みオブジェクトまたは拡張を参照するものに制限しました。 (Tom Lane)

  • postgres_fdwdblinkで接続確立中の割り込みを処理するようにしました。 (Andres Freund)

E.1.4. 謝辞 #

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

Abhijit Menon-Sen
Adam Mackler
Adrian Klaver
Ahsan Hadi
Ajin Cherian
Ajit Awekar
Alan Hodgson
Aleksander Alekseev
Alex Denman
Alex Kozhemyakin
Alexander Korolev
Alexander Korotkov
Alexander Lakhin
Alexander Pyhalov
Alexey Borzov
Alexey Ermakov
Alexey Makhmutov
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Anban Company
Andreas Dijkman
Andreas Karlsson
Andreas Scherbaum
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrew Kesper
Andrey Borodin
Andrey Lepikhov
Andrey Sokolov
Ankit Kumar Pandey
Ante Kresic
Anton Melnikov
Anton Sidyakin
Anton Voloshin
Antonin Houska
Arne Roland
Artem Anisimov
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Asim Praveen
Atsushi Torikoshi
Ayaki Tachikake
Balazs Szilfai
Benoit Lobréau
Bernd Helmle
Bertrand Drouvot
Bharath Rupireddy
Bilva Sanaba
Bob Krier
Boris Zentner
Brad Nicholson
Brar Piening
Bruce Momjian
Bruno da Silva
Carl Sopchak
Cary Huang
Changhong Fei
Chris Travers
Christoph Berg
Christophe Pettus
Corey Huinker
Craig Ringer
Curt Kolovson
Dag Lem
Dagfinn Ilmari Mannsåker
Daniel Gustafsson
Daniel Vérité
Daniel Watzinger
Daniel Westermann
Daniele Varrazzo
Daniil Anisimov
Danny Shemesh
Dave Page
David Christensen
David G. Johnston
David Geier
David Gilman
David Kimura
David Rowley
David Steele
David Turon
David Zhang
Davinder Singh
Dean Rasheed
Denis Laxalde
Dilip Kumar
Dimos Stamatakis
Dmitriy Kuzmin
Dmitry Astapov
Dmitry Dolgov
Dmitry Koval
Dong Wook Lee
Dongming Liu
Drew DeVault
Duncan Sands
Ed Maste
Egor Chindyaskin
Ekaterina Kiryanova
Elena Indrupskaya
Emmanuel Quincerot
Eric Mutta
Erik Rijkers
Erki Eessaar
Erwin Brandstetter
Etsuro Fujita
Eugeny Zhuzhnev
Euler Taveira
Evan Jones
Evgeny Morozov
Fabrízio de Royes Mello
Farias de Oliveira
Florin Irion
Franz-Josef Färber
Garen Torikian
Georgios Kokolatos
Gilles Darold
Greg Stark
Guillaume Lelarge
Gunnar Bluth
Gunnar Morling
Gurjeet Singh
Haiyang Wang
Haiying Tang
Hamid Akhtar
Hans Buschmann
Hao Wu
Hayato Kuroda
Heath Lord
Heikki Linnakangas
Himanshu Upadhyaya
Hisahiro Kauchi
Hongyu Song
Hubert Lubaczewski
Hung Nguyen
Ian Barwick
Ibrar Ahmed
Ilya Gladyshev
Ilya Nenashev
Isaac Morland
Israel Barth Rubio
Jacob Champion
Jacob Speidel
Jaime Casanova
Jakub Wartak
James Coleman
James Inform
James Vanns
Jan Wieck
Japin Li
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jelte Fennema
Jian He
Jim Jones
Jinbao Chen
Joe Conway
Joel Jacobson
John Naylor
Jonathan Katz
Josef Simanek
Joseph Koshakow
Juan José Santamaría Flecha
Julien Rouhaud
Julien Roze
Junwang Zhao
Justin Pryzby
Justin Zhang
Karina Litskevich
Karl O. Pinc
Keisuke Kuroda
Ken Kato
Kevin McKibbin
Kieran McCusker
Kirk Wolak
Konstantin Knizhnik
Koshi Shibagaki
Kotaro Kawamoto
Kui Liu
Kyotaro Horiguchi
Lakshmi Narayanan Sreethar
Laurence Parry
Laurenz Albe
Luca Ferrari
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Maja Zaloznik
Marcel Hofstetter
Marina Polyakova
Mark Dilger
Marko Tiikkaja
Markus Winand
Martijn van Oosterhout
Martin Jurca
Martin Kalcher
Mary Xu
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Mason Sharp
Matheus Alcantara
Mats Kindahl
Matthias van de Meent
Matthijs van der Vleuten
Maxim Orlov
Maxim Yablokov
Mehmet Emin Karakas
Melanie Plageman
Melih Mutlu
Micah Gate
Michael Banck
Michael Paquier
Michail Nikolaev
Michel Pelletier
Mike Oh
Mikhail Gribkov
Mingli Zhang
Miroslav Bendik
Mitsuru Hinata
Myo Wai Thant
Naeem Akhter
Naoki Okano
Nathan Bossart
Nazir Bilal Yavuz
Neha Sharma
Nick Babadzhanian
Nicola Contu
Nikhil Shetty
Nikita Glukhov
Nikolay Samokhvalov
Nikolay Shaplov
Nishant Sharma
Nitin Jadhav
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Nuko Yokohama
Oleg Bartunov
Oleg Tselebrovskiy
Olly Betts
Onder Kalaci
Onur Tirtir
Pablo Federico
Palle Girgensohn
Paul Guo
Paul Jungwirth
Paul Ramsey
Pavel Borisov
Pavel Kulakov
Pavel Luzanov
Pavel Stehule
Peifeng Qiu
Peter Eisentraut
Peter Geoghegan
Peter Smith
Phil Florent
Philippe Godfrin
Platon Pronko
Przemyslaw Sztoch
Rachel Heaton
Ranier Vilela
Regina Obe
Reid Thompson
Reiner Peterke
Richard Guo
Riivo Kolka
Rishu Bagga
Robert Haas
Robert Sjöblom
Robert Treat
Roberto Mello
Robins Tharakan
Roman Zharkov
Ronan Dunklau
Rushabh Lathia
Ryo Matsumura
Samay Sharma
Sami Imseih
Sandeep Thakkar
Sandro Santilli
Sebastien Flaesch
Sébastien Lardière
Sehrope Sarkuni
Sergey Belyashov
Sergey Pankov
Sergey Shinderuk
Shi Yu
Shinya Kato
Sho Kato
Shruthi Gowda
Shveta Mallik
Simon Riggs
Sindy Senorita
Sirisha Chamarthi
Sravan Kumar
Stéphane Tachoires
Stephen Frost
Steve Chavez
Stone Tickle
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuhiro Nakamori
Tatsuo Ishii
Ted Yu
Teja Mupparti
Tender Wang
Teodor Sigaev
Thiago Nunes
Thom Brown
Thomas Habets
Thomas Mc Kay
Thomas Munro
Tim Carey-Smith
Tim Field
Timo Stolz
Tom Lane
Tomas Vondra
Tor Erik Linnerud
Torsten Förtsch
Tristan Partin
Troy Frericks
Tushar Ahuja
Valerie Woolard
Vibhor Kumar
Victor Spirin
Victoria Shepard
Vignesh C
Vik Fearing
Vitaly Burovoy
Vitaly Davydov
Wang Wei
Wenjing Zeng
Whale Song
Will Mortensen
Wolfgang Walther
Xin Wen
Xing Guo
Xingwang Xu
XueJing Zhao
Yanliang Lei
Youmiu Mo
Yugo Nagata
Yura Sokolov
Yuta Katsuragi
Zhen Mingyang
Zheng Li
Zhihong Yu
Zhijie Hou
Zongliang Quan
Zuming Jiang