PostgreSQL 17 に関する技術情報

このページでは PostgreSQL 17(2024/9/26リリース) に関する技術情報をお届けします。
本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。
バージョン17 の新機能については「PostgreSQL 17 検証報告」も参照してください。

バージョン17の主要な拡張

PostgreSQL 17 の主な拡張点としては以下があります。

  • VACUUM性能向上
  • WAL排他処理の改善
  • COPY高速化
  • ストリームI/O対応
  • 各種プランナ改善
  • SQL/JSON 対応拡充
  • MERGE文の拡張
  • COPY に ON_ERROR オプション
  • パーティションテーブルで排他制約サポート
  • 新コマンドpg_createsubscriber
  • ロジカルレプリケーションのフェイルオーバ対応
  • インクリメンタルバックアップ
  • ダンプ/リストアのフィルタファイル
  • MAINTAIN権限と pg_maintain既成ロール

バージョン17への移行/互換性のない変更点

  1. メンテナンス操作中に安全な search_path を使用するように機能がが変更されました。 (Jeff Davis) (17)
  2. これにより、下記のメンテナンス操作が安全でないアクセスを実行するのを防止します。式インデックスとマテリアライズドビューで使用される関数で、デフォルト以外のスキーマを参照する必要があるものは、関数の作成時に search_path を明示的に指定する必要があります。

    (動作が変更されるメンテナンス操作)
    ANALYZE
    CLUSTER
    CREATE INDEX
    CREATE MATERIALIZED VIEW
    REFRESH MATERIALIZED VIEW
    REINDEX
    VACUUM
    

    §

  3. ago が interval型の値の最後にのみ現れるように制限されました。 (Joseph Koshakow) (17)
  4. また、空の interval型ユニットが複数回出現してはならないものとなりました。

    § §

  5. 設定パラメータ old_snapshot_threshold が廃止されました。 (Thomas Munro) (17)
  6. この設定により、実行中のトランザクションでまだ可視となっているかもしれない行を VACUUM処理で削除できるようになり、後でアクセスすると「snapshot too old」というエラーが発生します。

    本機能があることによる性能上の問題や、指定が正しく動作しない問題、問い合わせで不正確な結果が返る問題が報告されていました。将来改善された実装が見つかった場合に本機能は再度追加されるかもしれません。

    §

  7. SET SESSION AUTHORIZATION における、初期セッションユーザのスーパーユーザステータスの扱いが変更されました。 (Joseph Koshakow) (17)
  8. 新しい動作は、接続時のスーパーユーザステータスではなく、SET SESSION AUTHORIZATION コマンドが発行された時点のセッションユーザのスーパーユーザーステータスに基づきます。

    §

  9. データベースごとのユーザをシミュレートする機能が削除されました。 (Nathan Bossart) (17)
  10. db_user_namespace 設定による機能はほとんど使用されていませんでした。

    §

  11. Windows で wal_sync_method の値 fsync_writethrough が廃止されました。 (Thomas Munro) (17)
  12. この値は Windows の「fsync」と同じでした。

    §

  13. WALファイル名を返すシステム関数のファイル境界処理が変更されました。 (Kyotaro Horiguchi, Andres Freund, Bruce Momjian) (17)
  14. pg_walfile_name() 関数 および pg_walfile_name_offset() 関数は、LSN が ファイルセグメント境界上にある場合、これまで 1つ前の LSNセグメント番号を報告していましたが、現在の LSNセグメントを返すようになりました。

    §

  15. 設定パラメータ trace_recovery_messages が廃止されました。 (Bharath Rupireddy) (17)
  16. pg_waldump のような同等の情報を提供できるツールが他にもあり、trace_recovery_messages の機能がどのように役立つのか明確ではないため削除されました。

    §

  17. 情報スキーマ列 element_types.domain_default が削除されました。 (Peter Eisentraut) (17)
  18. これは SQL標準仕様の誤りと考えられ、意味のない列でした。

    §

  19. pgrowlocks拡張の pgrowlocks関数におけるロックモード(modes)の出力ラベルが変更されました。 (Bruce Momjian) (17)
  20. 他のロックモードラベルとの一貫性を保つために、「Share」が「For Share」に、「Key Share」が「For Key Share」に変更されました。

    §

  21. pg_stat_bgwriterビューから buffers_backend 列とbuffers_backend_fsync 列が削除されました。 (Bharath Rupireddy) (17)
  22. これらのフィールドは、PostgreSQL 16 で追加された pg_stat_io ビューの同様の列と重複していると見なされました。

    §

  23. pgstatstatements の I/O ブロックの読み取り/書き込みタイミング統計列の名前が変更されました。 (Nazir Bilal Yavuz) (17)
  24. blk_read_time が shared_blk_read_timeに、blk_write_time が shared_blk_write_time に、名前変更されました。

    §

  25. pg_attribute.attstattarget と pg_statistic_ext.stxstattarget が変更され、デフォルトの統計ターゲットを「NULL」として表すようになりました。 (Peter Eisentraut) (17)
  26. これまでは -1 が使われていました。引き続き「ALTER TABLE t13 ALTER c1 SET STATISTICS -1;」といった指定は可能ですが、その場合でも実際にシステムテーブルの当該フィールドに格納される値は NULL になります。

    § §

  27. システムテーブル pg_collation で列名 colliculocale が colllocale に、システムテーブル pg_database で列名 daticulocale が datlocale に変更されました。 (Jeff Davis) (17)
  28. §

  29. pg_stat_progress_vacuum ビューの max_dead_tuples 列の名前をmax_dead_tuple_bytes に変更し、num_dead_tuples 列の名前を num_dead_item_ids に変更し、dead_tuple_bytes 列が追加されました。 (Masahiko Sawada) (17)
  30. § §

  31. システムビュー pg_stat_slru の name列の値が変更されました。 (Alvaro Herrera) (17)
  32. 同じく pg_stat_reset_slru() 関数で受け入れられるカウンタ名も変更されました。

    (変更一覧)
    CommitTs        → commit_timestamp
    MultiXactMember → multixact_member
    MultiXactOffset → multixact_offset
    Notify          → notify
    Serial          → serializable
    Subtrans        → subtransaction
    Xact            → transaction
    other           → other
    

    §

変更点

サーバ

オプティマイザ
  • オプティマイザが手前の行出力句で参照される列の統計情報とソート順序を考慮することで、CTE実行計画を改善できるようになりました。 (Jian Guo, Richard Guo, Tom Lane) (17)
  • § §

  • 問い合わせの IS NULL、IS NOT NULL 限定による最適化が改善されました。 (David Rowley, Richard Guo, Andy Fan) (17)
  • NOT NULL 列に対する問い合わせから IS NOT NULL 限定を除くようになり、IS NULL 指定がある場合に NOT NULL 列のスキャンを除くようになりました。

    (実行例)
    db1=# CREATE TABLE t2 (id int PRIMARY KEY, v text);
    db1=# INSERT INTO t2 SELECT g, md5(g::text) FROM generate_series(1, 1000) g;
    db1=# VACUUM ANALYZE t2;
    db1=# explain SELECT id FROM t2 WHERE id IS NULL;
                    QUERY PLAN
    ------------------------------------------
     Result  (cost=0.00..0.00 rows=0 width=0)
       One-Time Filter: false
    (2 rows)
    
    (16.x ではスキャンを行う実行プランになる)
                                  QUERY PLAN
    -----------------------------------------------------------------------
     Index Only Scan using t2_pkey on t2  (cost=0.28..4.29 rows=1 width=4)
       Index Cond: (id IS NULL)
    (2 rows)
    

    § §

  • boolean型の列で「IS [NOT] UNKNOWN」条件でパーティションプルーニングが可能になりました。 (David Rowley) (17)
  • §

  • 包含演算子 <@ および @> で範囲型の値に対する最適化が改善されました。 (Kim Johan Andersson, Jian He) (17)
  • §

  • プラン作成時に IN による相関副問い合わせを結合に変換できるようになりました。 (Andy Fan, Tom Lane) (17)
  • §

  • パーティションテーブルや継承親テーブル、「UNION ALL」でのLIMIT句の最適化が改善されました。 (Andy Fan, David Rowley) (17)
  • LIMIT が付加されたことで、最初の件を返すことを優先する最適化を行う場合には、子テーブル部分のプラン作成においても同様に行うようになりました。

    §

  • 問い合わせノードがより多くの場合に並列動作できるようになりました。 (Tom Lane) (17)
  • パラレルセーフな InitPlan プラン要素について並列実行が検討されるようになりました。

    §

  • 「GROUP BY」の列を内部的に「ORDER BY」に一致するように並べ替えできるようになりました。 (Andrei Lepikhov, Teodor Sigaev) (17)
  • 新たな設定パラメータ enable_groupby_reordering で本機能(デフォルト有効)を無効にすることができます。

    §

  • ALL指定の無い UNION でプラン要素 Merge Append が使えるようになりました。 (David Rowley) (17)
  • これまでは Append → Hash Aggregate や Append → Sort → Unique の実行プランになっていました。

    §

  • Merge Append プランがソートを要する行数をより正確に計算するように修正されました。 (Alexander Kuzmenkov) (17)
  • プラン作成時にソートのコストが過大に計算されていました。プラン選択の変化を避けるため、マイナーバージョンアップには適応されませんでした。

    §

  • GiST および SP-GiST インデックスがインクリメンタルソートに使用できるようになりました。 (Miroslav Bendik) (17)
  • これは特に ORDER BY 句の(他の列ではなく)最初の列に GiST や SP-GiSTのインデックスがあるときに有用です。

    §

  • プランナ統計情報のシステムビュー pg_stats に範囲型のヒストグラム情報を報告する列が追加されました。 (Egor Rogov, Soumyadeep Chakraborty) (17)
  • (pg_stats に追加された列)
     range_length_histogram  範囲の長さのヒストグラム
     range_empty_frac        空範囲の比率
     range_bounds_histogram  範囲の下限と上限のヒストグラム
    

    §

インデックス
  • Btreeインデックスが IN句の定数で与えられる値の集合を、より効率的に探せるようになりました。 (Peter Geoghegan, Matthias van de Meent) (17)
  • §

  • BRINインデックスを並列作成できるようになりました。 (Tomas Vondra, Matthias van de Meent) (17)
  • §

性能一般
  • VACUUM処理がより効率的にタプルの除去と凍結を行えるようになりました。 (Melanie Plageman, Heikki Linnakangas) (17)
  • VAUUM処理による WAL出力量も縮減されました。

    §

  • VACUUM処理の過程でタプル情報をより効率的に格納できるようになりました。 (Masahiko Sawada, John Naylor) (17)
  • さらに、maintenamce_work_mem や autovacuum_work_mem がより大きくても暗黙に制限されていた使用メモリ量の上限 1GB が撤廃されました。

    § § § §

  • インデックスを持たないテーブルの VACUUM が最適化されました。 (Melanie Plageman) (17)
  • §

  • vacuum_buffer_usage_limit 設定のデフォルトが 2MB に変更されました。 (Thomas Munro) (17)
  • これまでは 256kB でした。

    §

  • 多数のメンバーシップを伴うロールを検査する性能が改善されました。 (Nathan Bossart) (17)
  • 調べるべきロールの数が多いときには単純な線形探索ではなく、Bloomフィルタが使われるようになりました。

    §

  • 競合が多いときの WAL書き込みの性能が改善されました。 (Bharath Rupireddy) (17)
  • §

  • 大きなブロックのデータをクライアントに送信するときの性能が改善されました。 (Melih Mutlu) (17)
  • §

  • 新たな設定パラメータ io_combine_limit に基づきファイルシステム読み込みのグルーピングが可能になりました。 (Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz) (17)
  • § § §

モニタリング
  • システムビュー pg_stat_checkpointer が新設されました。 (Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov) (17)
  • pg_stat_bgwriter からチェックポイント関連の列が本ビューに移動しました。

    § § §

  • 統計情報をリセットする制御が改善されました。 (Atsushi Torikoshi, Bharath Rupireddy) (17)
  • 引数無しの pg_stat_reset_shared() および pg_stat_reset_shared(NULL) の関数実行で全ての共有統計情報をリセットできるようになりました。

    pg_stat_reset_shared('slru') および pg_stat_reset_slru() で、SLRU の統計情報をリセットできるようになりました。これは以前は pg_stat_reset_slru(NULL) で行うことができました。

    § § §

  • バックアップからの WALリカバリに関するログメッセージが追加されました。 (Andres Freund) (17)
  • (新たに出るようになったメッセージ)
    LOG:  starting backup recovery with redo LSN ../.., checkpoint LSN ../., on timeline ID .. 
    LOG:  restarting backup recovery with redo LSN ../.."
    LOG:  completed backup recovery with redo LSN ../.. and end LSN ../..
    

    §

  • log_connections = on のときのログ出力で、trust認証の場合にも「LOG: connection authenticated: user=".." method=trust」が出力されるようになりました。 (Jacob Champion) (17)
  • §

  • walsenderプロセスによるレプリケーションスロットの取得と解放をログ出力するようになりました。 (Bharath Rupireddy) (17)
  • §

  • 待機イベントタイプの一覧と説明文を出力するシステムビュー pg_wait_events が追加されました。 (Bertrand Drouvot) (17)
  • 待機イベントタイプは pg_stat_activity システムビューの出力にあらわれます。

    §

  • チェックポイント遅延を示す待機イベント「CheckpointDelayStart」「CheckpointDelayComplete」が追加されました。 (Thomas Munro) (17)
  • §

  • VACUUM がインデックス処理の進捗を報告するようになりました。 (Sami Imseih) (17)
  • システムビュー pg_stat_progress_vacuum の列 indexes_total とindexes_processed で、いくつのインデックスが処理済かが報告されます。

    §

権限
  • メンテナンス操作を実行する権限を付与できるようになりました。 (Nathan Bossart) (17)
  • 権限名 MAINTAIN を使用してオブジェクト単位で権限付与することも、定義済みロール pg_maintain を使用して全オブジェクトむけにロール単位で権限を付与することもできます。あるユーザがあるオブジェクトに MAINTAIN権限を持っているときに許可される操作は、VACUUM、ANALYZE、REINDEX、REFRESH MATERIALIZED VIEW、CLUSTER、LOCK TABLE です。

    §

  • pg_monitor のメンバシップを持つロールが pg_current_logfile() を実行できるようになりました。 (Pavlo Golub, Nathan Bossart) (17)
  • §

サーバ設定
  • ALTER SYSTEM を禁止することができる設定パラメータ allow_alter_system が追加されました。 (Jelte Fennema-Nio, Gabriele Bartolini) (17)
  • §

  • ALTER SYSTEM が認識していないカスタム設定パラメータを設定できるようになりました。 (Tom Lane) (17)
  • 「GRANT ... ON PARAMETER ...」でカスタム設定パラメータを指定することも可能です。

    §

  • トランザクションの実行時間を制限する、設定パラメータ transaction_timeout が追加されました。 (Andrey Borodin, Japin Li, Junwang Zhao, Alexander Korotkov) (17)
  • § § §

  • プラットフォーム非依存の組み込みの照合順序プロバイダ「builtin」が追加されました。 (Jeff Davis) (17)
  • これによりサポートされる照合順序は「C」と「C.UTF-8」です。

    § § § §

  • Postgres による Huge Pages の使用を報告するための参照用の設定パラメータ huge_pages_status が追加されました。 (Justin Pryzby) (17)
  • これは huge_pages が try に設定されている場合に便利です。

    §

  • イベントトリガを無効にできる設定パラメータ event_triggers が追加されました。 (Daniel Gustafsson) (17)
  • これを off にすることで、調査用に一時的にイベントトリガを無効にできます。

    §

  • SLRUキャッシュサイズが設定できるようになりました。 (Andrey Borodin, Dilip Kumar, Alvaro Herrera) (17)
  • 新たな設定パラメータは以下の通りです。

     commit_timestamp_buffers
     multixact_member_buffers
     multixact_offset_buffers
     notify_buffers
     serializable_buffers
     subtransaction_buffers
     transaction_buffers
    

    このうち、commit_timestamp_buffers、transaction_buffers、subtransaction_buffers のデフォルト設定値は shared_buffers とともに自動的にスケールアップします。

    §

ストリーミングレプリケーションとリカバリ
  • ファイルシステムの増分バックアップがサポートされました。 (Robert Haas, Jakub Wartak, Tomas Vondra) (17)
  • 増分バックアップは pg_basebackup の新たな --incremental オプションを使用して作成できます。 新しいアプリケーション pg_combinebackup を使用すると、基本および増分ファイルシステムバックアップを操作できます。

    § §

  • WAL要約ファイルの作成ができるようになりました。 (Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski) (17)
  • これらのファイルは、LSN 範囲内で変更されたブロック番号を記録し、データベースクラスタディレクトリとテーブルスペースの増分バックアップに役立ちます。これは設定パラメータ summarize_wal と wal_summary_keep_time によって制御され、関数 pg_available_wal_summaries()、pg_wal_summary_contents()、pg_get_wal_summarizer_state() で状態を観測できます。

    § § § §

  • バックアップマニフェストファイルにシステム識別子が追加されました。 (Amul Sul) (17)
  • これにより無効な WAL の使用を検出できるようになりました。

    §

  • pg_basebackup が postgresql.auto.conf に接続情報を書き込む際に接続文字列内の dbname の値を書き込めるようになりました。 (Vignesh C, Hayato Kuroda) (17)
  • §

  • pg_replication_slotsビューに、無効なスロットの理由を報告する invalidation_reason列が追加されました。 (Shveta Malik, Bharath Rupireddy) (17)
  • § §

  • pg_replication_slotsビューに、スロットの非アクティブ期間を報告する inactive_since列が追加されました。 (Bharath Rupireddy) (17)
  • § § §

  • 論理レプリケーションスロットを同期させる関数 pg_sync_replication_slots() が追加されました。 (Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut) (17)
  • 物理スタンバイで実行して、物理プライマリにある論理レプリケーションスロットと状態情報の同期を取ります。これにより物理スタンバイを昇格したとき、論理レプリケーションのパブリッシャを引継ぐことができます。

    § §

  • レプリケーションプロトコルに failoverプロパティが追加されました。 (Hou Zhijie, Shveta Malik) (17)
  • §

ロジカルレプリケーション
  • 物理スタンバイサーバから論理レプリカを作成するためにpg_createsubscriber アプリケーションが追加されました。 (Euler Taveira) (17)
  • §

  • pg_upgrade で論理スロットとサブスクリプションをバージョンアップ移行できるようになりました。 (Hayato Kuroda, Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal) (17)
  • これにより論理レプリケーションをアップグレード後も素早く継続できます。 これは移行元のバージョンが 17以降である場合にのみ機能します。

    § §

  • 論理スロットのフェイルオーバーが有効になりました。 (Hou Zhijie, Shveta Malik, Ajin Cherian) (17)
  • これは pg_create_logical_replication_slot() の 5番目のオプション引数で制御されます。

    §

  • フェイルオーバの論理スロット同期を有効にする設定パラメータ sync_replication_slots が追加されました。 (Shveta Malik, Hou Zhijie, Peter Smith) (17)
  • § §

  • 「CREATE / ALTER SUBSCRIPTION」に論理レプリケーションフェイルオーバ制御のオプション failover が追加されました。 (Shveta Malik, Hou Zhijie, Ajin Cherian) (17)
  • § §

  • 論理レプリケーションの変更適用において、サブスクライバでハッシュインデックスが使用できるようになりました。 (Hayato Kuroda) (17)
  • 以前は、この目的で使用できるのは Btreeインデックスのみでした。

    §

  • サブトランザクションが多数ある場合のロジカルデコーディングの性能が向上しました。 (Masahiko Sawada) (17)
  • §

  • サブスクリプション所有者のスーパーユーザ権限が取り消された場合は、適用ワーカプロセスが再起動されるようになりました。 (Vignesh C) (17)
  • これにより再認証が強制されます。

    §

  • pg_logical_emit_message() 関数に、メッセージを永続化する flushオプションが追加されました。 (Michael Paquier) (17)
  • §

  • サブスクライバから参照される前に、同期する必要のある物理スタンバイを指定できるようになりました。 (Hou Zhijie, Shveta Malik) (17)
  • 新たな設定パラメータは synchronized_standby_slots です。

    § §

  • pg_stat_subscription ビュー に worker_type列が追加されました。 (Peter Smith) (17)
  • 「apply」「parallel apply」「table synchronization(初期同期)」をいずれであるかが報告されます。

    §

ユーティリティコマンド

  • COPY に、エラー行を無視して処理を継続する新オプション「ON_ERROR ignore」が追加されました。 (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo Nagata) (17)
  • デフォルトは「ON_ERROR stop」で、エラー行に遭遇するとコマンド実行がそこでエラー終了するという、従来通りの振る舞いです。

    § § § §

  • COPY に新オプション「LOG_VERBOSITY」が追加されました。 (Bharath Rupireddy) (17)
  • この指定で COPY FROM で無視した行が報告されます。

    §

  • COPY FROM でスキップした行数を報告するようになりました。 (Atsushi Torikoshi) (17)
  • システムビュー pg_stat_progress_copy の列 tuples_skipped で報告されます。

    §

  • COPY FROM で、全列への FORCE_NULL または FORCE_NOT_NULL を指定するのに「*」が使えるようになりました。 (Zhang Mingli) (17)
  • §

  • パーティションテーブルが IDENTITY列(自動連番生成する列)を持てるようになりました。 (Ashutosh Bapat) (17)
  • パーティション全体で1つのシーケンスから一貫した発番が行われます。

    §

  • パーティションテーブルで排他制約が使用可能になりました。 (Paul A. Jungwirth) (17)
  • ただし、排他制約にパーティションキー列の等価比較が含まれている必要があります。

    §

  • ALTER TABLE で列の統計ターゲット数をデフォルトに指定する方法が明解になりました。 (Peter Eisentraut) (17)
  • 新たに「ALTER TABLE ... SET STATISTICS DEFAULT」という構文が使用できます。旧来からの「... SET STATISTICS -1」も引き続き使用できます。

    §

  • ALTER TABLE で列の生成式を変更できるようになりました。 (Amul Sul) (17)
  • 構文は「ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION ...」です。

    §

  • パーティションテーブルに対してテーブルアクセスメソッドを指定できるようになりました。 (Justin Pryzby, Soumyadeep Chakraborty, Michael Paquier) (17)
  • § §

  • ALTER TABLE ... SET ACCESS METHOD で DEFAULT を指定できるようになりました。 (Michael Paquier) (17)
  • §

  • 接続時に起動するイベントトリガがサポートされました。 (Konstantin Knizhnik, Mikhail Gribkov) (17)
  • §

  • REINDEX に対するイベントトリガがサポートされました。 (Garrett Thornburg, Jian He) (17)
  • §

  • CLUSTER コマンドで括弧でパラメータを与える構文でもテーブル名を指定しない(すなわち全テーブルを対象とする)ことが可能になりました。 (Nathan Bossart) (17)
  • §

EXPLAIN
  • EXPLAIN でオプティマイザのメモリ使用を報告できるようになりました。 (Ashutosh Bapat) (17)
  • オプション名は「MEMORY」です。

    §

  • EXPLAIN に、転送用のデータ変換コストを報告する「SERIALIZE」オプションが追加されました。 (Stepan Rutz, Matthias van de Meent) (17)
  • §

  • EXPLAIN で BUFFERS 指定したときの出力で、ローカル I/O ブロックの read/write 時間の統計が報告されるようになりました。 (Nazir Bilal Yavuz) (17)
  • §

  • EXPLAIN で SubPlanノードと出力パラメータの表示が改善されました。 (Tom Lane, Dean Rasheed) (17)
  • Output: で SubPlan のどの列を使っているのか、また、Filter: でSubPlan からどのような条件を使用しているのかが、具体的に示されるようになります。

    §

  • EXPLAIN 出力で JIT の deform_counter が Generation時間の内のDeform時間として、報告されるようになりました。 (Dmitry Dolgov) (17)
  • pg_stat_statements拡張でも pg_stat_statements 関数およびビューに、jit_deform_count および jit_deform_time 列が追加されました。

    §

データ型

  • interval型で「+infinity」と「-infinity」値がサポートされました。 (Joseph Koshakow, Jian He, Ashutosh Bapat) (17)
  • §

  • 同トランザクション内で、作成され、ALTER TYPE で変更された ENUM型を使用できるようになりました。 (Tom Lane) (17)
  • (16.x ではエラーになる使用法)
    db1=# BEGIN;
    db1=# CREATE TYPE myenum AS ENUM('good');
    db1=# ALTER TYPE myenum ADD VALUE 'bad';
    db1=# SELECT enum_range(null::myenum); -- 以前はここでエラー
     enum_range
    ------------
     {good,bad}
    (1 row)
    
    db1=# COMMIT;
    

    §

MERGE

  • MERGE文で書き換え対象のターゲット表として、更新可能ビューを扱えるようになりました。 (Dean Rasheed) (17)
  • 参照対象の表としてであれば従来から扱えました。

    §

  • MERGE文で「WHEN NOT MATCHED BY SOURCE」指定が可能になりました。 (Dean Rasheed) (17)
  • 従来から対応していた「WHEN NOT MATCHED」は、ターゲット表に無い場合の動作を意味します。このことを明確化に示す「WHEN NOT MATCHED BY TARGET」という書き方にも対応しました。

    §

  • MERGE文で RETURNING句が利用可能になりました。 (Dean Rasheed) (17)
  • RETURNING句で merge_action() 関数を指定すると、実行した DML の種別(UPDATE、INSERT、DELETE)が報告されます。

    §

関数

  • JSONデータをテーブル表現に変換する関数 JSON_TABLE() が追加されました。 (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Jian He) (17)
  • 本関数は元となる JSONデータを問い合わせる SELECT文の FROM句に(ラテラル結合で)指定して、使用することができます。

    § §

  • SQL/JSON のコンストラクタ関数 JSON()、JSON_SCALAR()、JSON_SERIALIZE() が追加されました。 (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote) (17)
  • §

  • SQL/JSON の問い合わせ関数 JSON_EXISTS()、JSON_QUERY()、JSON_VALUE() が追加されました。 (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Peter Eisentraut, Jian He) (17)
  • § § § § §

  • 値を他の JSONデータ型に変換する jsonpathメソッドがいくつか追加されました。 (Jeevan Chalke) (17)
  • (追加されたメソッドは以下の通り)
     .bigint()
     .boolean()
     .date()
     .decimal([precision [, scale]])
     .integer()
     .number()
     .string()
     .time()
     .time_tz()
     .timestamp()
     .timestamp_tz()
    

    §

  • to_timestamp() 関数でタイムゾーン形式指定が追加されました。 (Tom Lane) (17)
  • 「TZ」でタイムゾーンの略記形または数値オフセットを受け付けるようになります。これまでは「OF」で数値オフセットのみを受け付けていました。「TZ」は to_char() 関数でしか対応していませんでした。

    §

  • セッションのタイムゾーンを「AT LOCAL」で指定できるようになりました。 (Vik Fearing) (17)
  • 「AT TIME ZONE ゾーン」という指定ができた箇所に「AT LOCAL」と指定できます。これは、タイムゾーンを具体的に指定することなく、タイムスタンプ値にタイムゾーンを追加、削除するときに有用です。

    (実行例)
    db1=# SELECT now();
                  now
    -------------------------------
     2024-10-09 10:32:37.484554+09
    (1 row)
    
    db1=# SELECT now() AT LOCAL;
              timezone
    ----------------------------
     2024-10-09 10:32:34.937626
    (1 row)
    

    §

  • UUID の情報を返す関数 uuid_extract_timestamp()、 uuid_extract_version() が追加されました。 (Andrey Borodin) (17)
  • §

  • 指定範囲の乱数を生成する関数 random(min,max) が追加されました。 (Dean Rasheed) (17)
  • integer、bigint、numeric 型むけにそれぞれ提供されます。

    §

  • 整数から 2進数および 8進数の文字列に変換する関数 to_bin()、 to_oct() が追加されました。 (Eric Radman, Nathan Bossart) (17)
  • (実行例)
    db1=# SELECT to_bin(128), to_oct(128);
      to_bin  | to_oct
    ----------+--------
     10000000 | 200
    (1 row)
    

    §

  • ユニコード情報の関数が追加されました。 (Jeff Davis) (17)
  • 追加された関数は、ユニコードバージョンを返す unicode_version()、ICU におけるユニコードバージョンを返す icu_unicode_version()、文字列が全てユニコードのコードポイントに割り当てされているかを返す unicode_assigned(str) です。

    §

  • 文字列を単一の XMLテキストノードに変換する SQL/XML の関数 xmltext() が追加されました。 (Jim Jones) (17)
  • §

  • 型の修飾子を返す関数 to_regtypemod() が追加されました。 (David Wheeler, Erik Wienhold) (17)
  • (実行例)
    db1=# SELECT to_regtypemod('timestamp(4)'), to_regtypemod('text');
     to_regtypemod | to_regtypemod
    ---------------+---------------
                 4 |            -1
    (1 row)
    

    §

  • ドメイン型の元となる型を返す pg_basetype() 関数が追加されました。 (Steve Chavez) (17)
  • (実行例)
    db1=# CREATE DOMAIN uint AS int CHECK (VALUE >= 0);
    db1=# SELECT pg_basetype('uint'), pg_typeof(pg_basetype('uint'));
     pg_basetype | pg_typeof
    -------------+-----------
     integer     | regtype
    (1 row)
    

    §

  • 列のデータが格納されている TOAST のチャンクID を返す pg_column_toast_chunk_id(col) 関数が追加されました。 (Yugo Nagata) (17)
  • TOAST格納されていない列に対しては NULL が返ります。

    (実行例)
    db1=# CREATE TABLE t95 (id int PRIMARY KEY, v text);
    db1=# INSERT INTO t95 VALUES (1, repeat('a', 999999)), (2, 'bbb');
    db1=# SELECT id, pg_column_toast_chunk_id(v) FROM t95;
     id | pg_column_toast_chunk_id
    ----+--------------------------
      1 |                    16476
      2 |
    (2 rows)
    

    §

PL/pgSQL

  • PL/pgSQL で %TYPE および %ROWTYPE による指定を配列に用いることができるようになりました。 (Quan Zongliang, Pavel Stehule) (17)
  • (使用例)
    db1=# CREATE FUNCTION f96() RETURNS void LANGUAGE plpgsql AS $$
          DECLARE ids public.t95.id%TYPE[];
          BEGIN ids := '{1,2,3}'; RETURN; 
          END; $$;
    

    §

  • PL/pgSQL で複合型の列に対して %TYPE 指定が可能になりました。 (Tom Lane) (17)
  • §

libpq

  • ロールのパスワードを変更する、新たな libpq 関数が追加されました。 (Joe Conway) (17)
  • 新関数 PQchangePassword() は新たなパスワードをサーバに送る前にハッシュ化します。

    §

  • ポータルとプリペアドステートメントをクローズする libpq関数が追加されました。 (Jelte Fennema-Nio) (17)
  • これらの関数は、PQclosePrepared()、 PQclosePortal()、 PQsendClosePrepared()、 PQsendClosePortal() です。

    §

  • ブロッキングと非ブロッキングのキャンセル要求が可能な libpq API が追加されました。キャンセルする接続で暗号化が行われている場合、キャンセル要求の接続でも同条件の暗号化が適用されます。 (Jelte Fennema-Nio) (17)
  • 追加された API関数は以下の通りです。
     PQcancelBlocking
     PQcancelStart
     PQcancelCreate
     PQcancelPoll
     PQcancelStatus
     PQcancelSocket
     PQcancelErrorMessage
     PQcancelReset
     PQcancelFinish
    

    §

  • ネットワークソケットをポーリングできる libpq関数 PQsocketPoll() が追加されました。 (Tristan Partin, Tom Lane) (17)
  • § §

  • パイプラインの同期点を送るlibpq関数 PQsendPipelineSync() が追加されました。 (Anton Kirilov) (17)
  • これは PQpipelineSync() と似ていますが、これは出力バッファのサイズ閾値に達するまでは、サーバへのフラッシュは行いません。

    §

  • チャンクで結果が取得できるようにモード切り替えを行うlibpq関数 PQsetChunkedRowsMode() が追加されました。 (Daniel Vérité) (17)
  • §

  • libpq でネットワークを往復するネゴシエーションを要さない TLS接続が可能になりました。 (Greg Stark, Heikki Linnakangas, Peter Eisentraut, Michael Paquier, Daniel Gustafsson) (17)
  • クライアント側でオプション sslnegotiation=directを指定して利用します。また、SSLライブラリで ALPN をサポートしていることが必要です。PostgreSQL 17 以上のサーバに対してのみ利用できます。

    § § § § § § § §

psql

  • psql でデフォルトと空の権限の表示が改善されました。 (Erik Wienhold, Laurenz Albe) (17)
  • \dp で権限が空の場合については「(none)」と表示するようになりました。デフォルトの場合には引き続き、空欄(即ち NULL)で示されます。これまでは両ケースがどちらも空欄で区別ができませんでした。

    §

  • psql でバックスラッシュコマンドに対する出力が「\pset null 《NULLを示す文字列》」の指定に従うようになりました。 (Erik Wienhold, Laurenz Albe) (17)
  • これまでは、この指定が無視されていました。

    §

  • psql の \watch が問い合わせ結果行数が指定数よりも小さいときに停止できるようになりました。 (Greg Sabino Mullane) (17)
  • これを指定する新たなパラメータは min_rows です。

    (1秒ごと繰り返し実行して 0行の応答だったら停止する例)
    db1=# SELECT * FROM t107 WHERE id < random(1, 5);
     id |                v
    ----+----------------------------------
      1 | c4ca4238a0b923820dcc509a6f75849b
      2 | c81e728d9d4c2f636f067f89cc14862c
      3 | eccbc87e4b5ce2fe28308fd9f2a7baf3
    (3 rows)
    
    db1=# \watch min_rows=1 1
    
    2024年10月10日 16時03分09秒 (every 1s)
     id |                v
    ----+----------------------------------
      1 | c4ca4238a0b923820dcc509a6f75849b
    (1 row)
    
    2024年10月10日 16時03分10秒 (every 1s)
    
     id | v
    ----+---
    (0 rows)
    

    §

  • psql からのデータベース再接続で Ctrl-C によるキャンセルが可能になりました。 (Tristan Partin) (17)
  • (動作例: \c による接続で Ctrl-C が効くようになりました)
    db1=# \c db2 postgres
    ^Cconnection to server on socket "/tmp/.s.PGSQL.5432" failed:
    Previous connection kept
    db1=# 
    

    §

  • psql が SELECT 以外の問い合わせ文でも FETCH_COUNT 変数による設定が反映されるようになりました。 (Daniel Vérité) (17)
  • §

  • psql のタブ補完が改善されました。 (Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Pavel Borisov, Jian He) (17)
  • CREATE SCHEMA、CREATE TABLE、ALTER TABLE、ALTER DEFAULT PRIVILEGES 等で対応が強化されたほか、新構文への対応も行われました。

    § § § § § § § §

サーバアプリケーション

  • WALサマリファイルのダンプを行う pg_walsummary コマンドが追加されました。 (Robert Haas) (17)
  • §

  • pg_dump でダンプされたラージオブジェクトをバッチでリストア可能になりました。 (Tom Lane) (17)
  • これにより多数のラージオブジェクトをリストアするのに、複数トランザクションに分けて行ったり、パラレルでリストアすることが可能になります。今のところ、所有者ごとに固定の上限1000個を超えるラージオブジェクトが分割してダンプされます。

    tar形式やディレクトリ形式のダンプで、blobs.tocファイルがいくつかの blobs_*.toc というファイルに分かれて出力されるようになります。

    §

  • pg_dump に --exclude-extension オプションが追加されました。 (Ayush Vatsa) (17)
  • 指定したパターンの拡張をダンプから除外します。

    §

  • pg_dump、pg_dumpall および pg_restore で、処理対象にオブジェクトを含めるか含めないかを 1つのファイルで一括して指定できるようになりました。 (Pavel Stehule, Daniel Gustafsson) (17)
  • --filter オプションでフィルタファイルを指定します。

    §

  • いくつかのクライアントアプリケーションに --sync-method オプションが追加されました。 (Justin Pryzby, Nathan Bossart) (17)
  • 対象は、initdb、 pg_basebackup、 pg_checksums、 pg_dump、 pg_rewind、 pg_upgrade です。ストレージに同期書き込み命令を送る方法を fsync または syncfs かで指定できます。

    §

  • pg_restore に --transaction-size オプションが追加されました。 (Tom Lane) (17)
  • これによりオブジェクトのリストアを複数のトランザクションバッチに分けることができます。巨大すぎるトランザクションブロックの問題を避けることで、性能上のメリットを得ることができます。

    §

  • pgbench のデバッグモードオプションが -d から --debug に変更されました。 (Greg Sabino Mullane) (17)
  • -d は、新たに追加された --dbname オプションと共に、データベース名の指定に使われるようになりました。

    §

  • pgbench に、いずれかクライアントが異常終了したときに処理を終了するオプション --exit-on-abort が追加されました。 (Yugo Nagata) (17)
  • §

  • pgbench にコマンド「\syncpipeline」が追加されました。 (Anthonin Bonnefoy) (17)
  • 本コマンドで libpq API の PQsendPipelineSync を通してサーバに Sync メッセージを送ります。

    §

  • pg_archivecleanup がバックアップヒストリファイルを削除できるようになりました。 (Atsushi Torikoshi) (17)
  • この動作は --clean-backup-history オプションで指定します。

    §

  • pg_archivecleanup に長いオプションがいくつか追加されました。 (Atsushi Torikoshi) (17)
  • 追加された --debug、--dry-run、--strip-extension には、これまで 1文字オプション -d、-n、-x しかありませんでした。

    §

  • pg_basebackup と pg_receivewal で接続指定に dbname が利用可能になりました。 (Jelte Fennema-Nio) (17)
  • これはデータベース名を必要とする PgBouncer のようなコネクションプーラを通す場合に有益です。

    §

  • pg_upgrade に --copy-file-range オプションが追加されました。 (Thomas Munro) (17)
  • これは Linux と FreeBSD でサポートされます。

    §

  • reindexdb の --index オプションで、異なるテーブルのインデックスを並列に処理できるようになりました。 (Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov) (17)
  • §

  • reindexdb、vacuumdb、clusterdb の各コマンドで、全データベースを通して、指定に一致したオブジェクトだけを処理させることが可能になりました。 (Nathan Bossart) (17)
  • これまではオプション --all とオブジェクトを指定する --table などのオプションは、両立できませんでした。

    (実行例)
    $ vacuumdb --all --table='pg_class'
    vacuumdb: vacuuming database "db1"
    vacuumdb: vacuuming database "postgres"
    vacuumdb: vacuuming database "template1"
    

    § § §

ソースコード

  • OpenSSL 1.0.1 のサポートが廃止されました。 (Michael Paquier) (17)
  • §

  • OpenSSL FIPS モードでテストに合格できるようになりました。 (Peter Eisentraut) (17)
  • § §

  • ビットカウントに CPU の AVX-512 命令を使用するようになりました。 (Paul Amonson, Nathan Bossart, Ants Aasma) (17)
  • ビジビリティマップ、BRINインデックス、bit_count()関数、テキスト全文検索における tsvector の処理でビットカウントが行われます。

    § §

  • LLVM バージョン 10 以降が必要になりました。 (Thomas Munro) (17)
  • §

  • 64ビット LoongArch CPU でネイティブ CRC 命令を使用するようになりました。 (Xudong Yang) (17)
  • §

  • AIX がサポートされなくなりました。 (Heikki Linnakangas) (17)
  • §

  • Microsoft Visual Studio 固有の PostgreSQL ビルドオプションが廃止されました。 (Michael Paquier) (17)
  • 現在、Visual Studio ビルドで使用できる方法は Meson のみです。

    §

  • configure の --disable-thread-safety オプションが廃止されました。 (Thomas Munro, Heikki Linnakangas) (17)
  • サポートされているすべてのプラットフォームで、十分なスレッド対応がなされていると想定しています。

    § §

  • configure の --with-CC オプションが廃止されました。 (Heikki Linnakangas) (17)
  • これからは、CC 環境変数を設定することが、唯一のサポートされているコンパイラを指定する方法です。

    §

  • ユーザ定義のデータ型受信関数で、NULL終端データの受信が必須ではなくなりました。 (David Rowley) (17)
  • データバッファが NULL終端でなければならないという要件が緩和されました。

    §

  • 巨大な JSONドキュメントで使用するためのインクリメンタルJSONパーサが追加されました。 (Andrew Dunstan) (17)
  • §

  • トップレベルの README ファイルが Markdown に変換されました。 (Nathan Bossart) (17)
  • §

  • 不要になったトップレベルの INSTALL ファイルが削除されました。 (Tom Lane) (17)
  • §

  • make の distprep オプションが廃止されました。 (Peter Eisentraut) (17)
  • §

  • make に Android の共有ライブラリへの対応が追加されました。 (Peter Eisentraut) (17)
  • §

  • インジェクションポイントのバックエンドサポートが追加されました。 (Michael Paquier) (17)
  • これはサーバのデバッグに使用され、サーバーのコンパイル時に有効にする必要があります。

    § § § §

  • 動的共有メモリレジストリが追加されました。 (Nathan Bossart) (17)
  • これにより、起動時に初期化されない共有ライブラリが動的共有メモリアクセスを調整することが可能になります。

    §

  • 同じクエリの他のログレコードと同じ時刻値を使用するようにemit_log_hook が修正されました。 (Kambam Vinay, Michael Paquier) (17)
  • §

  • 述語チェックに jsonpath を使用するためのドキュメントが改善されました。 (David Wheeler) (17)
  • §

追加モジュール

  • 非結合の条件を持つ結合を外部データラッパーとカスタムスキャンにプッシュダウンすることが可能になりました。 (Richard Guo, Etsuro Fujita) (17)
  • これを行うには、外部データラッパーとカスタムスキャンが、本ケースに対応できるように修正されている必要があります。

    (下記例の「AND CURRENT_DATE = now()::date;」の条件が加わると、
     これまでは結合のプッシュダウンが行われなかった)
    db1=# explain (verbose) 
          SELECT * FROM ft145 JOIN ft145d ON ft145.id = ft145d.id AND CURRENT_DATE = now()::date;
                                        QUERY PLAN                              
    -----------------------------------------------------------------------------------
     Result  (cost=100.01..257588.74 rows=10101 width=12)
       Output: ft145.id, ft145.v, ft145d.id, ft145d.c1
       One-Time Filter: (CURRENT_DATE = (now())::date)
       ->  Foreign Scan  (cost=100.01..257588.74 rows=10101 width=12)
             Output: ft145.id, ft145.v, ft145d.id, ft145d.c1
             Relations: (public.ft145) INNER JOIN (public.ft145d)
             Remote SQL: SELECT r1.id, r1.v, r2.id, r2.c1
    		   FROM (public.t145 r1 INNER JOIN public.t145d r2 ON (((r1.id = r2.id))))
    (7 rows)
    

    §

  • postgres_fdw の外部サーバに EXISTS と IN の副問い合わせがプッシュダウン可能になりました。 (Alexander Pyhalov) (17)
  • (新たに可能となったプッシュダウンの例)
    db1=# explain (verbose) SELECT * FROM ft145 WHERE id IN (SELECT id FROM ft145 WHERE id < 10);
                                          QUERY PLAN                     
    ----------------------------------------------------------------------------------------
     Foreign Scan  (cost=100.00..467.99 rows=1 width=6)
       Output: ft145.id, ft145.v
       Relations: (public.ft145) SEMI JOIN (public.ft145 ft145_1)
       Remote SQL: SELECT r1.id, r1.v FROM public.t145 r1 WHERE EXISTS (
         SELECT NULL FROM public.t145 r3 WHERE ((r3.id < 10)) AND ((r1.id = r3.id)))
    (4 rows)
    

    §

  • デフォルトの外部データラッパーのタプルコストが 0.01 から 0.2 に増えました。 (David Rowley, Umair Shahid) (17)
  • 値はオプティマイザ(プランナ)から使われます。

    § §

  • dblink拡張で dblink によるデータベース操作を中断できるようになりました。 (Noah Misch) (17)
  • これまでは以下のような Ctrl-C (INTシグナル) による SQL実行のキャンセルができませんでした。なお、このようにキャンセルしても、リモートセッション上の SQL実行は継続します。

    db1=# SELECT dblink_exec('dbname=db1 host=localhost', 'SELECT pg_sleep(100)');
    ^C
    Cancel request sent
    ERROR:  canceling statement due to user request
    

    §

  • ltree拡張の ltree型の列に対してハッシュインデックスの作成が可能になりました。 (Tommy Pavlicek) (17)
  • 同様に、ltree型の列についてハッシュ結合やハッシュ集約も可能になりました。

    §

  • unaccent拡張の文字の置き換えルールに空白文字とクォートを含めることができるようになりました。 (Michael Paquier) (17)
  • (これまで以下の出力が「11/2」となってしまう不都合がありました)
    db1=# SELECT unaccent('1?');
     unaccent
    ----------
     1 1/2
    (1 row)
    

    §

    ・amcheck拡張でユニーク制約違反を検査できるようになりました。

    pg_amcheckコマンドにも、これを行う新たなオプション --checkunique が加わりました。

    §

  • citext拡張のテストから md5関数の使用を除いて OpenSSL の FIPSモードで通るようになりました。 (Peter Eisentraut) (17)
  • §

  • pgcrypto拡張のテストが OpenSSL FIPSモードで通るようになりました。 (Peter Eisentraut) (17)
  • §

  • 使用されていないいくつかの SPI のマクロが削除されました。 (Bharath Rupireddy) (17)
  • §

  • contrib の adminpack拡張が削除されました。 (Daniel Gustafsson) (17)
  • これは開発終了した pgAdmin III で使われていました。

    §

  • ALTER OPERATOR で設定できる最適化の属性が追加されました。 (Tommy Pavlicek) (17)
  • これは拡張の開発に有用と考えられます。

    §

  • 拡張でカスタム待機イベントを定義できるようになりました。 (Masahiro Ikeda) (17)
  • 使用例としては postgres_fdw と dblink でカスタム定義イベントが追加されています。

    § § § §

  • pgbuffercache拡張の関数 pg_buffercache_evict() で共有バッファの追い出しができるようになりました。 (Palak Chaturvedi, Thomas Munro) (17)
  • これはテストに有用と考えられます。

    §

pg_stat_statements
  • pg_stat_statements 内の CALLパラメータをプレースホルダに置き換えるようになりました。 (Sami Imseih) (17)
  • (15.x以前はパラメータが異なると、異なるSQLとして収集)
    CALL p1 (2, 'v2')
    CALL p1 (1, 'v1')
    
    (16.x以降はパラメータをプレースホルダに置き換え、同じSQLとして収集)
    CALL p1 ($1, $2)
    

    §

  • pg_stat_statements 内に保存されたセーブポイント名をプレースホルダに置き換えるようになりました。 (Greg Sabino Mullane) (17)
  • これにより、SAVEPOINT、RELEASE SAVEPOINT、および ROLLBACK TO SAVEPOINTコマンドを記録するのに必要なエントリ数が大幅に削減されます。

    (15.x以前はセーブポイント名が異なると、異なるSQLとして収集)
    SAVEPOINT sp2
    SAVEPOINT sp1
    
    (16.x以降はセーブポイントをプレースホルダに置き換え、同じSQLとして収集)
    SAVEPOINT $1
    

    §

  • pg_stat_statements 内に保存された二相コミットのグローバルトランザクション識別子 (GID) をプレースホルダに置き換えるようになりました。 (Michael Paquier) (17)
  • これにより、PREPARE TRANSACTION、COMMIT PREPARED、および ROLLBACK PREPARED コマンドを記録するのに必要なエントリ数が大幅に削減されます。

    (15.x以前はGIDが異なると、異なるSQLとして収集)
    PREPARE TRANSACTION 'pt2'
    PREPARE TRANSACTION 'pt1'
    
    (16.x以降はGIDをプレースホルダに置き換え、同じSQLとして収集)
    PREPARE TRANSACTION $1
    

    §

  • pg_stat_statements で DEALLOCATE を収集するようになりました。 (Dagfinn Ilmari Mannsåker, Michael Paquier) (17)
  • このとき、プリペアドステートメント名はプレースホルダとして pg_stat_statements 内に保存されます。

    §

  • pg_stat_statements にローカルブロック(一時テーブルとそのインデックス)の読み取り・書き込み総時間を示す統計情報の列が追加されました。 (Nazir Bilal Yavuz) (17)
  • 新しい列は local_blk_read_time と local_blk_write_time です。

    § §

  • pg_stat_statements に JITコンパイル時のタプルデフォーミング(ディスク上のタプルをメモリ上の表現に変換する処理)の詳細が追加されました。 (Dmitry Dolgov) (17)
  • 新しい列は jit_deform_count と jit_deform_time で、それぞれタプルデフォーミングの回数、総時間を示します。

    §

  • pg_stat_statements の統計情報をリセットする関数 pg_stat_statements_reset() に最小・最大値の統計情報(min_plan_time、max_plan_time、min_exec_time、および max_exec_time)のみをリセットする、4番目のオプション引数 (minmax_only) が追加されました。 (Andrei Zubkov) (17)
  • この引数のデフォルトは false です。

    §

  • pg_stat_statements ビューに、エントリ生成時刻と最小・最大値リセット最終時刻を追跡するための、stats_since列と minmax_stats_since列が追加されました。 (Andrei Zubkov) (17)
  • §