
このリリースは 13.16 からの修正リリース(2024年 11月 14日リリース)です。
13.X からのアップデートではダンプ、リストアは不要です。
ただし、13.14 よりも前のバージョンからアップデートする場合には、13.14のリリース情報も参照してください。
PostgreSQL 13.16 から 13.17 への変更点
17.1、16.5、15.9、14.14、13.17、12.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。
- サブクエリなどトップレベル以外でのテーブル参照時に行単位セキュリティのポリシーが設定されている場合、クエリを実行したユーザの権限を無視して実行計画が不適切に使い回される可能性があり、修正されました。(Nathan Bossart) (17)(16)(15)(14)(13)(12)
- SSL、GSS のネゴシエーション中に libpq が受け取ったエラーメッセージを破棄するように修正されました。(Jacob Champion) (17)(16)(15)(14)(13)(12)
- SET SESSION AUTHORIZATION と SET ROLE の間の意図しない相互作用が修正されました。(Tom Lane) (17)(16)(15)(14)(13)(12)
- 「信頼されたPL/Perl (plperl)」のコードが環境変数を変更できないよう修正されました。(Tom Lane) (17)(16)(15)(14)(13)(12)
- ATTACH/DETACH PARTIION を実行する際に、外部キー制約に関するカタログの更新が正しく行われるよう修正されました。 (Jehan-Guillaume de Rorthais, Tender Wang, Alvaro Herrera) (17)(16)(15)(14)(13)
- LC_COLLATE が LC_CTYPE と異なる場合の C ロケールの判定が修正されました。 (Jeff Davis) (17)
- キー列の問い合わせの照合順序がパーティションキーの照合順序と一致しない場合は、パーティション同士の結合やグループ化を使用しないようになりました。 (Jian He, Webbo Han) (17)(16)(15)(14)(13)(12)
- NOT NULL 列の IS NULL 検査を FALSE 定数に変換した後のプランナの障害が回避されました。 (Richard Guo) (17)
- 引数に特定の配列関連の構造が含まれる SQL 関数をインライン化する際にプランナがクラッシュする可能性が回避されました。 (Tom Lane, Nathan Bossart) (17)
- MERGE ... WHEN NOT MATCHED BY SOURCE アクションの誤った応答、または、「ERROR: wrong varnullingrels ...」が発生する可能性があり、修正されました。 (Dean Rasheed) (17)
- UNION ALL メンバーの問い合わせ出力をソートする必要があり、ソート列が式である場合に発生する可能性があった「ERROR: could not find pathkey item to sort」エラーが修正されました。 (Andrei Lepikhov, Tom Lane) (17)(16)(15)(14)(13)
- B-tree の ScalarArrayOp を使うインデックススキャンでの稀な不具合が修正されました。 (Peter Geoghegan) (17)
- 問い合わせが「DO INSTEAD NOTIFY」の RULE によって書き換えられた場合に発生する「COPY (query) TO ...」でのアサート失敗や紛らわしいエラーメッセージ(「ERROR: COPY query must have a RETURNING clause」)が修正されました。 (Tender Wang, Tom Lane) (17)(16)(15)(14)(13)(12)
- COPY の FORCE_NOT_NULL および FORCE_NULL オプションの検証が修正されました。 (Joel Jacobson) (17)
- json_objectagg() 呼び出しに VOLATILE 関数が含まれている場合に発生するバックエンドプロセスのクラッシュが修正されました。 (Amit Langote) (17)(16)
- 並列ハッシュ結合中の偏ったデータの検出が修正されました。 (Thomas Munro) (17)(16)(15)(14)(13)(12)
- ALTER DATABASE SET を使用して、default_text_search_config などのサーチパスに基づく検索を必要とする設定パラメータを指定した時に発生していたクラッシュが、回避されました。 (Jeff Davis) (17)
- パーティションテーブルに新しいインデックスを作成するときに、opclasses と照合順序の繰り返し検索が回避されました。 (Tom Lane) (17)
- パーティションテーブルから、CREATE TABLE ... USING で指定された非組み込みアクセスメソッドへの、欠落した依存関係が追加されました。 (Michael Paquier) (17)
- 非 ASCII 文字を含むロケール名を許可しないようになりました。 (Thomas Munro) (17)(16)
- serializable 分離レベルのトランザクションをコミットする際の競合状態が修正されました。 (Heikki Linnakangas) (17)(16)(15)(14)(13)(12)
- 2相コミットの状態を記録したファイルが残存してしまう COMMIT PREPARED の競合状態が修正されました。 (wuchengwen) (17)(16)(15)(14)(13)(12)
- VACUUM FULL 中に無効なトーストインデックスをスキップした後の無効なメモリアクセスが回避されるようになりました。 (Tender Wang) (17)(16)(15)(14)(13)(12)
- データを直接書き換える形で行われたカタログの更新が失われないよう修正されました。 (Tender Wang) (17)(16)(15)(14)(13)(12)
- リカバリの終了時にカタログキャッシュがリセットされるようになりました。 (Noah Misch) (17)(16)(15)(14)(13)(12)
- 割り込みを保留している間はパラレルクエリの使用を避けるようになりました。 (Francesco Degrassi, Noah Misch, Tom Lane) (17)(16)(15)(14)(13)(12)
- pg_cursors ビューに、まだ設定が完了していないポータルは含めないようになりました。 (Tom Lane) (17)(16)(15)(14)(13)(12)
- 列のデフォルト値の挿入を含むトランザクションをデコードするときに、「ERROR: unexpected table_index_fetch_tuple call during logical decoding」というエラーが発生しないよう修正されました。 (Takeshi Ideriha, Hou Zhijie) (17)(16)(15)(14)
- ロジカルデコーティングのメモリ消費量が削減されました。 (Masahiko Sawada) (17)(16)(15)(14)(13)(12)
- CALL が PL/pgSQL の EXCEPTION ブロック内にある時に、CALLステートメントの引数リストから呼び出される変動性分類がstableの関数の動作が修正されました。 (Tom Lane) (17)(16)(15)(14)(13)(12)
- libpq の「keepalives」接続オプションを他の整数値オプションと同じ方法で解析するようになりました。 (Yuto Sasaki) (17)(16)(15)(14)(13)(12)
- ecpglib で不正な datetime 入力を解析する際の範囲外の読み取りをしないよう修正されました。 (Bruce Momjian, Pavel Nekrasov) (17)(16)(15)(14)(13)(12)
- psql の \dコマンド(description コマンド)が 9.4 より前のサーバで再び動作するように修正されました。 (Tom Lane) (17)
- psql の \watch コマンドで1ミリ秒未満の間隔が指定されている場合に起こるハングアップが回避されるようになりました。 (Andrey Borodin, Michael Paquier) (17)(16)
- ~/.pgpass内にレプリケーションパスワードが見つからない問題が修正されました。 (Tom Lane) (17)
- pg_combinebackup では、完全バックアップが格納されているはずのディレクトリに増分バックアップファイルが存在する場合にエラーを出すように修正されました。 (Robert Haas) (17)
- pg_combinebackup では、二重スラッシュを含むファイル名を作成しないようになりました。 (Robert Haas) (17)
- vacuumdb および--jobsを指定した並列モードの reindexdb で一時テーブルとインデックスのインデックス再構築 試行することを避けるように修正されました。 (VaibhaveS, Michael Paquier, Fujii Masao, Nathan Bossart) (17)(16)(15)(14)(13)(12)
- ARM64 プラットフォーム上の誤った LLVM 生成コードが修正されました。 (Thomas Munro, Anthonin Bonnefoy) (17)(16)(15)(14)(13)(12)
- プロセス開始時間 (time_t) が long 値に収まると想定していた数箇所が修正されました。 (Max Johnson, Nathan Bossart) (17)(16)(15)(14)(13)(12)
- タイムゾーンデータファイルが tzdata release 2024b に更新されました。 (Tom Lane) (17)(16)(15)(14)(13)(12)
- DETACH CONCURRENTLY とパーティションの即時削除が同時に発生すると、パーティション化されたテーブルに対するクエリでクラッシュや「ERROR: could not open relation with OID」というエラーが発生する可能性を回避するようになりました。 (Alvaro Herrera, Kuntal Gosh) (16)(15)(14)
- アタッチ先のテーブルに、パーティションを参照する外部キーがある場合は、ALTER TABLE ATTACH PARTITION を許可しないように修正されました。 (Alvaro Herrera) (16)(15)(14)(13)(12)
- 後でプレーン結合に縮小される外部結合の下のサブクエリのフラット化に関連するパフォーマンスの低下が修正されました。 (Tom Lane) (16)
- 大規模なハッシュインデックスのインデックス構築の第2段階でのキャンセルが許可されるようになりました。 (Tom Lane) (16)
- JSON オブジェクトのコンストラクターで、キーの一意性のチェックが修正されました。 (Junwang Zhao, Tomas Vondra) (16)
- Bind および Execute プロトコルメッセージ処理の開始時に、クエリ ID を報告するようになりました。 (Sami Imseih) (16)(15)(14)
- ネストが深すぎる XML 入力による libxml2 のスタックオーバーフローが防止されました。 (Tom Lane, with hat tip to Nick Wellnhofer) (16)(15)(14)(13)(12)
- 「XMLSERIALIZE(... INDENT)」が入力データに空白がある場合インデントされない問題が修正されました。 (Jim Jones) (16)
- 同時に実行される、述語または式を含むインデックスへの REINDEX CONCURRENTLY を無視した最適化しないようになりました。 (Michail Nikolaev) (16)(15)(14)
- 名前が競合する場合の「ORDER BY」リストの誤った解析処理が修正されました。 (Tom Lane) (16)
- EXPLAIN における「failed to find plan for subquery/CTE」エラーが発生しないよう修正されました。 (Richard Guo, Tom Lane) (16)(15)(14)(13)(12)
- 生成列の型を変更するときに「USING」句を指定できないように修正されました。 (Peter Eisentraut) (16)(15)(14)(13)(12)
- 32 ビットマシンでの pg_stat_io ビューの誤った出力が修正されました。 (Bertrand Drouvot) (16)
- 「Error: trailing junk after numeric literal」エラーメッセージが出力される誤ったエンコーディング処理が修正されました。 (Karina Litskevich) (16)(15)
- 論理レプリケーション適用ワーカーは、エラーまたは適用ワーカーのシャットダウン中に、レプリケーション起点が進行しないように修正されました。 (Hayato Kuroda, Shveta Malik) (16)
- TLS セッションチケット無効化のリグレッションを修正されました。 (Daniel Gustafsson) (16)(15)(14)(13)(12)
- 多数の ACL エントリを持つデータベースを削除するとき、「ERROR: wrong tuple length」が発生することがありましたが、回避されるようになりました。 (Ayush Tiwari) (16)(15)(14)(13)(12)
- パラレルワーカーで session_authorization と role の設定が正しく行えるようになりました。 (Tom Lane) (16)(15)(14)(13)(12)
- PL/pgSQL の CALL で特殊なケースで稀に発生する「cache lookup failed for function」エラーが発生する問題が修正されました。 (Tom Lane) (16)(15)(14)
- ビッグエンディアンのハードウェア上でかつ OpenSSL が利用できない場合の MD5 の実装がスレッドセーフに修正されました。 (Heikki Linnakangas) (16)(15)(14)
- ecpglib で pnstrdup() の使用を避けるようになりました。 (Jacob Champion) (16)(15)(14)(13)
- psql のメタコマンド \bind を繰り返し使用する際に発生していた psql のメモリリークが修正されました。 (Michael Paquier) (16)
- テーブルの UNLOGGED/LOGGEDの設定と異なる永続性を持つ IDENTITY 列を管理するシーケンスの pg_dump の処理が修正されました。 (Tom Lane) (16)(15)
- pg_rewind のデバッグ出力に、ソースタイムライン履歴を含めるように修正されました。 (Heikki Linnakangas) (16)(15)(14)(13)(12)
- contrib/pageinspect および contrib/pgstattuple 関連の関数で、シーケンス関係の検査を許可するようになりました。 (Nathan Bossart, Ayush Vatsa) (16)(15)(14)(13)(12)
- Windows 上での Strawberry Perl を使用したビルドが修正されました。 (Andrew Dunstan) (16)(15)(14)(13)(12)
- Windows (特に pg_rewind )の ジャンクションポイントの誤動作が修正されました。 (Andrew Dunstan) (16)(15)(14)(13)(12)
- MinGW でビルドするときに発生する、「missing declaration for inet_pton」というコンパイラの警告またはエラーを防止するようになりました。(Thomas Munro, Andrew Dunstan) (15)
- PostgreSQL の RPM パッケージをビルドする際に発生する、「Error: nothing provide perl(PostgreSQL::Test::Utils)」が防止されるようになりました。 (Noah Misch) (14)(13)(12)
トップレベル以外のテーブルの参照(例えば、 CTE 、サブクエリ、 security_invoker属性が true の ビュー、SQL で作成した関数によるテーブルの参照などがこれに該当します)において、 セキュリティポリシーの設定されたテーブルを参照する場合、その実行計画がクエリを実行したロールに依存することを記録していませんでした。これにより、あるユーザの権限の元で作成したプランを、同一セッションで別の権限のユーザが実行すると、本来出力すべき行が出力されない、あるいは逆に出力すべきでない行が出力されてしまう可能性がありました。(CVE-2024-10976)
暗号化のネゴシエーションが完了する前に libpq が受け取ったエラーメッセージはそのまま出力していたため、中間者攻撃によって利用される恐れがありました。これにより、エラーメッセージをあたかもクエリの結果であるかのように見せかけるなどの攻撃が可能になっていました。(CVE-2024-10977)
SQL標準では、SET SESSION AUTHORIZATION が副作用として SET ROLE NONE を実行することを要求していますが、この実装に問題があり、意図しない相互作用が発生していました。特に SET SESSION AUTHORIZATION を実行したトランザクションをロールバックすると、元々のロールが NONE でない場合でも NONE に変更されてしまい、ユーザーID がトランザクション開始前と変わってしまう可能性がありました。また、関数内の SET句で一時的に session_authorization を設定すると、同様の影響がありました。関連するバグとして、パラレルワーカーに対して current_setting('role') を実行すると、正しいロールではなく none を返してしまう問題がありました。(CVE-2024-10978)
PATH のようなプロセスの環境変数を操作可能であることは、攻撃者に任意のコードを実行される機会を与えることになります。このため、「信頼されたPL/Perl」はそのような能力を与えてはいけませんでした。環境変数の変更を warningメッセージとともに拒否する tied hash で %ENV を置き換える修正がされました。「信頼されないPL/perl (plperlu)」は、今までどおり環境変数を変更することも可能です。(CVE-2024-10979)
参照先テーブルがパーティションテーブルの場合、参照元テーブルがスタンドアローンのテーブルかパーティションテーブルかで、参照元テーブルに必要なカタログエントリが異なります。ATTACH/DETACH PARTITION コマンドは、このための変換を正しく行えていませんでした。特に、DETATCH PARTITION されてスタンドアローンのテーブルとなったテーブルには、外部キー制約トリガーが作成されていませんでした。このため、外部キー制約に違反する行が挿入されてしまう可能性がありました。また、DETACH PARTITION 後に再び ATTACH PARTITION を行った場合にも予期しないエラーで失敗することがありました。
この問題が発生してしまった場合、修正するには通常のテーブルに変更されたテーブルの不正な制約に対して ALTER TABLE DROP CONSTRAINT を実行し制約を削除した後、再度制約を追加します。もし制約の再追加が失敗した場合は、誤ったデータが挿入されている可能性があります。その場合は参照元テーブルと参照先テーブル間で一貫性を手動で再度確立し、その後制約を再度追加する必要があります。
不正な制約と、正しい制約を追加するためのコマンドは、以下のクエリを実行して生成できます。
SELECT conrelid::pg_catalog.regclass AS "constrained table", conname AS constraint, confrelid::pg_catalog.regclass AS "references", pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;', conrelid::pg_catalog.regclass, conname) AS "drop", pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;', conrelid::pg_catalog.regclass, conname, pg_catalog.pg_get_constraintdef(oid)) AS "add" FROM pg_catalog.pg_constraint c WHERE contype = 'f' AND conparentid = 0 AND (SELECT count(*) FROM pg_catalog.pg_constraint c2 WHERE c2.conparentid = c.oid) <> (SELECT count(*) FROM pg_catalog.pg_inherits i WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table WHERE partrelid = i.inhparent));
ADD CONSTRAINT ステップは失敗する可能性があるため、上記のクエリの出力結果をファイルに保存し、各ステップごとに実行してください。
デフォルトの照合順序プロバイダとして libc を使用している場合、照合順序に C ロケールが使用されているかどうかを確認するテストでLC_COLLATE ではなく LC_CTYPE が誤ってチェックされていました。
これらの設定が同じである一般的なケースや、両方が C(またはそのエイリアスの POSIX)ではない場合には影響しません。しかし、LC_CTYPEが C で、LC_COLLATE が他のロケールである場合、誤った問い合わせ結果が発生し、文字列のインデックスが破損する可能性がありました。 このような設定を持つデータベースのユーザは、このアップデートをインストールした後、影響を受けるインデックスを再作成する必要があります。逆のケースで LC_COLLATE が C で、LC_CTYPE が他のロケールである場合、性能が低下しますが、実際のエラーは発生しませんでした。
問い合わせ内のキー列が登場する箇所に COLLATE句でパーティション定義と異なる照合順序を指定している場合に該当する可能性があります。このような実行計画では、誤った問い合わせ結果が生じる可能性がありました。
このバグは典型的には「ERROR: variable not found in subplan target lists」などのエラーを引き起こしました。
(add は SQL言語の単純なユーザ定義関数) db=# SELECT add(array_length(array_agg(i)::numeric[],1)::integer) FROM n;
バグ報告されたのは以下のようなユーザ定義SQL関数の呼び出しでした。
本障害で誤った問い合わせ結果が生じる可能性がありました。
(17.0 ではエラーになる使用法) CREATE TABLE t (a int); INSERT INTO t VALUES(1), (2); CREATE VIEW v AS SELECT a FROM t WHERE EXISTS (SELECT 1 FROM t); MERGE INTO v USING (SELECT * FROM generate_series(1,1)) AS s(a) ON s.a = v.a WHEN NOT MATCHED BY SOURCE THEN DELETE; (発生していたエラー) ERROR: XX000: wrong varnullingrels (b) (expected (b 4)) for Var 5/1 LOCATION: search_indexed_tlist_for_var, setrefs.c:2847
この種の実行プランを持つスクロール可能なカーソルが開始点まで巻き戻され、その後再び前方に実行された場合、誤った問い合わせ結果が生じる可能性がありました。
ScalarArrayOp は「indexed_col IN (1,2,3) や indexed_col = ANY ('{1,2,3}'::int[]) のような検索条件で使われます。
誤った指定は適切に拒否されるようになりました。これまでは、COPY TO に対する FORCE_NULL、CSV以外の形式に対する FORCE_QUOTE などの、意味をなさない指定でもエラーになりませんでした。
1つのパーティションにタプルが蓄積されすぎたため、ハッシュ結合の内側を再パーティショニングした後、パーティションのすべてのタプルが同じ子パーティションに入っているかどうかを確認します。 これは、すべてのタプルが同じハッシュ値を持っていることを示し、さらに再パーティションしても状況は改善されません。このチェックは場合によっては機能せず、無駄な再パーティショニングが繰り返され、最終的には(メモリ不足、ディスク領域不足などの)リソース枯渇エラーに至っていました。
これは主として一部の検索が制限された search_path で実行されたことにより、CREATE INDEX コマンドが pg_catalog 外のオブジェクトを参照した場合に予期せぬエラーを引き起こす問題がありました。この修正により、親パーティションインデックスのコメントが子インデックスにコピーされることも防止されます。
本障害で以下のようなメッセージが発生するケースが報告されました。
ERROR: operator class "..._ops" does not exist for access method "..."
アクセスメソッドに依存するテーブルが存在する場合、アクセスメソッドの削除はブロックされるべきですが、ブロックされていなかったため、その後に異常な動作が発生する可能性がありました。この修正は、この修正適用以降に作成されたパーティションテーブルの問題のみを防止することに注意してください。
このようなロケール名は他の場所では使用されないため、これは Windows でのみ問題となります。 このような名前がどのようなエンコーディングで表現されるかが非常に不明確であるため、問題となります(ロケール自体が使用するエンコーディングを定義しているため)。最近のPostgreSQLのリリースでは、その混乱により Windows ランタイムライブラリでアボートが発生する可能性がありました。新しいエラーメッセージに遭遇した場合は、Windows Locale Builder を使用して ASCII のみの名前で新しい複製ロケールを作成するか、tr-TR のような BCP 47準拠のロケール名の使用を検討してください。
最近コミットされたトランザクションを誤って処理してしまい、アサート失敗、または「ERROR: could not access status of transaction」というエラーが発生する可能性がありました。
並行する PREPARE TRANSACTION により、COMMIT PREPARED が完了したトランザクションについて、ディスク上の2フェーズコミットの状態を保持しているファイルを削除しない可能性がありました。すぐに悪影響が及ぶ可能性はありませんが、その後クラッシュが発生し、リカバリをすると「ERROR: could not access status of transaction」というエラーで失敗する可能性がありました。この場合、サービスを復元するためには残存したファイルを手動で削除する必要があります。
このコードパスでは、まだ再構築されていないインデックスを追跡するリストが適切に更新されなかったため、のちにアサート失敗やクラッシュが発生するリスクがありました。
通常の行更新では、トランザクションがロールバック可能なように、行の新しいバージョンが書き込まれます。ただし、特定のシステムカタログの更新は意図的にこのような形での更新は行わず、データを直接書き換えます。今回データを直接書き換える形での更新の効果が失われる可能性のある競合状態を修正されました。例えば、 pg_class.relhasindex をtrue に設定する更新が失われると、新しいインデックスの更新が妨げられ、それによりインデックスが破損する可能性がありました。
カタログキャッシュの古いデータを使用することで、データを直接書き換える形でのカタログの更新内容が失われないようになりました。
この状況は通常は発生しませんが、SQL 言語関数を B-tree サポートとして使用するなどのテストシナリオでは発生する可能性があります (これは実稼働環境での使用には遅すぎます)。発生した場合、無限に待機する可能性がありました。
新しいカーソルの設定中に、このビューを検査するユーザー定義コードが呼び出される可能性があり、その場合、NULL ポインタの間接参照が発生します。設定が完了していないカーソルを除外するように pg_cursors ビューの定義を修正されました。
進行中のトランザクションのロジカルデコーディング中に、属性のデフォルトのトースト値を取得しながらトーストテーブルをスキャンしますが、このスキャン中に、システムテーブルのスキャンが進行中であることを示すフラグを初期化していませんでした。
ロジカルデコーディングでは、長時間実行されるトランザクションの処理中に深刻なメモリの浪費が発生し、 メモリ不足に伴う障害が発生することがありました。この問題への対応として、論理レプリケーション中に受信したタプルデータを格納するために、より小さいデフォルトのブロックサイズを使用するようになりました。
以前の四半期リリースでの同様の修正と同じように、このケースでは、そのような関数に間違ったスナップショットが渡され、外部トランザクションの開始以降に変更された行の古い値が表示されることがありました。
他のケースとは異なり、オプション値の末尾の空白が拒否されていました。例えば、これは ecpg の使用時に問題となることが判明しています。
実際に問題になることは通常なさそうですが、定数配列の開始直前の位置を読み取ろうとする可能性がありました。
ACL (権限) 列の表示を伴うコマンドは、9.4 より前のバージョンには存在しない関数を使用していたため、非常に古い PostgreSQL サーバーでは失敗していました。
1ミリ秒未満の間隔が指定された場合は、間隔 0 (実行間の待機なし)と同じように扱われるようになります。
-d または --dbname が指定されていない場合、pg_basebackup とpg_receivewal は、データベース名フィールドに「replication」が含まれる ~/.pgpass のエントリと一致しませんでした。
機能上の問題は発生しませんでしたが、重複したスラッシュがエラーメッセージに表示され、混乱が生じる可能性がありました。
他のセッションの一時テーブルのインデックス再構築は機能しませんが、一部のコードパスでそれらをスキップするチェックが欠落していたため、不要な障害が発生されました。
ARM プラットフォーム上で JIT コンパイルを使用すると、生成されたコードは32ビットを超える再配置距離をサポートできず、生成されたコードの配置が不適切になると、大容量メモリシステムでサーバークラッシュが発生する可能性がありました。
long が 32 ビットのプラットフォーム (特に Windows) では、このコーディングは2038年以降に失敗します。ほとんどの失敗は表面的なものにすぎませんが、特にpg_ctl start がハングする可能性がありました。
この tzdata リリースでは、古い System-V 互換ゾーン名を変更して、対応する地理的ゾーンを複製します。たとえば、「PST8PDT」は「America/Los_Angeles」の別名になります。主な目に見える結果は、標準化されたタイムゾーンの導入前のタイムスタンプの場合、ゾーンは指定された場所のローカル平均太陽時を表すと見なされることです。たとえば、「PST8PDT」では、「1801-01-01 00:00」などの timestamptz 入力は、以前は「1801-01-01 00:00:00-08」とレンダリングされていましたが、現在は「1801-01-01 00:00:00-07:52:58」とレンダリングされます。
また、メキシコ、モンゴル、ポルトガルの歴史的修正が行われています。特に、Asia/Choibalsan は、主にこれらのゾーン間の違いが信頼できないデータに基づいていることが判明したため、現在では別のゾーンではなく、「Asia/Ulaanbaatar」の別名となっています。
この構成はサポートされておらず、これを作成する他の方法でもすでに失敗するようになっています。
PostgreSQL 16 では、クエリプルアップロジックの過度に楽観的な単純化により、以前のバージョンほど一部のクエリを最適化できていませんでした。
事前ソートが必要なほど大きい(maintenance_work_mem または shared_buffers よりも大きい)ハッシュインデックス構築する場合、最初のソートフェーズは中断可能ですが、挿入フェーズではループになり中断できませんでした。
1キロバイトより大きなオブジェクトを構築する際に、重複したキーを含むオブジェクトや不完全なオブジェクトが生成されたり、重複したキーが存在すると誤って報告されたりする可能性がありました。
以前はこれらの状態ではクエリ ID がわかりませんでしたが、報告されるようになりました。
以前利用していた xmlXPathCompile() は、2.13.4より前のバージョンでは再帰によるスタックオーバーフローが発生する可能性があったため、代わりに xmlXPathCtxtCompile() を使用するようされました。
空白で区切られたノードのインデントが失敗する問題が修正され、末尾に改行が追加されないようになりました。
通常、REINDEX CONCURRENTLY は、他のテーブルに対する他の REINDEX CONCURRENTLY 操作を待たない最適化を行いますが、 他の REINDEX CONCURRENTLY が述語または式を含むインデックスを処理している場合は、その中に他のテーブルにアクセスするユーザー定義コードが含まれている可能性があるため、この最適化は適用できませんでした。
修正前は、他の REINDEX CONCURRENTLY を待機していなかったため、競合状態が発生し、一貫性のない動作が発生する可能性がありました。
「SELECT」の「ORDER BY」項目が単なる識別子である場合、SQL92 との互換性のため、パーサーはまずそれを「SELECT」の出力列名として検索します。しかし、 ビューの定義で利用されているルールの処理は、SQL99 の解釈に従っており、そのような名前を出力ではなく入力列名であると想定しています。したがって、このような操作は推奨されないものの、ある列が「SELECT」の出力リストに名前を変更され、「ORDER BY」で使用される入力列と一致するように変更された場合、ビューの表示結果が不正になる可能性がありました。
この問題は、サブクエリの WHERE 条件が常に偽である場合など、実行計画からサブクエリが最適化によって完全に取り除かれた場合に、 サブクエリのRECORD 型出力のフィールドを表示しようとした際に発生することがありました。プラン内には元のフィールド名を識別するための情報が残らないため、代わりに「fN」という形式で N 番目のレコード列を表示するようになりました。
「USING」句の出力は変換後の列に書き込まれるため、列の内容を指定している生成式の結果を破壊してしまうため、 「USING」句を指定した場合エラーとするようになりました。
このようなハードウェアでは、stats_reset タイムスタンプ列にゴミが含まれていました。
数値リテラルの後に識別子が続くことは許可しておらず、その間には空白が必要なため、{ interger }{ ident_start }のようなトークンパターンを利用していました。しかしながら、{ ident_start }にマルチバイト文字が続く場合が想定されていなかったため、クライアントへのレポートおよびログファイルにおいて、不正なエンコーディングとしてエラー出力されていました。
これにより、レプリケーション起点が進むとソースサーバーはそのデータを再度送信しなくなるため、トランザクションが失われる可能性がありました。
TLSv 1.3のステートフル セッションチケットの送信を防止するための変更により、誤って TLSv 1.2のステートレスチケットの送信が再度有効になっていました。クライアントに TLS セッション再開( session resumption )がサポートしていると誤解されないようにすることを意図していましたが、一部のクライアントは依然としてサポートしていると考えていました。
動作中に変更可能な設定は「SET」句で変更できますが、パラレルワーカー内では上記の 2 つの設定が変更できませんでした。
クライアント側で利用されるため、スレッドセーフではないことは問題がありました。
この関数はメモリ不足時に exit() を呼び出しますが、呼び出し元のコードは既に割り当て失敗を適切に処理しているため、この動作はライブラリとしては適切ではありませんでした。
v15 以降、テーブルが UNLOGGED のときに IDENTITY 列を管理するシーケンスだけを LOGGED に設定したり、その逆を行ったりすることが可能になっています。ただし、バイナリアップグレードモードではその状況を再現する pg_dump が失敗し、そのようなシーケンスが存在すると pg_upgrade は失敗していました。シーケンスの永続性が作成時に正しく設定できるように、「ADD/ALTER COLUMN GENERATED AS IDENTITY」に新しいオプションを導入して修正されました。したがって、このようなシーケンスを含むデータベースからのダンプは、このマイナーバージョン以降のサーバーにのみロードできます。
これは当初の意図でしたが、ソース履歴が常に空として出力されていました。
これは以前は許可されていましたが、テーブルに対するデフォルト以外のアクセスメソッドの導入時に機能しなくなっていました。