他のバージョンの文書 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.3. リリース17.3 #

リリース日: 2025-02-13

このリリースは17.2に対し、様々な不具合を修正したものです。 17メジャーリリースにおける新機能については、E.6を参照してください。

E.3.1. バージョン17.3への移行 #

17.Xからの移行ではダンプ/リストアは不要です。

また、17.1より前のバージョンからアップグレードする場合は、E.5を参照してください。

E.3.2. 変更点 #

  • 無効なエンコードがされた入力文字列に対して、PQescapeStringおよび関連する関数が強化されました。 (Andres Freund, Noah Misch) § § § § § §

    libpqが提供するクォートを付加する関数は、入力のエンコーディングの妥当性を完全にチェックするようになりました。 無効な文字が検出された場合、可能であればエラーを報告します。 エラーを返す規則がない関数については、出力文字列が調整され、サーバは無効なエンコーディングを報告し、介在するプロセスがシングルクォートやバックスラッシュなどに偶然一致するバイト列に騙されないようになりました。

    この変更の目的は、これらの関数のいずれかが細工された入力にクォートを付加するために使用された場合に発生する可能性のあるSQLインジェクション攻撃から保護することです。 結果の文字列がPostgreSQLサーバ(いずれにしてもエンコーディングをチェックする)に直接送信される場合には危険はありませんが、psqlやその他のクライアント側のコードに渡している場合にはリスクがあります。 歴史的に、このようなコードはエンコーディングを慎重に検証しておらず、多くの場合、このような問題を検出した場合に何をすべきかが明確ではありません。

    この修正は、クォート関数、サーバ、および介在する処理で使用される文字エンコーディングが一致する場合にのみ有効です。 信頼できない入力をSQLコマンドに挿入するアプリケーションは、それが正しいことを保証するために特別な注意を払う必要があります。

    これらのlibpq関数を使用せずに信頼できない入力にクォートを付加するアプリケーションとドライバは、同様の問題に直面する可能性があります。 そのようなアプリケーションやドライバはまず、データがサーバが期待するエンコーディングで有効であることを確認する必要があります。

    PostgreSQLプロジェクトは、本問題を報告してくれたStephen Fewerに感謝します。 (CVE-2025-1094)

  • 接続要求に表示されるデータベース名とユーザ名の自動切り捨てが元に戻されました。 (Nathan Bossart) §

    これは、一部のユーザに問題を引き起こしたv17の変更を元に戻すものです。 長すぎる名前は、エンコーディングを意識した方法で切り捨てられるべきですが、現時点ではNAMEDATALEN-1バイトでの単なる切り捨てをする以前の動作に戻るだけです。

  • 接続権限と接続数上限のチェックからパラレルワーカーが除外されました。 (Tom Lane) §

    パラレルワーカーを起動する時にdatallowconnrolcanloginACL_CONNECT権限をチェックせず、代わりに、リーダープロセスが最初に同様のチェックに合格していれば十分であると想定します。 これにより、例えば、リーダーがログイン権限を持たないロールとして実行されている場合に、パラレル問い合わせでの予期しない失敗が回避されます。 同様に、ReservedConnectionsdatconnlimitrolconnlimit制限を 通常のバックエンドに対してのみ適用し、制限にすでに達しているかどうかを確認する際は、通常のバックエンドに対してのみカウントします。 これらの制限は、通常のバックエンドのプロセススロットが過剰な消費を防ぐためのものですが、パラレルワーカーやその他の特殊なプロセスには、独自の制限チェックを備えた独自のプロセススロットプールがあります。

  • LWLock待機イベント名からLock接尾辞が削除されました。 (Bertrand Drouvot) §

    リファクタリングによって、意図せずpg_stat_activityビューにLock接尾辞を持つロック関連の待機イベント名が表示されるようになりましたが、特にpg_wait_eventsとの結合が壊れていました。

  • ScalarArrayOp(= ANY)条件でのbtreeインデックススキャンで一致するすべてのタプルを返せない可能性が修正されました。 (Peter Geoghegan) §

  • ウィンドウ集約で古い結果が再利用される可能性が修正されました。 (David Rowley) §

    run condition最適化と参照渡しの結果型を持つウィンドウ集約で、新しい計算を実行する代わりに、前のパーティションの結果を誤って返す可能性がありました。

  • TransactionXminMyProc->xminと同期させるようになりました。 (Heikki Linnakangas) §

    この見落としにより、プロセスがすでにバキュームされていたデータにアクセスしようとする可能性がありました。 結果として、一時的なcould not access status of transactionエラーが発生することが知られています。

  • 新しく挿入されたカタログエントリをカタログキャッシュリストに追加できない可能性がある競合状態が修正されました。 (Heikki Linnakangas) §

    この結果、例えば、既存のセッション内で新たに作成された関数を使用できなくなる可能性がありました。

  • システムカタログが更新と同時にバキュームされる時にカタログが破損するのが防止されました。 (Noah Misch) § §

  • リレーションの切り捨てが失敗した場合に発生するデータ破損が修正されました。 (Thomas Munro) § § §

    リレーションの切り捨て実行に必要なファイルシステムコールが失敗し、ディスクに不整合な状態が残る可能性があります(例えば、削除されたデータが実質的に復活してしまうなど)。 これを実際に防ぐことはできませんが、そのような失敗をPANICにすることで、WALから切り捨てが試行される直前までをリプレイすることで整合性を回復できます。 これは必ずしも望ましい動作ではありませんが、このような失敗は非常にまれであるため、許容できる解決策であると考えられます。

  • リレーションの切り捨て中にチェックポイントが開始されないようになりました。 (Robert Haas) §

    これにより、チェックポイントが完了する前に変更されたファイルがfsyncされず、直後にオペレーティングシステムがクラッシュした場合にデータ破損の危険性があるという競合状態が回避することができます。

  • データベースの所有者を変更するREASSIGN OWNEDVACUUMが同時に実行された場合に、pg_database.datfrozenxidの更新情報を失う可能性が回避されました。 (Kirill Reshke) §

  • AFTER UPDATEトリガに渡される不正なtg_updatedcolsの値が修正されました。 (Tom Lane) §

    場合によっては、tg_updatedcolsビットマップが、同一トランザクション内の以前のコマンドによって更新された一連の列集合を表すことがあり、トリガが誤った処理を実行する可能性がありました。

    また、tg_updatedcolsビットマップのコピーを過剰に作成することによるメモリの膨張が防止されました。

  • パーティションテーブルを参照する外部キー制約を持つパーティションのデタッチが修正されました。 (Amul Sul) §

    通常、外部キーはパーティションテーブルの最上位レベルで定義されます。 しかし、代わりに外部キーがパーティション上で定義され、別のパーティションテーブルを参照している場合、参照元のパーティションが切り離されると、関連するpg_constraintエントリが誤って更新されていました。 その結果、could not find ON INSERT check triggers of foreign key constraintなどのエラーが発生していました。

  • ドメイン上のNOT NULL制約に対するpg_get_constraintdefのサポートが修正されました。 (Álvaro Herrera) §

  • to_timestampFFn書式コードの誤った処理が修正されました。 (Tom Lane) §

    FFnの直前の整数書式コードは、利用可能な桁数をすべて消費してしまい、FFnのための桁数が何も残らない問題が発生していました。

  • SQL/JSONクエリ関数のPASSING句を逆解析するときは、必要に応じて変数名を二重引用符で囲むようになりました。 (Dean Rasheed) §

  • XMLTABLE()式を逆解析するときは、必要に応じてXML名前空間名を二重引用符で囲むようになりました。 (Dean Rasheed) §

  • pg_hba_file_rules()の出力にldapschemeオプションが含まれるようになりました。 (Laurenz Albe) § §

  • 入力列のデータ型がすべて一致しない場合のソート済UNION操作のプランニングが修正されました。 (David Rowley) §

    このエラーにより、間違ったソート演算子でデータがソートされる可能性があり、その結果は目に見える問題がない場合からコアダンプが発生する場合まで、さまざまな結果が生じる可能性がありました。

  • 列の照合順序が一貫していない場合は、UNION操作をマージしないように修正されました。 (Tom Lane) §

    以前は、UNIONステップを単一のN方向UNION操作にマージするのが安全かどうかを判断する際に、照合順序を無視していました。 これは、非決定論的照合順序が導入される前はおそらく有効でしたが、現在では使用されている照合順序が一意性の定義に影響を与える可能性があるため、もはや有効ではありません。

  • 外部結合の下にある副問い合わせをプルアップした後のwrong varnullingrelsプランナエラーが防止されました。 (Tom Lane) § §

  • 統計情報を検索するときに、NULLになるリレーションのマーカービットを無視するようになりました。 (Richard Guo) §

    この見落としにより、式に関する適切な統計処理が使用できなかったり、corrupt MVNDistinct entryエラーが発生する可能性がありました。

  • パーティション除去ステップにおける式処理の見落としが修正されました。 (Tom Lane) §

    この見落としにより、パーティションテーブルにアクセスする問い合わせで、unrecognized node typeエラーやその他の問題が発生する可能性がありました。

  • slotsyncワーカープロセスに独自のプロセススロットを割り当てるようになりました。 (Tom Lane, Hou Zhijie) §

    slotsyncワーカーの追加時にこの点が見落とされていたため、その結果、そのプロセススロットが通常のバックエンドプロセス用のプールから実質的に外れてしまいました。 この結果、通常のバックエンドプロセスの数がmax_connectionsに近づいた場合に、ワーカーの起動に失敗したり、設定に従って成功するはずだった接続要求が失敗する可能性がありました。

  • dshashテーブルが1ギガバイトを超えて拡張できるようになりました。 (Matthias van de Meent) §

    これにより、invalid DSA memory alloc request sizeなどのエラーが回避されます。 これは、例えば数百万の表を処理するトランザクションで発生する可能性がありました。

  • bringetbitmap()で発生する可能性のある整数オーバーフローが回避されました。 (James Hunter, Evgeniy Gorbanyov) §

    この結果は統計目的でのみ使用されるため、このエラーの影響は主に見た目に関するものでした。

  • SLRUバンク数の計算ミスが修正されました。 (Yura Sokolov) §

    このエラーにより、意図したバンク数よりも少ないバンク数が使用されたため、より多くの競合が発生しましたが、機能上の不具合はありませんでした。

  • すでに設定されているプロセスラッチによって、postmasterがソケットイベントを認識できないことは発生しなくなりました。 (Thomas Munro) §

    バックエンドによるワーカーの起動と終了のワークロードが非常に重いと、postmasterがクライアントからの接続にタイムリーに応答できなくなる可能性がありました。

  • ストリーミングスタンバイサーバがページをまたぐWALレコードを読み込む際の無限ループの発生が防止されました。 (Kyotaro Horiguchi, Alexander Kukushkin) §

    これは、レコードの継続が別のWALソースから読む必要のあるページにある場合に発生していました。

  • プロセスの初期起動中にFATALエラーが意図せずPANICに昇格してしまう問題が修正されました。 (Noah Misch) §

    これにより、PANIC: proc_exit() called in child processというエラーが発生する可能性の低いケースが修正されます。

  • 演算子族メンバの演算子、またはサポートプロシージャが宙に浮いた参照になる可能性があるケースが修正されました。 (Tom Lane) § §

    pg_amopまたはpg_amprocにOIDへの参照が残っている状態でデータ型が削除される場合がありました。 これによって直ちに問題が発生することはありませんが、所有する演算子族を削除しようとすると失敗し、pg_dumpが演算子族をダンプする際に誤った出力を生成することがありました。 この修正により、演算子族クラスの作成と変更に必要な依存関係エントリが追加され、データ型を削除すると依存する演算子族要素も削除されます。 しかし、これは脆弱な既存の演算子族には役立ちませんので、宙に浮いたメンバを持つ演算子族を削除する際の失敗を防ぐための対策がDROP OPERATOR FAMILYに追加されました。

  • ロジカルデコーディングの出力における複数のメモリリークが修正されました。 (Vignesh C, Masahiko Sawada, Boyu Yang) § § §

  • application_nameまたはcluster_name設定を更新するときの小さなメモリリークが修正されました。 (Tofig Aliev) §

  • バックグラウンドプロセスがsynchronized_standby_slotsの新しい値をチェックしようとしたときのクラッシュが回避されました。 (Álvaro Herrera) §

  • wal_skip_threshold条件のテスト中の整数オーバーフローが回避されました。 (Tom Lane) §

    非常に大きなリレーションを作成したトランザクションは、fsyncではなくWALにリレーションをコピーすることで永続性を確保しようと誤って判断し、wal_skip_thresholdの効果が無効になる可能性がありました。 (これは、wal_levelminimalに設定されている場合にのみ問題となります。それ以外の場合は、いずれにしてもWALコピーが必要です。)

  • キャッシュ検索時の安全でない操作順序が修正されました。 (Noah Misch) §

    知られている唯一の影響は、GRANT TABLESPACE時にyou don't own a lock of type ExclusiveLockという通常は無害なWARNINGが表示されることでした。

  • 並列バキュームでのメモリ解放後使用の可能性が回避されました。 (Vallimaharajan G, John Naylor) §

    このバグは標準的なビルドでは影響がないように見えますが、理論的には危険です。

  • 古いARMプラットフォームでJITを使用した場合に発生する可能性があるfailed to resolve nameエラーが修正されました。 (Thomas Munro) §

    これは、gccとclangとの間で-moutline-atomicsのデフォルト設定に一貫性がないために発生する可能性があります。 少なくともDebianとUbuntuは、armv8-aをターゲットとするgccとclangコンパイラを出荷していることが知られていますが、デフォルトのアウトラインアトミックの使用については異なっています。

  • WITH RECURSIVE ... UNIONの問い合わせでのアサーションエラーが修正されました。 (David Rowley) §

  • 集合操作のリーフ問い合わせに集合操作が含まれている場合、ルールの逆解析でのアサーションエラーが回避されました。 (Man Zeng, Tom Lane) §

  • パラレルクエリ起動時のエッジケースでのアサーションエラーが回避されました。 (Tom Lane) §

  • シャットダウンで統計ファイルを書き出すときのアサーションエラーが修正されました。 (Michael Paquier) §

  • 文字列ハッシュコードに関するvalgrindの警告が修正されました。 (John Naylor) §

  • NULLIF()では、読み書き拡張オブジェクトポインタをデータ型の等価関数に渡さないようになりました。 (Tom Lane) §

    読み書き可能なポインタが渡されると、等価関数はオブジェクトを変更または削除する可能性があります。 そのため、NULLIF()の結果としてそのポインタを返すことにした場合、問題が発生する可能性があります。 組み込みの等価関数ではおそらく問題はありませんが、PL/pgSQLでコーディングされた等価関数で失敗を示すのは簡単です。

  • INSERTのデフォルトのNULL値に式の前処理が適用されるようになりました。 (Tom Lane) §

    対象列がドメイン型の場合、プランナは単なるNULL定数だけでなくcoerce-to-domainステップを挿入する必要があり、この式はいくつかの必要な処理ステップを実行していませんでした。 コアデータ型に基づくドメインでの既知の影響はありませんが、理論的には拡張型に基づくドメインでエラーが発生する可能性がありました。

  • すでにデータが含まれているリレーションフォークでバルク書き込みを開始するときのデータ損失が回避されました。 (Matthias van de Meent) §

    既存のデータはすべてゼロで上書きされました。 これはPostgreSQLコアではこのようなことは決しておこなわれませんので、問題になりません。 ただし、一部の拡張ではそうしたいものもあります。

  • サーバプロセスが作成していない共有基数木を反復処理しようとした場合のクラッシュが回避されました。 (Masahiko Sawada) §

    PostgreSQLコアにはこれを実行するコードはありませんが、拡張では実行を希望するかもしれません。

  • PL/Pythonのメモリリークが修復されました。 (Mat Arye, Tom Lane) §

    PLyPlan.executeまたはplpy.cursorを繰り返し使用すると、PL/Python関数の呼び出し中にメモリリークが発生していました。

  • PL/TclがTcl 9でコンパイルできるように修正されました。 (Peter Eisentraut) §

  • ecpgプリプロセッサで、スコープ外の変数を参照するカーソルの誤った処理の可能性が修正されました。 (Tom Lane) §

  • ecpgで、サポートされていないCOPY ... FROM STDINの使用に関するコンパイル時の警告が修正されました。 (Ryo Kanbayashi) §

    以前は、タイプミスのために意図した警告が発行されませんでした。

  • psqlが、SJISでエンコードされたファイルパス名を安全に処理できるように修正されました。 (Tom Lane) §

    SJISのいくつかの2バイト文字では、2バイト目がASCIIのバックスラッシュ(\)に相当します。 これらの文字は、パス名の正規化によって破損していたため、ファイル名にそのような文字が含まれるファイルにアクセスできない問題がありました。

  • psqlCOPY (MERGE INTO)タブ補完機能が追加されました。 (Jian He) §

  • pgbenchpsqlにおけるpqsignal()の間違ったバージョンの使用が修正されました。 (Fujii Masao, Tom Lane) §

    このエラーにより、pgbench-Tオプションやpsql\watchコマンドの使用時に、中断されたシステムコールが期待通りに再開されないため、誤動作が発生する可能性がありました。

  • pgbench内の一部のネストされた\if構造の誤った実行が修正されました。 (Michail Nikolaev) §

    偽の(実行されていない)\if分岐内に現れた\ifコマンドが誤って\elifと同じように扱われていました。

  • pgbenchで、テーブルの初期化中に進行状況メッセージが誤って表示される可能性が修正されました。 (Yushi Ogiwara, Tatsuo Ishii, Fujii Masao) § §

  • pg_controldataが破損したpg_controlファイルに対してより堅牢になりました。 (Ilyasov Ian, Anton Voloshin) §

    pg_controldataはCRCチェックが失敗してもpg_controlの内容を出力しようとするため、無効なフィールド値に対して誤動作しないように注意しなければなりません。 このパッチにより、無効なタイムスタンプと明らかに負のWALセグメントサイズによって引き起こされるいくつかの問題が修正されました。

  • 拡張メンバであるテーブルにIDシーケンスがアタッチされている場合に、pg_dumpで発生する可能性のあるクラッシュが修正されました。 (Tom Lane) §

  • zstd圧縮データを使用したpg_restoreのメモリリークが修正されました。 (Tom Lane) §

    リークは解凍操作ごとに発生していたため、多数のテーブルや大きなオブジェクトを含むダンプで最も顕著になります。

  • Windowsで2ギガバイトを超えるpg_wal.tarファイルを正しく処理できるようにpg_basebackupが修正されました。 (Davinder Singh, Thomas Munro) § §

  • contrib/earthdistanceのSQL言語関数の宣言で、標準SQL関数の本体を使用するようになりました。 (Tom Lane, Ronan Dunklau) §

    この変更により、拡張の作成時にcontrib/cubeへの参照が解決され、検索パスに基づく障害や攻撃のリスクが軽減されます。

    特に、PostgreSQL v17がセキュリティ上の理由から検索パスを制限している生成列のようなコンテキストでの使いやすさが回復されます。 これにより、データベースをv17にアップグレードできないという報告を受けています。 このパッチは、回避策を提供するためにv16に含まれています。earthdistance拡張を事前にこのバージョンにアップデートしておけば、アップグレードは成功するはずです。

  • contrib/pageinspectのSQL宣言と基礎となる共有ライブラリとの間のバージョン不一致を検出するようになりました。 (Tomas Vondra) §

    以前は、このような不一致によりbrin_page_items()の呼び出し時にクラッシュが発生する可能性がありました。 代わりに、拡張のアップデートを推奨するエラーが発生するようになりました。

  • contrib/postgres_fdwでリモート問い合わせをキャンセルしようとした際に、何もおこなわれなかったように見える場合は、キャンセル要求を数回再発行するようになりました。 (Tom Lane) §

    これにより、リモートサーバが処理を開始する前に送信されたばかりの問い合わせをキャンセルしようとする競合状態が修正され、最初のキャンセルリクエストは無視されるようになります。

  • ARM CRC命令にアクセスするために必要なコンパイラスイッチを決定する設定プローブが更新されました。 (Tom Lane) §

    ベースラインCPUターゲットにCRC命令がないARMプラットフォームでは、コンパイラにそのような命令をコンパイルさせるために-marchスイッチを指定する必要があります。 最近のバージョンのgccは、私たちが試していた値を拒否し、ソフトウェアCRCに自動的にフォールバックします。

  • Windows上で古いOpenSSLライブラリをサポートするように、mesonビルドシステムが修正されました。 (Darek Slusarczyk) §

    従来のライブラリ名ssleay32libeay32のサポートが追加されました。

  • mesonを使用したWindowsビルドで、すべてのlibcommon関数とlibpgport関数のエクスポートが確認されるようになりました。 (Vladlen Popolitov, Heikki Linnakangas) § §

    これにより、拡張ビルド時のunresolved external symbolエラーが修正されます。

  • MSVCでOSSPのuuid.hヘッダファイルを正しく検出するようにmeson設定プロセスが修正されました。 (Andrew Dunstan) §

  • mesonでビルドする場合、pgeventbindirではなくpkglibdirにインストールするようになりました。 (Peter Eisentraut) §

    これは、makeベースのビルドシステムと古いMSVCビルドシステムの動作と一致しています。

  • mesonでビルドする場合、sepgsql.sqlshare/extension/ではなくshare/contrib/の下にインストールするようになりました。 (Peter Eisentraut) §

    これは、makeベースのビルドシステムの動作と一致しています。

  • タイムゾーンデータファイルを、パラグアイのサマータイム法の変更とフィリピンの歴史的修正をしたtzdataリリース2025aに更新しました。 (Tom Lane) §