このリリースは 17.6 からの修正リリース(2025年 11月 13日リリース)です。
17.X からのアップデートではダンプ、リストアは不要です。
また、17.6 よりも前のバージョンからアップデートする場合には、17.6のリリース情報も参照してください。
PostgreSQL 17.6 から 17.7 への変更点
18.1, 17.7, 16.11, 15.15, 14.20, 13.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。
- CREATE STATISTICSで、スキーマに対する「CREATE」権限の検査を行うようになりました。 (Jelte Fennema-Nio) (18)(17)(16)(15)(14)(13)
- libpqで、メモリ割り当てサイズ計算での整数オーバーフローを回避するようになりました。 (Jacob Champion) (18)(17)(16)(15)(14)(13)
- JSON_VALUEなどのSQL/JSON関数がCOLLATE式を含むDEFAULT句を持つときの、内部エラー発生が防止されました。 (Jian He) (18)(17)
- グルーピングセットを伴った列指定の無いHAVING句での不正な最適化が回避されました。 (Richard Guo) (18)
- Hash Right Semi Joinでパラレル処理を行なわないようになりました。 (Richard Guo) (18)
- ソートされたAppend(ordered-append)プランの作成で起こりうるゼロ除算が回避されました。 (Richard Guo) (18)
- ソート順のアクセスが可能であるけれどもインデックスオンリースキャンはできないインデックスタイプに対して、プランナでのエラー発生が修正されました。 (Maxime Schoemans) (18)
- Btreeインデックスのクリーンアップ処理で過度なアサートを除去しました。 (Peter Geoghegan) (18)(17)(16)(15)(14)(13)
- パラレルGINインデックスの作成で発生するおそれのあったメモリ不足エラー(「ERROR: out of memory」)や「ERROR: invalid memory alloc request size」エラーを回避するようになりました。 (Tomas Vondra) (18)
- BRINの自動サマライズが必要なインデックス式のスナップショットを確実に提供するようになりました。 (Álvaro Herrera) (18)(17)(16)(15)(14)(13)
- テーブルサイズが2の32乗ページ近くなる場合、BRINインデックススキャンで整数オーバーフローが発生する可能性があり、修正されました。 (Sunil S) (18)(17)(16)(15)(14)(13)
- JITが生成するタプルデフォーミングのコードで、格納データを誤ってゼロ拡張してしまう問題が修正されました。 (David Rowley) (18)(17)(16)(15)(14)(13)
- ハッシュ化されたGROUPING SETSの処理中に、まれにクラッシュする問題が修正されました。 (David Rowley) (18)
- ハッシュ結合において、ハッシュテーブルのサイズ選択ロジックが誤っていた問題が修正されました。 (Tomas Vondra) (18)
- 統計情報を操作する関数について、テーブルを参照する際のロジックが改善されました。 (Nathan Bossart) (18)
- トリガーで使用される結果リレーション情報(ResultRelInfo)のキャッシュ処理に存在した誤ったロジックによるクラッシュが修正されました。 (David Rowley, Amit Langote) (18)(17)(16)(15)
- パーティションテーブルに対してEvalPlanQualが再チェックを行う際にクラッシュする問題が修正されました。 (David Rowley, Amit Langote) (18)
- EvalPlanQual用の代替となるローカルでの結合プランを持たない外部結合またはカスタム結合を、EvalPlanQualが適切に扱えない問題が修正されました。 (Masahiko Sawada, Etsuro Fujita) (18)(17)(16)(15)(14)(13)
- DETACH CONCURRENTLY実行時に、ハッシュパーティションの制約が重複して追加されてしまう問題が修正されました。 (Haiyang Li) (18)(17)(16)(15)(14)
- パーティションキーに生成列が利用できないようになりました。 (Jian He, Ashutosh Bapat) (18)(17)(16)(15)(14)(13)
- COPY ... FROM ... WHERE句で生成列が使用できないようになりました。 (Peter Eisentraut, Jian He) (18)(17)(16)(15)(14)(13)
- 無効とマークされているNOT NULL制約が付いた列を、識別列として設定できないようにされました。 (Jian He) (18)
- 並列VACUUMにおいて、解放済みメモリ使用(use-after-free)が発生する可能性が回避されました。 (Kevin Oommen Anish) (18)(17)
- pg_temp内の統計オブジェクトに対する可視性チェックが修正されました。 (Noah Misch) (18)(17)(16)(15)(14)(13)
- データベース作成のWALリプレイ時に発生していた軽微なメモリリークが修正されました。 (Nathan Bossart) (18)(17)(16)(15)
- pg_stat_replicationビューにおけるレプリケーション遅延の誤った報告が修正されました。 (Fujii Masao) (18)(17)(16)(15)(14)(13)
- 無効なprimary_slot_name設定に関する重複したログメッセージが出力されないようにされました。 (Fujii Masao) (18)(17)(16)(15)(14)(13)
- synchronized_standby_slotsが存在しないレプリケーションスロットを参照している場合の障害が回避されました。 (Shlok Kyal) (18)(17)
- レプリケーションスロットの状態をディスクへ書き込む際に失敗した場合、未完成のスロット状態ファイルが削除されるようにされました。 (Michael Paquier) (18)(17)(16)(15)(14)(13)
- 論理レプリケーションの並列適用ワーカにおけるロックタイムアウトシグナルの誤処理が修正されました。 (Hayato Kuroda) (18)(17)(16)
- ストリーミングWALからアーカイブWALへ切り替える際に、不要なWAL受信プロセスのシャットダウンを回避するよう修正されました。 (Xuneng Zhou) (18)(17)(16)(15)(14)(13)
- pgoutputの論理デコーディング中にエラーが起きた際に、既に解放されたキャッシュメモリにアクセスしてクラッシュする問題が修正されました。 (Vignesh C, Masahiko Sawada) (18)(17)(16)(15)
- ロジカルレプリケーションスロットの不必要に無効化されていたのが修正されました。 (Bertrand Drouvot) (18)(17)(16)
- ロケール設定において、C照合順序の特殊ケースが再度有効化されました。 (Jeff Davis) (18)
- Windows管理者権限の確認処理で失敗した際のメッセージ出力が正しく行われるように修正されました。 (Bryan Green) (18)(17)(16)(15)(14)(13)
- libsanitizer使用時に発生する可能性のあるクラッシュを回避するよう修正されました。 (Emmanuel Sibi, Jacob Champion) (18)(17)(16)
- 64bit Windowsのデバッグビルドで発生していた、誤ったメモリコンテキストチェック警告が修正されました。 (David Rowley) (18)(17)(16)(15)(14)(13)
- PL/pgSQLの代入文でGROUP BY DISTINCTが正しく処理されるように修正されました。 (Tom Lane) (18)(17)(16)(15)(14)
- PL/Python内でSQLエラーを処理する際のメモリリークが修正されました。 (Tom Lane) (18)(17)(16)(15)(14)(13)
- libpqのGSSAPI処理におけるWindows上のソケット関連エラーの扱いが修正されました。 (Ning Wu, Tom Lane) (18)(17)(16)(15)(14)(13)
- 継承子テーブルの列に対する非継承の(子テーブル固有の)NOT NULL制約が、正しくダンプされるよう修正されました。 (Dilip Kumar) (18)(17)
- pg_dumpにおいて外部キー制約の並び順について修正されました。 (Álvaro Herrera) (18)
- pg_dumpおよびpg_restoreにおけるデータ圧縮ロジックについて、各種のエラーが修正されました。 (Daniel Gustafsson, Tom Lane) (18)(17)(16)(15)(14)(13)
- pgbenchで「COPY」操作が開始された場合に正しくエラーを返すようになりました。 (Anthonin Bonnefoy) (18)(17)(16)(15)(14)(13)
- pgbenchにおける複数エラーの報告が修正されました。 (Yugo Nagata) (18)(17)(16)(15)(14)(13)
- pgbenchのパイプラインモードにおいて、エラー処理に関する不正確なアサートが修正されました。 (Yugo Nagata) (18)(17)(16)(15)
- pg_combinebackupでファイルごとのメモリリークが修正されました。 (Tom Lane) (18)(17)
- contrib/pg_buffercacheの関数が確実にキャンセルできるようになりました。 (Satyanarayana Narlapuram, Yuhang Qiu) (18)(17)(16)(15)(14)(13)
- contrib/pg_prewarmで、インデックスの権限チェックが修正されました。 (Ayush Vatsa, Nathan Bossart) (18)(17)(16)(15)(14)(13)
- contrib/pg_stat_statementsで、SQL文のテキスト内で複数の定数が同じ位置に割り当てられた場合にクラッシュする不具合が修正されました。 (Sami Imseih, Dmitry Dolgov) (18)
- contrib/pgstattupleで、すべてゼロのページ、無効なインデックスページについて、より頑健な動作になりました。 (Nitin Motiani) (18)(17)(16)(15)(14)(13)
- Clangコンパイラの仕様に合わせて、読み取りと書き込みのバリアマクロが強化されました。 (Thomas Munro) (18)(17)(16)(15)(14)(13)
- PGXS拡張構築基盤が各国語対応のpoファイルのビルドに対応するように修正されました。 (Ryo Matsumura) (18)(17)(16)(15)(14)(13)
- JSON作成関数(JSON_OBJECT()など)を非STRICTとして正しく処理するようになりました。 (Tender Wang, Richard Guo) (17)(16)
- 「SIMILAR TO」正規表現内の文字クラスの処理の不具合が修正されました。 (Laurenz Albe) (17)(16)(15)(14)(13)
- 集約関数の引数に含まれるサブクエリが、スコープ外のCTEをFROMで参照している場合の解析が修正されました。 (Tom Lane) (17)(16)(15)(14)(13)
- プランナがSubPlanのコストを見積もる際に、稀にエラー「ERROR: no relation entry for relid」が発生する不具合が修正されました。 (Richard Guo) (17)(16)(15)(14)(13)
- プランナがパーティションテーブルを展開する際に解放済みメモリ使用(use-after-free)の脆弱性が生じる可能性があり、修正されました。 (Bernd Reiß) (17)(16)(15)
- 複数のスキャン条件を持つGINインデックススキャンで無限ループに陥る可能性があり、修正されました。 (Tom Lane) (17)(16)(15)(14)(13)
- GINインデックススキャンを割り込みでキャンセルできるようになりました。 (Tom Lane) (17)(16)(15)(14)(13)
- プランノードTID ScanおよびTID Range Scanに、欠けていたEvalPlanQual再チェックが追加されました。 (Sophie Alpert, David Rowley) (17)(16)(15)(14)(13)
- pg_event_trigger_dropped_objects()関数の戻り値のis_temporary列の挙動が修正されました。 (Antoine Violin, Tom Lane) (17)(16)(15)
- ハッシュ化されたサブプラン(hashed SubPlan)でのメモリリークが修正されました。 (Haiyang Li) (17)(16)(15)(14)(13)
- スタンバイサーバの起動プロセスでのSMgrRelationオブジェクトのメモリリーク不具合が修正されました。 (Jingtang Zhang) (17)
- メモリ不足エラー後に統計情報を管理する共有テーブルが破損する不具合が修正されました。 (Mikhail Kot) (17)(16)(15)
- MERGEにおける同時更新の問題が修正されました。 (Yugo Nagata) (17)(16)(15)
- MERGEおよびINSERT ... ON CONFLICT DO UPDATEに不足しているレプリカアイデンティティチェックが追加されました。 (Zhijie Hou) (17)(16)(15)(14)(13)
- パブリッシャがサブスクライバと同一サーバ上にある場合に発生するDROP SUBSCRIPTION実行時のデッドロックが回避されました。 (Dilip Kumar) (17)(16)(15)(14)(13)
- 通常のテーブルと一時テーブルとの間でファイル番号が偶然衝突することによる論理レプリケーションの失敗が回避されました。 (Vignesh C) (17)(16)(15)(14)(13)
- シングルユーザーモードでレプリケーションスロットを解放しようとする際のアサート失敗が回避されました。 (Hayato Kuroda) (17)(16)(15)(14)(13)
- macOSおよびBSDプラットフォームで、既存のセマフォセットとの競合が発生した場合の起動失敗が回避されました。 (Tom Lane) (17)(16)(15)(14)(13)
- libpqのトレース出力関数PQtrace()について、最上位ビットが設定された場合の出力が修正されました。 (Ran Benita) (17)(16)(15)(14)
- pg_dumpでサブスクリプションとイベントトリガのセキュリティラベルがダンプされるようになりました。 (Jian He, Fujii Masao) (17)(16)(15)(14)(13)
- pg_dumpのデフォルトACLと外部キー制約のソートが修正されました。 (Kirill Reshke, Álvaro Herrera) (17)(16)(15)(14)(13)
- pg_dumpで別々にダンプされたドメイン制約のコメントに、適切な依存関係を示すラベルが付与されるようになりました。 (Noah Misch) (17)(16)(15)(14)(13)
- pg_restoreでリストア対象外のパブリケーションおよびサブスクリプションのコメントとセキュリティラベルがスキップされるようになりました。 (Jian He, Fujii Masao) (17)(16)(15)(14)(13)
- LLVMバージョン21以降でビルドが可能なように修正されました。 (Holger Hoffstätte) (17)(16)(15)(14)(13)
- mesonでビルドする場合、makefileビルドと同様に特別な最適化フラグをnumeric.cとchecksum.cに適用するようになりました。 (Nathan Bossart, Jeff Davis) (17)(16)
これまでこの検査が省略されており、テーブル所有者は任意のスキーマに拡張統計情報を作ることができて、予期せぬ名前衝突をもたらすおそれがありました。(CVE-2025-12817)
(バージョンアップ後は最後のuser1によるCREATE STATISTICSはエラーになる) db1=# CREATE SCHEMA scm1; db1=# CREATE TABLE public.tbl1 (id int, c1 text, c2 text); db1=# ALTER TABLE public.tbl1 OWNER TO user1; db1=# \c db1 user1 You are now connected to database "db1" as user "user1". db1=> CREATE STATISTICS scm1.tbl1_c1_c2_stat ON c1, c2 FROM public.tbl1;
libpqのいくつかの個所で検査が欠けていました。巨大な入力に対して整数オーバーフローが起きると小さすぎるバッファ確保となって、バッファ終端を超えた書き出しを引き起こしました。(CVE-2025-12818)
(エラー発生例)
db1=# SELECT JSON_VALUE('{"a":"1","b":"2"}', '$.c' RETURNING text
DEFAULT '0' COLLATE "C" ON EMPTY);
ERROR: unrecognized node type: 31
ここでのグルーピングセットはGROUPING SETS、ROLLUP、CUBEを含みます。また、列指定の無いHAVING句とは「HAVING false」のような指定です。本障害で誤った問い合わせ結果が発生します。
(誤動作例:この場合の正しいSELECT結果は0行です)
db1=# CREATE TABLE t4 (id int, c1 int, c2 int);
db1=# INSERT INTO t4 VALUES (1,1,10), (2,2,20), (3,3,30), (4,4,40);
db1=# SELECT c1, c2, count(*) c FROM t4 GROUP BY CUBE(c1, c2) HAVING false;
c1 | c2 | c
----+----+---
| | 0
(1 row)
この場合、結合で共有されるハッシュテーブルの更新で競合状態が生じるため、信頼できる動作が得られないと判断されました。
この誤りにより、劣ったプランが選択されたり、デバッグ用ビルドであればアサート失敗が発生しました。
本障害で予期せぬエラー「ERROR: no data returned for index-only scan」が発生しました。これは組み込みのインデックスタイプでは発生しませんが、一部の拡張で問題となりました。
インデックススキャンでのアサート失敗が報告されました。
これまでは、VACUUM時の自動サマライズが式インデックスで失敗して、プレースホルダのインデックスタプルが置き去りになって、BRINインデックスが時間とともに肥大化する原因となりました。
自動VACUUMで以下のエラーが発生するケースが報告されました。
ERROR: cannot execute SQL without an outer snapshot or portal
この問題により、無限ループに陥ったり、不要なページを余計にスキャンしてしまう可能性がありました。
JITを使用しない場合はゼロ拡張ではなく符号拡張が行われるため、小さい整数データ型のDatumの表現がJIT使用時と一致しない場合がありました。多くの場合は問題になりませんが、プランノードがMemoizeの場合にエラー「ERROR: could not find memoization table entry」が発生する事例が確認されています。
これにより、ハッシュ結合が必要以上のメモリを消費したり、メモリの割り当てが非効率になることがありました。
テーブルにロックを取得する前に権限チェックが行われるようになりました。対象は以下の関数です。
pg_restore_relation_stats() pg_clear_relation_stats() pg_restore_attribute_stats() pg_clear_attribute_stats()
パーティションとその親テーブルで列構成が物理的に一致していない場合に、クラッシュする可能性がありました。
EvalPlanQualによる再チェックはREAD COMMITTED隔離レベルの問合せで使われる処理です。
本来は、代替プランが用意されていない場合、外部またはカスタムアクセスメソッドを通常どおり呼び出す必要がありますが、それが行われずクラッシュすることがありました。
EvalPlanQualによる再チェックはREAD COMMIMTTED隔離レベルの問合せで使われる処理です。
従来はALTER TABLE DETACH PARTITION CONCURRENTLYは、DETACHされた側のパーティションにパーティション制約のコピーを追加していました。この動作は、ハッシュパーティションの場合、DETACH後には関係がなくなったパーティションテーブルのOIDを保持したままとなるため問題がありました。具体的には、pg_dumpで取得したデータのリストアに失敗したり、パーティションテーブル削除後にDETACHしたテーブルへの操作が失敗するなどの問題が発生しました。
予期せぬ「ERROR: could not open relation with OID 16384」や「ERROR: could not open relation with OID 16990」というエラーの発生が報告されています。
次期メジャーバージョンであるPostgreSQL 19以降では、これらの制約コピーは一切行われないようにする予定ですが、18以前では、影響を最小化するためハッシュパーティションの場合のみ制約のコピーをスキップするよう修正されました。
もともと生成列をパーティションキーに使うことは許可されていませんでしたが、行全体を参照させた場合など一部ケースでチェック漏れがあり、それらも禁止されるようになりました。
これまでは、そのような列を参照しようとすると、不正な動作か分かりにくいエラー「ERROR: unexpected virtual generated column reference」が発生していました。これは、生成列がまだ計算されていない段階でWHEREフィルタが実行されていたためです。
識別列はNOT NULLである必要がありますが、そのチェックがこの特殊なケースを見逃していました。修正後は以下のようにエラーメッセージが表示されるようになりました。
(18.1での実行例) db1=# CREATE TABLE notnull_tbl (a int, b int); db1=# INSERT INTO notnull_tbl VALUES (NULL, 1), (200, 2); db1=# ALTER TABLE notnull_tbl ADD CONSTRAINT nn NOT NULL a NOT VALID; ALTER TABLE db1=# ALTER TABLE notnull_tbl ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY; ERROR: incompatible NOT VALID constraint "nn" on relation "notnull_tbl" HINT: You might need to validate it using ALTER TABLE ... VALIDATE CONSTRAINT.
このバグは通常のビルドでは影響が生じないようですが、理論的には危険となり得るものです。
一時スキーマにある統計オブジェクトは、スキーマ修飾なしでは名前を指定できませんが、pg_statistics_obj_is_visible()はこの点を見落としており、状況に関わらずtrueを返す可能性がありました。その結果、psqlの\dXが誤ってpg_temp内の統計オブジェクトを一覧表示したり、pg_describe_object()などの関数が期待されるようにオブジェクト名をスキーマ修飾できないことがありました。
いずれかのスタンバイサーバのリプレイLSNが進まなくなった場合、write_lagおよびflush_lag列が、最終的に更新されなくなることがありました。
以前は、primary_slot_nameに無効なスロット名が設定された状態で設定ファイルをリロードすると、postmasterだけでなく、すべてのバックエンドプロセスがWARNINGを出力してしまい、大量の重複ログが生成される可能性がありました。
以前は、サーバ起動時に存在しないスロットを指定してもチェックされず、後でパラレルクエリ実行時にエラーとなる可能性がありました。
これまでは、ディスク容量不足などで書き込みに失敗すると、一時ファイルであるstate.tmpが残されてしまいました。これは、その後の状態書き込みをすべて妨げ、手動でのクリーンアップが必要になるという問題を引き起こしていました。
これまでは、同じシグナル番号がワーカのシャットダウンとロックタイムアウトの両方に使用されており、混乱を招いていました。
タイムライン変更中、スタンバイサーバのWALレシーバは新しいWALストリーミングの開始点を待機するために稼働し続ける必要があります。ところが、以前はシャットダウンと再起動を繰り返していたため、pg_stat_wal_receiverのstatus列が正しく出力されないなどのレプリケーション状態を正しく把握できない問題が発生する可能性がありました。
論理デコーディング中にエラーが発生すると、同じセッション内での次回以降の論理デコーディング実行時にクラッシュが起こる可能性がありました。この問題は、pgoutputをpg_logical_slot_get_binary_changes()のようなSQL関数経由で呼び出した場合にのみ発生します。
以前は、スロットが競合状態から非競合状態に移行しても無効化が行われる場合があり、不要な無効化が発生していました。
この修正により、データベース選択前のバックエンド起動初期に共有カタログへアクセスする際にエラーが発生してしまう問題が修正されました。PostgreSQLのコアコードで問題は確認されていませんが、一部の拡張では問題となっていました。
以前は、この処理でクラッシュするか、少なくとも役に立たないメッセージが表示される可能性がありました。ただし、実際にこのようなケースが報告されたことはないため、この問題が発生するのは極めて稀です。
DISTINCTオプションがパーサで記録されず、コマンドが通常のGROUP BYと同じように扱われていました。今回の修正により、DISTINCTが正しく認識されるようになりました。
以前のマイナーリリースで導入された修正によって、セッション存続期間メモリが解放されない問題がありました。今回の修正でメモリリークが回避されるようになりました。
以前は、GSSAPIを使ったデータの暗号化/復号処理で、接続ソケットのエラーを正しく認識できず、Windows上で接続に失敗する場合がありました。今回の修正により、Windows特有のエラー報告に対応し、接続が正しく行われるようになりました。
18より前のバージョンのサーバからのダンプで、そのような制約定義の出力が欠損していました。
これにより、他のオブジェクト種別と同様に、外部キー制約も一貫した順序で出力されるようになりました。これまでは制約名ではなくOID番号の順になっていました。
いくつかの箇所でエラーチェックが欠落または不正確であり、さらに、ビッグエンディアンのハードウェア環境下では移植性の問題が発生することもありました。
この問題は、ディレクトリ形式ダンプ内のTOCファイルを手動で圧縮した場合にのみ発生します。そのため、通常の利用ではほとんど遭遇しないはずです。
pgbenchは仕様としてCOPYに対応していませんが、これまでエラー処理が完備されておらず、無限ループに陥っていました。
これまでは2回連続でPQgetResult呼び出しが失敗した場合、pgbenchが誤ったエラーメッセージを報告する可能性がありました。
テーブル等のオブジェクト数が多いときに影響があります。
これまで一部のコードパスで、割り込みを確認せずに長時間処理が続く可能性がありました。
pg_prewarm()関数は、プリウォーム対象のリレーションに対して「SELECT」権限を必要とします。しかし、インデックス自体にはSQL権限が存在しないため、非スーパーユーザーはインデックスをプリウォームできませんでした。これを解決するために、今後はインデックスが属するテーブルに対する「SELECT」権限を確認するようになりました。
特に「WHERE x IN ($1 /*, ... */)」のようにカンマ区切りの値の列挙を短縮している場合に問題が発生しました。
すべてゼロのページは空き領域として数え、無効なインデックスページ(ページの特殊領域サイズチェックに基づいて判断される)は無視するようになりました。
これまでは、すべてゼロのページは、Btreeインデックスでは空き領域として数え、hashとGiSTインデックスではエラーが発生し、一貫性がありませんでした。また、無効なインデックスページではエラーが発生していました。
Cコンパイラによるメモリアクセスの並べ替えを防ぐために、メモリバリアとして__atomic_thread_fence()関数が利用できると想定されていましたが、Clangでは十分なバリアになりませんでした。
少なくともRISC-V、MIPS、LoongArchのマシンで誤ったコードが生成される可能性がありました。本修正でClangでも問題なく利用できる明示的なコンパイラバリアが追加されました。
これまで「make USE_PGXS=1 update-po」が正しく動作しませんでした。
これらの関数は、1つ以上のnull入力があっても、null以外の結果を返す場合があるので非STRICTです。これまでプランナはこれらの関数をSTRICTであると誤って分類してクエリ変換を行う可能性がありました。そのため、誤った問い合わせ結果が生じる可能性がありました。
「SIMILAR TO」パターンマッチング式からPOSIX形式の正規表現への変換について、直近前バージョンでの修正において特殊なケースについて不具合がありました。
不具合により、開き括弧の直後にエスケープ文字があり、エスケープシーケンスの直後に閉じ括弧がある場合(例:[\w])、閉じ括弧が文字クラスの終了として認識されなくなっていました。
このようなCTE参照は、外側のクエリの列参照のように動作する必要がありますが、それが考慮されておらず、プランナやエグゼキュータで不明瞭なエラーを引き起こしていました。
「ERROR: could not find CTE ...」が発生するケース、クラッシュするケース、アサート失敗するケースが報告されました。また、誤った問い合わせ結果が生じる場合もありました。
発生するケースは、パーティションを展開する際に最後の有効なパーティションが並行する別プロセスから同時に削除(DROP)された場合に限られます。
GINインデックスは一致しないエントリを除くスキャン条件(例えば、tsqueryの「!term」句など)を処理できます。これまで、そのような条件がスキャン条件の配列の先頭にあると、そのような条件と通常の条件が混在するクエリが無限ループになることがありました。
一部のコードパスで長時間割り込みを検査せずに実行される可能性がありました。
この遺漏により、同時UPDATEでctid条件が再評価されない可能性があり、その時に選択されたプランタイプに応じて、UPDATEの振る舞いが変わる可能性がありました。
EvalPlanQual再チェックはREAD COMMITTED隔離レベルの問い合わせにおける内部的な処理です。ctidは現在の物理的なタプル位置をあらわすテーブルのシステム列です。
is_temporaryはオブジェクトが一時オブジェクトであるかどうかを示すものです。一時テーブルに属している列のデフォルト値、トリガ、RLS ポリシーが削除された場合にもtrueを返すように修正されました。このような場合にこれまでfalseを返していました。
タプルのハッシュの計算で使われた全てのメモリが問合せ終了まで残り続けるメモリリークとなっていました。一例として、ハッシュされる値がTOAST展開を要求する時にこの不具合が発生すると考えられます。
長時間実行されるスタンバイサーバでは、不要になったエントリを解放する処理がなかったため、これらのオブジェクトを保持するハッシュテーブルが大幅に肥大化する可能性がありました。
SMgrRelationはファイルハンドルを管理する実装コード内の構造体です。
新しいハッシュテーブルエントリの作成中にメモリ不足エラーが発生すると、壊れたエントリが残され、その後の他のセッションで予期せぬエラーやクラッシュが発生する可能性がありました。
MERGE UPDATE実行時に、対象行に対して複数の同時更新が発生した場合、ロックとリトライの処理が対象タプルの最新バージョンを誤って識別し、誤った結果を返すことがありました。
MERGEで更新または削除動作が必要になり、かつ更新または削除のターゲットテーブルが論理レプリケーションのパブリケーション対象である場合、そのテーブルにREPLICA IDENTITYが定義されている必要があります。これを必須としないと、レプリケーションが静かに中断される可能性があります。同様に、UPDATEオプション付きのINSERTでは、ターゲットテーブルが挿入または更新を発行するならばREPLICA IDENTITYが必須となります。
この発生確率の低い問題は、エラー「ERROR: unexpected duplicate for tablespace X, relfilenode Y」のような一時的なエラーとして発生していました。contrib/autoprewarmも影響を受けていました。この修正の副作用として、SQL関数のpg_filenode_relation()は一時テーブルを無視するようになりました。
既存のセットが要求したセマフォ数より少ない場合、これらのプラットフォームはコードが期待するEEXISTではなくEINVALを返すため、データベースの起動に失敗していました。
charが符号付きとみなされるプラットフォームでは、出力に余計な\xffffffが含まれていました。
これらのオブジェクトタイプのラベルは、これまで除外されていました。
他のオブジェクトタイプと同様に、これらのデータベースオブジェクトタイプの一貫した順序付けが確保されるようになりました。以前は順序が不安定であるほか、アサート失敗する可能性がありました。
§ § § § § § § § § § § § § § § §
以前は制約に対するコメントはドメインに依存させていました。このためpg_restoreを並列に実行した場合、 制約が復元される前にコメントの復元を試行してしまい、リストアが失敗する可能性がありました。
--no-publicationsまたは--no-subscriptionsが指定されている場合、これらのオブジェクトに対するCOMMENTまたはSECURITY LABELコマンドは出力されません。
makefileが長年おこなってきたことと一致させるため、両ファイルで-ftree-vectorizeを使用し、checksum.cでは-funroll-loopsを使用します。