リリース日: 2025-05-08
このリリースは17.4に対し、様々な不具合を修正したものです。 17メジャーリリースにおける新機能については、E.6を参照してください。
17.Xからの移行ではダンプ/リストアは不要です。
しかし、テーブルパーティションに自己参照外部キー制約がある場合は、それらの制約が正しく適用されるように再作成する必要があるかもしれません。 以下の2番目の変更ログの項目を参照してください。
また、BRINブルームインデックスがある場合は、更新後にインデックスを再作成することをお勧めします。 以下の3番目の変更ログの項目を参照してください。
また、17.1より前のバージョンからアップグレードする場合は、E.5を参照してください。
GB18030エンコーディングであると主張される無効なエンコード文字列を検査するとき、1バイトのバッファオーバーリードが回避されました。 (Noah Misch, Andres Freund) § §
可能性は低いですが、不完全なマルチバイト文字がメモリの末尾に現れた場合、SIGSEGVクラッシュが発生する可能性がありました。 これは、サーバでもlibpqを使用するアプリケーションでも発生する可能性がありました。 (CVE-2025-4207)
パーティションテーブルで自己参照の外部キーを正しく扱えるようになりました。 (Álvaro Herrera) §
パーティション作成またはアタッチ時に、制約によって参照されるテーブルが同一のパーティションテーブルである場合、外部キー制約に必要なカタログエントリの作成に失敗しました。 その結果、制約が完全には強制されませんでした。
これを修正するには、制約の作成後にパーティションが作成またはアタッチされている場合、パーティションテーブル上の自己参照外部キーをすべて削除して再作成する必要があります。 違反行がすでに存在する可能性があることに注意してください。 その場合、制約を再作成すると失敗するため、再試行する前にそれらの行を修正する必要があります。
brin_bloom_union()
で圧縮されたBRINサマリをマージする際のデータ損失が回避されました。
(Tomas Vondra)
§
このコードでは、圧縮したものの展開結果が入力オブジェクトと一致しないことを考慮しておらず、その結果、一部のデータがマージされたサマリに追加されず、インデックス検索で行が欠落していました。
この誤りは、BRINブルームインデックスが導入されたv14時点から存在していましたが、当時はこのコードパスに到達することは稀でした。 v17では、パラレルインデックス作成でコードが使用されるようになったため、この誤りが発生する可能性が大幅に高くなりました。
FROM
のビューまたは関数への行全体のテーブル参照を使用するUPDATE
、DELETE
、MERGE
の問い合わせで発生する、予期しない「attribute has wrong type」エラーが修正されました。
(Tom Lane)
§
DO NOTHING
アクションを持つパーティションテーブルに対するMERGE
が修正されました。
(Tender Wang)
§
ある場合には「unknown action in MERGE WHEN clause」エラーが発生して失敗しました。
テーブルにドメインデータ型のGENERATED
列があり、ドメインの制約でNULL値が許可されていない場合に、INSERT
コマンドが失敗しないようになりました。
(Jian He)
§
生成式で完全に正常な結果が生成された場合でも、制約エラーが報告されていました。
WITH
句の中にあるINSERT
/UPDATE
/DELETE
/MERGE
コマンドに付随したWITH
句内に表れる、外側のCTE名への参照を正しく処理するようになりました。
(Tom Lane)
§
パーサは、許可されていない再帰ケースを検出できず、CTEを使用可能な順に並べ替えるときに、そのような参照を考慮していませんでした。
JSONコンストラクタ式のキー内でのキャストの誤った処理が修正されました。 (Amit Langote) §
引数が匿名レコード型の場合array_agg()
の並列化を行わないようになりました。
(Richard Guo, Tom Lane)
§
パラレルワーカーと通信するためのプロトコルは、ワーカーが返す具体的なレコード型の識別をサポートしていません。
入力がint2vector
型またはoidvector
型の場合に、ARRAY(
およびsubquery
)ARRAY[
構文が正常な結果を生成するように修正されました。
(Tom Lane)
§
expression, ...
]
このパッチは、PostgreSQL 9.5以前の動作を復元します。結果はint2vector[]
型またはoidvector[]
型になります。
Ispell辞書のパース中に無効な接辞が誤って報告される可能性が修正されました。 (Jacob Brazeal) §
デフォルトを持つドメイン型の場合を正しく処理するようにALTER TABLE ADD COLUMN
が修正されました。
(Jian He, Tom Lane, Tender Wang)
§
§
ドメイン型にデフォルトがある場合、その型の列を(明示的なDEFAULT
句なしで)追加すると、既存の行にドメインのデフォルト値が設定されず、新しい列はNULLのままになっていました。
外部キー制約のON DELETE SET DEFAULT
またはSET NULL
アクションで重複した列名がある場合の不正動作が修復されました。
(Tom Lane)
§
外部キー制約のプロパティ変更が許可されなかった場合のエラーメッセージが改善されました。 (Álvaro Herrera) §
ON COMMIT DELETE ROWS
とマークされた一時テーブルのrelhassubclass
フラグをリセットするときのエラーが回避されました。
(Noah Misch)
§
XMLSERIALIZE()
のINDENT
オプションで欠落していた逆解析が追加されました。
(Jim Jones)
§
§
以前は、XMLSERIALIZE(... INDENT)
を使用するビューまたはルールがINDENT
句なしでダンプされていたため、リストアの後に誤った結果が発生していました。
FILTER
オプションとORDER BY
(またはDISTINCT
)の両方のオプションを持つ集約関数の引数を早期評価しないようにしました。
(David Rowley)
§
ORDER BY
またはDISTINCT
がある場合は、Aggプランノード内でソートをおこなうのではなく、集約入力値を事前にソートすることを検討します。
しかし、集約入力に失敗する可能性のある式(例えば、入力の除数の一部がゼロになる可能性のある除算)が含まれ、そのような失敗を防ぐためのFILTER
句がある場合、これは問題となります。
事前ソートをおこなうと式の評価がFILTER
テストの前に押し出され、いずれにしても失敗が発生します。
FILTER
があり、入力式が単純なVarまたはConstよりも複雑な場合は、事前ソートをおこなわないことでこれを回避するようになりました。
外部結合が存在する場合のNOT NULL
制約列からの誤った推論が修正されました。
(Richard Guo)
§
場合によっては、条件が外部結合の後に適用されるため冗長ではないにもかかわらず、プランナがIS NOT NULL
問い合わせ条件を破棄していました。
複合値に適用されるIS [NOT] NULL
テストに基づく誤った最適化が回避されました。
(Bruce Momjian)
§
プランナがトップレベルの式内で複数のハッシュ可能なScalarArrayOpExpr部分式を識別できない問題が修正されました。 (David Geier) §
その結果、ハッシュテーブルで処理できる追加の部分式(すなわち、右辺がすべて全て定数のIN
、NOT IN
、= ANY
句)が不必要に非効率的に実行されていました。
低いfillfactor設定値によるテーブルサイズの誤った見積もりが修正されました。 (Tomas Vondra) §
プランナがまだ分析されていないテーブルの行数を推定するとき、テーブルのfillfactor設定を推定に使用しますが、結果を1ページあたり少なくとも1行に制限する処理が省略されていました。 そのためfillfactorの値が低いと、推定値が不当に小さくなる可能性がありました。
ビットマップヒープスキャンにおける「skip fetch」最適化が無効になりました。 (Matthias van de Meent) §
この最適化を使用すると、並行して実行されるバキュームがページをall-visibleとマークした時に、デッドタプルが返される可能性があることが判明しました。
検索キーが多数ある場合のGINインデックス検索起動時のパフォーマンス問題が修正されました。 (Tom Lane, Vinod Sridharan) § §
多数のキーを持つインデックス可能な句(例えば、数万の配列要素を持つjsonbcol?| array[...]
)は、起動までO(N2)時間がかかり、その起動の間でもキャンセルできませんでした。
BRINインデックス演算子クラスでサポートされていないプロシージャを検出し、クラッシュする代わりにエラーを報告するようになりました。 (Álvaro Herrera) §
Appendプランノードの非同期サブプランの待機中に、割り込み(問い合わせキャンセルなどの)に応答するようになりました。 (Heikki Linnakangas) §
以前は、サブプランの1つが準備されるまで何も起こりませんでした。
活動中のWAL送信のI/O統計が、より頻繁に報告されるようになりました。 (Bertrand Drouvot) §
以前は、pg_stat_io
ビューはWAL送信プロセスが終了するまで、そのプロセスによって実行されたI/Oを集計することができませんでした。
今後はそのようなI/Oは、最大1秒遅れで報告されます。
起動直後のsynchronous_standby_names
設定の扱いについて、競合状態が解消されました。
(Melnikov Maksim, Michael Paquier)
§
システム起動後の短時間において、synchronous_standby_names
が有効になっているにもかかわらず、バックエンドが同期コミットを待機しない場合がありました。
問い合わせ内でのio_combine_limit
の変更に対応するようになりました。
(Thomas Munro)
§
scram_iterations
がINT_MAXに設定されている場合に無限ループしないようになりました。
(Kevin K Biju)
§
json_array()
の副問い合わせの二重変換によるクラッシュの可能性が回避されました。
(Tom Lane)
§
pg_strtof()
がNULLのendptrでクラッシュしないように修正されました。
(Alexander Lakhin, Tom Lane)
§
特定のGUC割り当てでメモリ不足になった後に発生するクラッシュが回避されました。 (Daniel Gustafsson) §
Snowball語幹処理でメモリ不足が発生したときのクラッシュが回避されました。 (Maksim Korotkov) §
実行計画作成中にSpecialJoinInfo構造体を過剰に解放した後に発生するクラッシュが修正されました。 (Richard Guo) §
これにより、パーティション同士の結合が有効な場合、実行計画作成中にクラッシュが発生していました。
無効化されたレプリケーションスロットのコピーが禁止されました。 (Shlok Kyal) §
これにより、無効なスロットがすでに削除されたWALを指している場合に発生するトラブルを防ぐことができます。
ホットスタンバイモードではないスタンバイサーバ上での論理レプリケーションスロットのリストアが禁止されました。 (Masahiko Sawada) §
これにより、wal_level
が低すぎる場合でも、昇格後もスロットが有効なままになるシナリオが防止されます。
ロジカルデコーディングの「fast forward」モードでカタログのxminが過度に進むのが防止されました。 (Zhijie Hou) §
この間違いにより、削除されたカタログエントリが、WAL読み取りプロセスでまだ必要になる可能性があるにもかかわらず、バキュームされる可能性がありました。
強力なロックを取得しないDDL操作が、論理的にレプリケートされるテーブルに影響を与える場合のデータ損失が回避されました。 (Shlok Kyal, Hayato Kuroda) § §
DDLコマンドによって発生したカタログの変更がWALデコード処理に反映されなかったため、古いカタログデータを使用して後続の変更をデコードできてしまった結果、データ破損の可能性がありました。
applyワーカーでエラーが発生し、そのエラーが捕捉されワーカーが終了しない場合に、レプリケーションオリジンが誤ってリセットされるのが防止されました。 (Hayato Kuroda) §
この間違いにより、重複データが適用される可能性がありました。
サブスクライバーのパーティションテーブルにBRINインデックスがある場合に論理レプリケーションで発生するクラッシュが修正されました。 (Tom Lane) §
論理レプリケーションのインデックス検索で重複したスナップショットの作成を回避するようになりました。 (Heikki Linnakangas) § §
オリジンが一致しないサブスクリプションの検知が改善されました。 (Hou Zhijie, Shlok Kyal) §
サブスクリプションの作成では、サブスクライブされたテーブルが他のパブリケーションでもフォローされている場合、重複データが受信される可能性があるため警告が表示されます。 今回の変更により、パーティションの親テーブルまたは子テーブルが別のパブリケーションを通してフォローされている場合も検出できるようにロジックが改善されました。
不適切なリカバリータイムラインの選択に関するエラーメッセージでの誤ったチェックポイント詳細が修正されました。 (David Steele) §
要求されたリカバリタイムラインに到達できない場合、報告されるチェックポイントとタイムラインは、存在する場合はbackup_labelから読み込まれた値である必要があります。 このメッセージは、以前にpg_controlファイルからの値を報告していましたが、これはbackup_labelのないpg_controlファイルからリカバリする場合は正しいのですが、backup_labelがある場合は正しくありません。
smgropen()
内の処理順序が修正されました。
(Andres Freund)
§
smgr_openコールバックを呼び出す前にSMgrRelationオブジェクトが完全に初期化されていることを確認するようになりました。これによりコールバックが失敗した場合に適切にクリーンアップできるようになりました。
pgstat_report_stat()
の誤ったアサーションが削除されました。
(Michael Paquier)
§
gistFindCorrectParent()
の厳密すぎるアサーションが修正されました。
(Heikki Linnakangas)
§
maintenance_work_mem
の値が非常に小さい場合、並列バキュームでのアサーションエラーが回避されるようになりました。
(Masahiko Sawada)
§
プライマリの再起動時にスタンバイサーバで稀に発生するアサーションエラーが修正されました。 (Heikki Linnakangas) §
PL/pgSQLで、単純なSELECT
問い合わせでスクロール可能なカーソルが定義されている場合の「unexpected plan node type」エラーが回避されました。
(Andrei Lepikhov)
§
expression
pg_dumpの--clean
モードで個々のインデックスパーティションを削除しないようになりました。
(Jian He)
§
サーバはこのようなDROP
コマンドを拒否します。
パーティションは、親テーブルまたはパーティションインデックスのいずれかの後続のDROP
でいずれにしても削除されるため、実際には何の影響もありません。
ただし、試行されたDROPに対して報告されたエラーは、--single-transaction
モードでリストアするときに問題を引き起こしていました。
pg_dumpallで、pg_auth_members
に無効なロールのOIDが含まれている場合、無効なロールに対するGRANT
コマンドが出力されないようになりました。
(Tom Lane)
§
代わりに、警告を出力してエントリをスキップします。
これにより、GRANT
とDROP ROLE
の間の競合状態の結果として過去のバージョンで発生するカタログの破損にうまく対処されます。
pg_amcheckとpg_upgradeでは、libpqによって作成された割り当てを解放するために正しい関数を使用するようになりました。 (Michael Paquier, Ranier Vilela) § § §
これらの見落としにより、非デバッグビルドの呼び出し元アプリケーションで使用されるデバッグビルドのlibpqのような、特定のWindowsビルド構成でクラッシュが発生する可能性がありました。
reindexdbの並列再インデックス操作のスケジューリングが修正されました。 (Alexander Korotkov) §
元のコーディングでは、指定された並列度を達成できませんでした。
contrib/pageinspect
のheap_page_items()
において、破損した入力データによるクラッシュが回避されました。
(Dmitry Kovalenko)
§
contrib/pg_freespacemap
のpg_freespacemap()
でのアサーションエラーが回避されました。
(Tender Wang)
§
ビューのようなストレージを持たないリレーションにpg_freespacemap()
を適用すると、アサート無しのビルドでは問題がなかったにもかかわらず、アサーションエラーが発生していました。
この問題を回避するためのエラーチェックが追加されました。
contrib/postgres_fdw
で、副問い合わせからの制限条件を引き出さないようになりました。
(Alexander Pyhalov)
§
この修正により、まれに発生する「unexpected expression in subquery output」エラーが回避されます。
システムインクルードディレクトリに古いバージョンのlibpq_fe.h
が存在する場合のビルド失敗が修正されました。
(Tom Lane)
§
macOS 15.4でのビルド失敗が修正されました。 (Tom Lane, Peter Eisentraut) §
このmacOSアップデートにより、strchrnul()
の設定プローブが壊れてしまいました。
読み取りストリームのバッファ単位データのvalgrindラベル付けが修正されました。 (Thomas Munro) §
これはPostgreSQLのリリース版のコアコードには影響しませんが、バッファ単位のデータ機能を使用する拡張が、valgrindでテスト中に誤ったエラーが発生する可能性がありました。
文字列ハッシュコードに関するvalgrindの警告が回避されました。 (John Naylor) §
タイムゾーンデータファイルをチリの夏時間法の変更に加え、イランの歴史的修正に対応するためtzdataリリース2025bに更新しました。 (Tom Lane) §
チリのアイセン州が年間を通じてUTC-03に変更されてAmerica/Santiagoとの差異が生じるため、新しいタイムゾーンAmerica/Coyhaiqueが追加されました。