PostgreSQL 18.3 に関する技術情報

このリリースは 18.2 からの修正リリース(2026年 2月 26日リリース)です。
18.X からのアップデートではダンプ、リストアは不要です。
しかしながら、18.2 よりも前のバージョンからアップデートする場合には、18.2のリリース情報も参照してください。

PostgreSQL 18.2 から 18.3 への変更点

18.3, 17.9, 16.13, 15.17, 14.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。

  1. 古いマイナーバージョンで生成された、マルチトランザクションIDの切り詰めを行うWALレコードをリプレイした後にエラーが発生する問題が修正されました。 (Heikki Linnakangas) (18)(17)(16)(15)(14)
  2. 以前のバージョンにおけるマルチトランザクションID周回への対処ロジックに誤りがあったため、「ERROR: could not access status of transaction」といったエラーを伴うWALリプレイ失敗が発生していました。

    この問題が発生する典型的なシナリオとしては、最新のマイナーバージョンのスタンバイサーバが、旧バージョンのプライマリサーバから送られてくるWALをリプレイする場合があります。

    § § § § §

  3. TOASTとして保存されたデータに対してsubstring()関数を適用したときに、無効なエンコーディングであると誤判定される問題が回避されました。 (Noah Misch) (18)(17)(16)(15)(14)
  4. CVE-2026-2006に対する修正が過度に厳格であったため、実際には正しい文字列であっても不完全な文字と判定される可能性がありました。

    § § § § § § § § § § § § § § §

  5. CVE-2026-2007に対する修正の見落としがあり、再修正されました。 (Zsolt Parragi) (18)
  6. pg_trgm拡張のstrict_word_similarity()関数や関連する関数が誤った問合せ結果を返す可能性があり、まれにクラッシュを引き起こすこともありました。ICUロケールにて、いくつかのシングルバイトエンコーディングを使用している場合に、現象発生が確認されています。

    類似度関数への入力に、初期見積もりより多くのトライグラムが含まれていて、内部処理で使われる単語境界情報を保存するための配列を拡張する必要があった場合に、実装の不備がありました。

    §

    UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');

  7. 組み込み関数json_strip_nulls()とjsonb_strip_nulls()の変動性区分が修正されました。 (Andrew Dunstan) (18)
  8. これらの関数はIMMUTABLEと分類されていましたが、バージョン18でのリファクタリングにより誤ってSTABLEと分類されました。この不具合により、インデックス式での使用が妨げられ、クエリ内で不要な評価が繰り返されるおそれがありました。

    本修正により、新しく初期化されたデータベースクラスタ(18.3以降にpg_upgradeされたクラスターを含む)で関数定義が修正されます。ただし、18.0~18.2を使用して作成された既存のクラスタには役立ちません。既存のクラスタでこの間違いを修正する場合に推奨される方法は手動カタログ更新です。その方法はスーパーユーザとして影響を受ける各データベースで以下を実行することです。

    UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');
    

    今後作成されるデータベースにも修正が適用されるようにするには、テンプレートデータベース(template0、template1)でこれを行なってください。

    §

  9. 「LATERAL UNION ALL」を含むサブクエリを外部結合する場合に、サブクエリ内でNULLになる可能性があるかの判定が修正されました。 (Richard Guo) (18)(17)(16)
  10. この不具合により、「NOT NULL」テストが不要とされ「NOT NULL」テストがスキップされることで、誤ったクエリ結果を返す可能性がありました。

    § § §

  11. NOT NULL制約に自動で付けられる名前が、既にユーザが定義した名前と競合する可能性がなくなりました。 (Laurenz Albe) (18)
  12. バージョン18では、NOT NULL制約はpg_constraintに追加されたため、制約名が存在します。これまでは、NOT NULL制約に自動で付けられていた名前が、同じCREATE TABLE文内のユーザ作成の名前と競合して、ユニーク制約違反のエラーが発生していました。

    (エラー発生例)
    db1=# CREATE TABLE t6 (col int NOT NULL,
            CONSTRAINT t6_col_not_null CHECK (col IS NOT NULL));
    ERROR:  duplicate key value violates unique constraint "pg_constraint_conrelid_contypid_conname_index"
    DETAIL:  Key (conrelid, contypid, conname)=(16556, 0, t6_col_not_null) already exists.
    

    §

  13. 関数pg_stat_get_backend_wait_event()とpg_stat_get_backend_wait_event_type()が補助プロセスの情報を返すように修正されました。 (Heikki Linnakangas) (18)(17)(16)(15)(14)
  14. これまでは、これらの関数は補助プロセスに対してNULLを返していましたが、これはpg_stat_activityビューとの一貫性に欠けていました。

    § § § § §

  15. PL/pgSQL関数から返す変数を複合型からドメイン型へのキャストする場合について修正されました。 (Tom Lane) (18)(17)(16)(15)(14)
  16. 変数値がNULLであった場合に「ERROR: cache lookup failed for type 0」エラーが発生することがありました。

    § § § § §

  17. contrib/hstoreのバイナリ入力関数で潜在的にNULLポインタアクセスの可能性があり、修正されました。 (Michael Paquier) (18)(17)(16)(15)(14)
  18. hsore型のレシーブ関数は重複キーを含む入力でクラッシュを起こしていました。PostgreSQLによって生成されたhstoreの値が重複キーを含むことがないため、誤りが見過ごされていました。クラッシュは悪意のデータや壊れたデータで引き起こされます。

    § § § § §