リリース日: 2025-11-13
このリリースは18.0に対し、様々な不具合を修正したものです。 18メジャーリリースにおける新機能については、E.4を参照してください。
18.Xからの移行ではダンプ/リストアは不要です。
CREATE STATISTICSでスキーマに対するCREATE権限を確認するようになりました。
(Jelte Fennema-Nio)
§
この省略により、テーブル所有者は任意のスキーマで統計情報を作成できるようになり、予期せぬ名前の競合が発生する可能性がありました。
PostgreSQLプロジェクトは、本問題を報告してくれたJelte Fennema-Nioに感謝します。 (CVE-2025-12817)
libpq内の割り当てサイズ計算における整数オーバーフローが回避されました。 (Jacob Champion) §
libpqの複数の箇所で、メモリ割り当てに必要なサイズの計算が十分に注意されていませんでした。 十分な大きさの入力は整数のオーバーフローを引き起こし、その結果、バッファサイズが不足して、バッファの終端を超えて書き込みが行なわれる可能性がありました。
PostgreSQLプロジェクトは、本問題を報告してくれたPositive TechnologiesのAleksey Solovevに感謝します。 (CVE-2025-12818)
JSON_VALUEなどのSQL/JSON関数にCOLLATE式を含むDEFAULT句がある場合に発生する「unrecognized node type」エラーが防止されました。
(Jian He)
§
§
グループ化セットを使用した変数を含まないHAVING句の誤った最適化が回避されました。
(Richard Guo)
§
§
Hash Right Semi Joinでは並列処理を使用しないようになりました。 (Richard Guo) §
結合の共有ハッシュテーブルの更新時に競合状態が発生するため、このケースでは信頼性を持った動作をしません。
順序付き追加(ordered-append)プランの作成時に発生する可能性のあるゼロ除算が回避されました。 (Richard Guo) §
この誤りにより、本来選択されるべきではない実行計画を誤って最もコストの低いパスとして選択したり、またはデバッグビルドでアサーションエラーが発生する可能性がありました。
順次アクセスはできるがインデックスオンリースキャンはできないインデックスタイプでプランナが失敗する問題が修正されました。 (Maxime Schoemans) §
この見落としにより、「no data returned for index-only scan」といったエラーが発生していました。 この問題は組み込みのインデックスタイプでは発生しませんが、一部の拡張で発生していました。
btreeインデックスのクリーンアップで誤ったアサーションが削除されました。 (Peter Geoghegan) §
並列GINインデックス構築中に発生する可能性のあるメモリ不足または「invalid memory alloc request size」エラーの発生が回避されました。 (Tomas Vondra) §
BRINの自動サマライズが、必要なインデックス式に対してスナップショットを提供するようになりました。 (Álvaro Herrera) § §
以前は、このようなインデックスでは自動サマライズが失敗し、プレースホルダインデックスタプルが残ってしまうため、時間の経過とともにインデックスが肥大化していました。
テーブルが232ページに近い場合、BRINインデックススキャンにおける整数オーバーフローの危険性が修正されました。 (Sunil S) §
この見落としにより、無限ループが発生したり、不要なテーブルページがスキャンされる可能性がありました。
JIT生成のタプル変換コードにおける格納値の誤ったゼロ拡張が修正されました。 (David Rowley) §
JITを使用しない場合、同等のコードはゼロ拡張ではなく符号拡張をおこなうため、小さな整数データ型のDatum表現が異なります。 この不整合はほとんどの場合に隠蔽されていましたが、Memoizeプランノードを使用時に「could not find memoization table entry」エラーが発生することが知られており、他にも症状が発生する可能性がありました。
ハッシュ化されたGROUPING SETS問い合わせを処理する際に稀に発生するクラッシュが修正されました。
(David Rowley)
§
ハッシュ結合におけるハッシュテーブルサイズ選択ロジックの不具合が修正されました。 (Tomas Vondra) §
ハッシュ結合では、意図したよりも多くのメモリを使用したり、メモリを効率的に分割できなかったりすることがありました。
統計情報操作関数におけるリレーション検索ロジックが改善されました。 (Nathan Bossart) § §
対象リレーションのロック取得後ではなく取得前に権限チェックを行うようにpg_restore_relation_stats()、pg_clear_relation_stats()、pg_restore_attribute_stats()、pg_clear_attribute_stats()が修正されました。
トリガの結果リレーション情報のキャッシュ処理における誤ったロジックが修正されました。 (David Rowley, Amit Langote) §
パーティションの列セットが親パーティションテーブルの列セットと物理的に同一でない場合、この見落としによりクラッシュが発生する可能性がありました。
パーティションテーブルでのEvalPlanQualの再チェック中に発生するクラッシュが修正されました。 (David Rowley, Amit Langote) §
EvalPlanQual用に代替のローカル結合プランが用意されていない外部テーブル結合またはカスタム結合のEvalPlanQual処理が修正されました。 (Masahiko Sawada, Etsuro Fujita) §
このような場合、外部またはカスタムアクセスメソッドが通常どおり呼び出されるべきですが、実際には呼び出されず、通常はクラッシュが発生していました。
DETACH CONCURRENTLY実行中のハッシュパーティション制約の重複が回避されました。
(Haiyang Li)
§
ALTER TABLE DETACH PARTITION CONCURRENTLYは、パーティション制約のコピーを現在デタッチされているパーティションに追加するように記述されていました。
これは誤った動作でした。非同時実行のDETACHではそのような処理を行わないのも一因ですが、ハッシュパーティションの場合、制約式に親テーブルのOIDへの参照が含まれていることが主な原因です。
これは、ダンプ/リストア時、またはDETACH後に親テーブルが削除された場合に問題が発生します。
v19以降では、このようなコピーされた制約は一切作成されなくなります。
リリース済みのブランチでは、予期せぬ結果のリスクを最小限に抑えるために、コピーされた制約の追加はハッシュパーティション用の制約のみスキップされます。
パーティションキーで生成列の使用が禁止されました。 (Jian He, Ashutosh Bapat) §
これはすでに禁止されていましたが、行全体の参照で列参照が暗黙的である場合など、一部のケースでチェックが抜けていました。
COPY ... FROM ... WHERE句で生成列の使用が禁止されました。
(Peter Eisentraut, Jian He)
§
以前は、生成列はWHEREフィルタリングが実行される時点ではまだ計算されていないため、このような列を参照しようとすると、不正な動作が発生したりわかりにくいエラーメッセージが表示されたりしていました。
列にNOT NULL制約があるものの、その制約が無効としてマークされている場合、その列を識別列として設定できないようになりました。 (Jian He) §
識別列はNOT NULLである必要がありますが、そのチェックではこのエッジケースが考慮されていませんでした。
並列バキュームにおける潜在的なメモリ解放後使用が回避されました。 (Kevin Oommen Anish) §
このバグは標準的なビルドでは影響がないように見えますが、理論的には危険でした。
pg_temp内の統計オブジェクトの可視性チェックが修正されました。
(Noah Misch)
§
一時スキーマにある統計オブジェクトは、スキーマ修飾なしでは名前を付けることはできませんが、pg_statistics_obj_is_visible()はこの注意書きを見落とし、いずれの場合でも「true」を返す可能性がありました。
その結果、pg_describe_object()などの関数は、オブジェクト名を期待通りにスキーマ修飾できない場合がありました。
データベース作成のWALリプレイ中に発生する軽微なメモリリークが修正されました。 (Nathan Bossart) §
pg_stat_replicationビューにおけるレプリケーション遅延の誤った報告が修正されました。
(Fujii Masao)
§
いずれかのスタンバイサーバのリプレイLSNの進捗が停止した場合、write_lag列とflush_lag列の更新が最終的に停止していました。
無効なprimary_slot_name設定に関する重複したログメッセージが回避されました。
(Fujii Masao)
§
synchronized_standby_slotsが存在しないレプリケーションスロットを参照する場合の障害が回避されました。
(Shlok Kyal)
§
レプリケーションスロットの状態をディスクに書き込めなかった場合、未完了のスロット状態ファイルが削除されるようになりました。 (Michael Paquier) §
以前は、ディスク容量不足などの障害が発生すると、一時的なstate.tmpファイルが残っていました。
これは、それ以降の状態の書き込み試行をすべてブロックしてしまい、クリーンアップのために手動での介入が必要になるため、問題がありました。
論理レプリケーションの並列適用ワーカーにおけるロックタイムアウトシグナルの誤った処理が修正されました。 (Hayato Kuroda) §
ワーカーのシャットダウンとロックタイムアウトの両方に同じシグナル番号が使用されていたため、混乱が生じていました。
ストリーミングWALソースからアーカイブWALソースに切り替える際に、不要なWALレシーバのシャットダウンが回避されました。 (Xuneng Zhou) §
タイムライン変更の間、スタンバイサーバのWALレシーバは、新しいWALストリーミング開始点を待機しながら稼働状態を維持する必要があります。 実際にはWALレシーバは繰り返しシャットダウンしてすぐに再起動するため、ステータス監視コードが混乱する可能性がありました。
pgoutputロジカルデコーディングプラグインによって管理されるリレーション同期キャッシュにおける解放後使用の問題が修正されました。 (Vignesh C, Masahiko Sawada) §
ロジカルデコーディング中のエラーにより、同一セッション内の後続のロジカルデコーディング試行時にクラッシュが発生する可能性がありました。 この問題は、pgoutputがSQL関数経由で呼び出された場合にのみ発生します。
論理レプリケーションスロットの不必要な無効化が回避されました。 (Bertrand Drouvot) §
ロケール設定において、C照合順序の特殊ケースが再確立されました。
(Jeff Davis)
§
これにより、データベースが選択される前のバックエンド起動初期段階における共有カタログへのアクセスが失敗していた問題が修正されます。 PostgreSQLのコアコードに問題は確認されていませんが、一部の拡張で不具合が発生していました。
ユーザがWindowsの管理者権限を持っているかどうかの確認に失敗した場合のメッセージが正しく出力されない問題が修正されました。 (Bryan Green) §
このコードはクラッシュするか、少なくとも無意味な文字列を表示していました。 しかし、そのような事例は報告されておらず、これらのシステムコールの失敗は極めて稀であることを示しています。
特定のlibsanitizerオプションを使用してPostgreSQLをテストしようとした際のクラッシュが回避されました。 (Emmanuel Sibi, Jacob Champion) §
64ビットWindowsのデバッグビルドにおける誤ったメモリコンテキストチェックの警告が修正されました。 (David Rowley) §
PL/pgSQLの代入文におけるGROUP BY DISTINCTが正しく処理されるようになりました。
(Tom Lane)
§
パーサは、このコンテキストでDISTINCTオプションを記録できなかったため、コマンドは単純なGROUP BYであるかのように動作していました。
PL/Python内でSQLエラーを処理する際のメモリリークが回避されました。 (Tom Lane) §
これにより、以前のマイナーリリースで導入されたセッション存続期間中のメモリリークが修正されます。
WindowsにおけるlibpqのGSSAPIロジック内でのソケット関連エラーの処理が修正されました。 (Ning Wu, Tom Lane) §
GSSAPIを使用した送信データの暗号化/復号コードは、Windowsが接続ソケットのエラー状態を他のプラットフォームとは異なる方法で報告するため、接続ソケットのエラー状態を正しく認識していませんでした。 これにより、Windowsではこのような接続を確立できませんでした。
継承されたテーブルの列に対する非継承のNOT NULL制約のダンプ処理が修正されました。 (Dilip Kumar) §
pg_dumpはv18より前のサーバからダンプするときに、このような制約を保持できませんでした。
pg_dumpの外部キー制約のソートが修正されました。 (Álvaro Herrera) §
他のオブジェクトタイプで既に行われているように、これらのデータベースオブジェクトの順序の一貫性が確保されます。
pg_dumpおよびpg_restoreのデータ圧縮ロジックにおける様々なエラーが修正されました。 (Daniel Gustafsson, Tom Lane) § § §
複数の箇所でエラーチェックが欠落または間違っていたり、ビッグエンディアンハードウェアで顕在化する移植性の問題もありました。 このコードはディレクトリ形式のダンプ内の圧縮されたTOCファイルを読み取りにのみ使用されるため、これらの問題は見落とされていました。 pg_dumpはこのようなダンプを生成しません。この問題が発生するのは、事後にTOCファイルを手動で圧縮した場合のみです。これはサポートされている方法ですが、非常にまれです。
COPY操作が開始された場合にpgbenchが明確にエラーを返すように修正されました。
(Anthonin Bonnefoy)
§
pgbenchはこのケースをサポートするつもりはありませんが、以前は無限ループに陥っていました。
pgbenchが複数のエラーを報告する問題が修正されました。 (Yugo Nagata) §
連続する2回のPQgetResult呼び出しが両方とも失敗した場合、pgbenchは誤ったエラーメッセージを報告する可能性がありました。
pgbenchのパイプラインモードでのエラーに関する誤ったアサーションが修正されました。 (Yugo Nagata) §
pg_combinebackupでのファイルごとのメモリリークが修正されました。 (Tom Lane) §
contrib/pg_buffercache関数が確実にキャンセルできるようになりました。
(Satyanarayana Narlapuram, Yuhang Qiu)
§
§
一部のコードパスでは、割り込みを確認せずに長時間実行される可能性がありました。
contrib/pg_prewarmのインデックスに関する権限チェックが修正されました。
(Ayush Vatsa, Nathan Bossart)
§
§
pg_prewarm()はプレウォーム対象のリレーションに対するSELECT権限を必要とします。
しかし、インデックスにはそれ自身のSQL権限がないため、スーパーユーザ以外のユーザがインデックスをプレウォームできない結果になりました。
代わりに、インデックスが属するテーブルに対するSELECT権限のチェックに変更されました。
contrib/pg_stat_statementsにおいて、SQL文のテキスト内で2つ以上の定数が同じ場所にあるとマークされている場合に発生するクラッシュが回避されました。
(Sami Imseih, Dmitry Dolgov)
§
contrib/pgstattupleが空または無効なインデックスページに対してより堅牢になりました。
(Nitin Motiani)
§
すべてゼロのページを空き領域としてカウントし、ページの特別領域サイズチェックで無効と判断されたページは無視します。 btreeインデックスのコードはすでに全ゼロページを空き領域としてカウントしていましたが、ハッシュとGiSTコードはエラーが発生し、ユーザフレンドリーではないことが判明しました。 同様に、3つのケースすべてにおいて、エラーを発生するのではなく、破損したページを無視するようになりました。
Clangの要求を満たすように読み書きバリアマクロが強化されました。 (Thomas Munro) §
__atomic_thread_fence()がCコンパイラによるメモリアクセスの順序変更を防ぐのに十分なバリアであると想定しましたが、Clangではこれが成立せず、少なくともRISC-V、MIPS、LoongArchマシン向けに誤ったコードが生成される可能性がありました。
これを修正するため、明示的なコンパイラバリアが追加されました。
拡張用のNLS poファイルのビルドをサポートするようにPGXSビルドインフラが修正されました。
(Ryo Matsumura)
§