
このリリースは 16.8 からの修正リリース(2025年 5月 8日リリース)です。
16.X からのアップデートではダンプ、リストアは不要です。
ただし、パーティションテーブルに自己参照の外部キー制約がある場合には、これらの制約を再作成する必要があります。下記の2番の項目を参照してください。
また、BRIN bloomインデックスを使用している場合には、インデックス再作成することを推奨します。下記の3番の項目を参照してください。
ただし、16.5 よりも前のバージョンからアップデートする場合には、16.5のリリース情報も参照してください。
PostgreSQL 16.8 から 16.9 への変更点
17.5, 16.9, 15.13, 14.18, 13.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン番号を項目末尾に括弧書きで記載しています。
- 不正にエンコードされた文字列の検査で、1バイトのバッファ超過読み取りが防止されました。 (Noah Misch, Andres Freund) (17.5)(16.9)(15.13)(14.18)(13.21)
- パーティションテーブルで自己参照の外部キーを正しく扱えるようになりました。 (Álvaro Herrera) (17.5)(16.9)(15.13)(14.18)(13.21)
- BRIN のサポートプロシージャ brin_bloom_union() で圧縮されたBRIN のサマリをマージするときにデータ損失を回避するように修正されました。 (Tomas Vondra) (17.5)(16.9)(15.13)(14.18)
- FROMのビューや関数に対する行全体のテーブル参照を使うUPDATE、DELETE、MERGEの問い合わせで、予期せぬエラー「ERROR: attribute ... has wrong type」が生じることがあり、修正されました。 (Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- 「DO NOTHING」アクションのパーティションテーブルに対するMERGEが修正されました。 (Tender Wang) (17.5)(16.9)(15.13)
- INSERTコマンドで、テーブルがNULLを禁止する制約を伴うドメインデータ型の生成列(GENERATED)を持つときのエラーが防止されました。 (Jian He) (17.5)(16.9)(15.13)(14.18)
- WITH句の内にあるINSERT、UPDATE、DELETE、MERGEコマンドに付加された外側のCTE名の参照を正しく扱えるようになりました。 (Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- JSONコンストラクタ式のキーでのキャストの誤った処理が修正されました。 (Amit Langote) (17.5)
- 引数が無名レコード型であるとき、array_agg()の並列化を行わないようになりました。 (Richard Guo, Tom Lane) (17.5)(16.9)
- 入力がint2vector型、またはoidvector型であるとき、配列コンストラクタのARRAY(subquery)とARRAY[expression, ...]が正常に配列を生成できるように修正されました。 (Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- Ispell辞書のパース時に、無効な接辞が誤って報告される可能性が修正されました。 (Jacob Brazeal) (17.5)(16.9)(15.13)(14.18)(13.21)
- デフォルトを持つドメイン型の場合を正しく処理するようにALTER TABLE ADD COLUMNが修正されました。 (Jian He, Tom Lane, Tender Wang) (17.5)(16.9)(15.13)(14.18)(13.21)
- 外部キー制約のON DELETE SET DEFAULTまたはSET NULLアクションで重複した列名がある場合の不正動作が修正されました。 (Tom Lane) (17.5)(16.9)(15.13)
- 外部キー制約のプロパティ変更が許可されなかった場合のエラーメッセージが改善されました。 (Álvaro Herrera) (17.5)(16.9)(15.13)(14.18)(13.21)
- ON COMMIT DELETE ROWSとマークされた一時テーブルのrelhassubclassフラグをリセットする際のエラーが回避されました。 (Noah Misch) (17.5)(16.9)(15.13)(14.18)(13.21)
- XMLSERIALIZE()のINDENTオプションで不足していた逆解析が追加されました。 (Jim Jones) (17.5)(16.9)
- FILTERオプションとORDER BY(またはDISTINCT)の両方のオプションを持つ集約関数の引数を早期評価しないようになりました。 (David Rowley) (17.5)(16.9)
- 外部結合が存在する場合のNOT NULL制約列からの誤った推論が修正されました。 (Richard Guo) (17.5)
- 複合型の値に適用される「IS [NOT] NULL」テストに基づく誤った最適化が回避されました。 (Bruce Momjian) (17.5)
- プランナがトップレベルの式内で複数のハッシュ可能なScalarArrayOpExpr部分式を認識できない問題が修正されました。 (David Geier) (17.5)(16.9)(15.13)(14.18)
- 低いfillfactor設定値による誤ったテーブルサイズの推定値が修正されました。 (Tomas Vondra) (17.5)
- Bitmap Heap Scanにおけるskip fetch最適化が無効になりました。 (Matthias van de Meent) (17.5)(16.9)(15.13)(14.18)(13.21)
- 多数の検索キーがある場合のGINインデックス検索起動時の性能問題が修正されました。 (Tom Lane, Vinod Sridharan) (17.5)(16.9)(15.13)(14.18)(13.21)
- BRINインデックスの演算子クラスでサポートされてないプロシージャを検出して、エラーが報告されるようになりました。 (Álvaro Herrera) (17.5)(16.9)(15.13)(14.18)(13.21)
- Appendプランノードの非同期サブプランの待機中に、クエリキャンセルなどの割り込みに応答できるようになりました。 (Heikki Linnakangas) (17.5)(16.9)(15.13)(14.18)
- 稼働中のwal senderのI/O統計をより高頻度に報告するようになりました。 (Bertrand Drouvot) (17.5)(16.9)
- 起動直後のsynchronous_standby_names設定の扱いについて、競合状態が修正されました。 (Melnikov Maksim, Michael Paquier) (17.5)(16.9)(15.13)(14.18)(13.21)
- 問い合わせ内での設定パラメータio_combine_limitの変更が有効になりました。 (Thomas Munro) (17.5)
- 設定パラメータscram_iterationsがINT_MAX(2147483647)に設定されている場合の無限ループが回避されました。 (Kevin K Biju) (17.5)(16.9)
- json_array()関数の副問い合わせの二重変換によりクラッシュを起こす可能性があり、回避されました。 (Tom Lane) (17.5)(16.9)
- 内部関数pg_strtof()の引数endptrがNULLの場合にクラッシュする問題が修正されました。 (Alexander Lakhin, Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- GUCパラメータの一部設定において、メモリ不足発生後にクラッシュする問題が修正されました。 (Daniel Gustafsson) (17.5)(16.9)
- Snowball語幹処理でメモリ不足が発生した場合にクラッシュする問題が修正されました。 (Maksim Korotkov) (17.5)(16.9)(15.13)(14.18)(13.21)
- 実行計画作成時に、メモリ解放してはいけないSpecialJoinInfo構造体まで解放してしまう問題が修正されました。 (Richard Guo) (17.5)
- 無効化済のレプリケーションスロットがコピーできないようになりました。 (Shlok Kyal) (17.5)(16.9)
- ホットスタンバイではないスタンバイサーバ上で論理レプリケーションスロットをリストアできないようになりました。 (Masahiko Sawada) (17.5)(16.9)
- 論理デコーディングでデコーディング位置を指定の位置まで進める処理で、レプリケーションスロットのcatalog_xminが過剰に進められてしまう問題が修正されました。 (Zhijie Hou) (17.5)(16.9)(15.13)(14.18)(13.21)
- 強いロックを取らないDDL操作が論理レプリケーションの対象テーブルである場合にデータ破損を起こす可能性があり、修正されました。 (Shlok Kyal, Hayato Kuroda) (17.5)(16.9)(15.13)(14.18)(13.21)
- apply workerがエラーに遭遇したものの、PL/pgSQLの関数などでエラー処理された場合に、レプリケーションオリジンを誤ってリセットする問題が修正されました。 (Hayato Kuroda) (17.5)(16.9)
- サブスクライバ側のパーティションテーブルにBRINインデックスが存在する場合に、論理レプリケーションのapply workerプロセスがクラッシュすることがあり、修正されました。 (Tom Lane) (17.5)
- 論理レプリケーションのインデックス検索で重複したスナップショットの作成を回避するようになりました。 (Heikki Linnakangas) (17.5)(16.9)(15.13)(14.18)(13.21)
- サブスクリプション作成時に、オリジンが一致しない可能性がある場合の検知が改良されました。 (Hou Zhijie, Shlok Kyal) (17.5)(16.9)
- リカバリタイムラインの選択が不適切である場合、エラーメッセージに誤ったチェックポイントに関する情報が出力されていましたが、修正されました。 (David Steele) (17.5)(16.9)(15.13)
- smgropen()内の操作順序が修正されました。 (Andres Freund) (17.5)
- pgstat_report_stat()内の誤ったアサートが削除されました。 (Michael Paquier) (17.5)(16.9)(15.13)
- gistFindCorrectParent()の過度に厳密なアサートが修正されました。 (Heikki Linnakangas) (17.5)(16.9)(15.13)(14.18)(13.21)
- maintenance_work_memの値が非常に小さい場合、並列バキュームでのアサート失敗が回避されるようになりました。 (Masahiko Sawada) (17.5)
- プライマリサーバの再起動時にスタンバイサーバで稀に発生するアサート失敗が修正されました。 (Heikki Linnakangas) (17.5)(16.9)(15.13)(14.18)
- PL/pgSQLで、単純なSELECT式クエリでスクロール可能なカーソルが定義されている場合に発生するエラー「ERROR: unexpected plan node type」を回避するようになりました。 (Andrei Lepikhov) (17.5)(16.9)(15.13)(14.18)(13.21)
- pg_dumpの--cleanモードで、個々のインデックスパーティションを削除しようとしないようになりました。 (Jian He) (17.5)(16.9)(15.13)(14.18)(13.21)
- pg_dumpallにおいて、pg_auth_membersに無効なロールのOIDが含まれている場合、無効なロールに対するGRANTコマンドが出力されないようになりました。 (Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- pg_amcheckおよびpg_upgradeにおいて、libpqが確保したメモリを解放する際に正しい関数が使用されるようになりました。 (Michael Paquier, Ranier Vilela) (17.5)(16.9)(15.13)(14.18)
- reindexdbコマンドの並列リインデックス処理におけるスケジューリング (Alexander Korotkov) (17.5)
- contrib/pageinspectのheap_page_items()関数において、破損したページを読み込んでもクラッシュしないようになりました。 (Dmitry Kovalenko) (17.5)(16.9)(15.13)(14.18)(13.21)
- contrib/pg_freespacemapのpg_freespacemap()関数が、ビューなどストレージを持たないリレーションを指定するとアサート失敗する問題が修正されました。 (Tender Wang) (17.5)(16.9)(15.13)(14.18)(13.21)
- contrib/postgres_fdwで、サブクエリからの制限条件を引き出さないようになりました。 (Alexander Pyhalov) (17.5)
- システムのインクルードディレクトリに古いバージョンのlibpq_fe.hが存在する場合にビルドが失敗する問題が修正されました。 (Tom Lane) (17.5)
- macOS 15.4でビルドが失敗する問題が修正されました。 (Tom Lane, Peter Eisentraut) (17.5)(16.9)(15.13)(14.18)(13.21)
- 読み込みストリームのバッファ単位データのvalgrindラベル付けが修正されました。 (Thomas Munro) (17.5)
- 文字列ハッシュコードに関するvalgrindの警告がでないようになりました。 (John Naylor) (17.5)
- タイムゾーンデータファイルが tzdata release 2025b に更新されました。 (Tom Lane) (17.5)(16.9)(15.13)(14.18)(13.21)
- contrib/dblinkの問い合わせがキャンセルできるようになりました。 (Noah Misch) (16.9)(15.13)(14.18)(13.21)
- スナップショット作成で起きるアサート失敗が修正されました。 (Masahiko Sawada) (15.13)(14.18)
- アーカイブからリストアされたWALファイルの破損を防ぐため、アーカイブリカバリ時にはWALファイルの再利用と事前割り当てを行わないようになりました。 (Noah Misch, Arun Thirupathi) (14.18)(13.21)
文字エンコーディングGB18030であるものとして文字列を検査するときに発生します。可能性は低いですが、メモリの末尾で非互換のマルチバイト文字が現れた場合に、SIGSEGVのクラッシュが発生するおそれがあります。サーバとlibpqを用いたクライアントアプリケーションの両方で該当します。(CVE-2025-4207)
制約に参照されたテーブルが同じパーティションテーブルであるとき、子パーティションを作成または付加するときに外部キー制約に対するカタログエントリの作成に失敗していました。この結果、制約が完全には強制されませんでした。これは12.13、13.9、14.6時点の修正で混入したバグです。
パーティションテーブル上に自己参照外部キー制約を作成した後に、子パーティションの作成や付加を行っていた場合、不適切なカタログ内容を修正するために、このような外部キー制約を削除して作成し直すべきです。制約に違反している行が既にあるかもしれず、そのような場合、制約の再作成はエラーになり、データ修正の対応が必要となることに、注意してください。
当該コードでは圧縮したものの展開結果が入力と同一でないことを考慮しておらず、インデックス検索をしたときに行数が少なく返り、誤った問い合わせ結果が生じる可能性がありました。
この誤りはBRIN bloomインデックスが導入されたv14時点から存在しましたが、当該のコードパスは使われることが稀でした。v17でパラレルインデックス作成が導入されて、問題が顕在化しやすくなりました。
(エラー発生例) db1=# CREATE TABLE t4 (f1 int, f2 int); db1=# INSERT INTO t4 VALUES (1, 10), (2, 20), (3, 30); db1=# CREATE VIEW v4 AS SELECT * FROM t4 OFFSET 0; db1=# UPDATE t4 SET f2 = v4.f2 FROM v4 WHERE v4.f1 = t4.f1 RETURNING v4; ERROR: attribute 3 of type record has wrong type DETAIL: Table has type record, but query expects v4.
一部の場合に予期せぬエラー「ERROR: unknown action in MERGE WHEN clause」が発生していました。
(エラー発生例 - マッチしないので 1行挿入されるのが正しい動作) db1=# CREATE TABLE pt5 (a int, b int) PARTITION BY LIST(a); db1=# CREATE TABLE p51 PARTITION OF pt5 FOR VALUES IN (1); db1=# CREATE TABLE p52 PARTITION OF pt5 FOR VALUES IN (2); db1=# MERGE INTO pt5 USING (SELECT 2 AS a) AS q ON pt5.a = q.a WHEN NOT MATCHED THEN INSERT VALUES (1, 2) WHEN MATCHED THEN DO NOTHING; ERROR: unknown action in MERGE WHEN clause
生成式が問題ない値を返す場合でも制約違反のエラーになっていました。
(エラー発生例 - 値が NULL ではないのにドメイン制約違反のエラーになる) db1=# CREATE DOMAIN d6 AS int CHECK (VALUE IS NOT NULL); db1=# CREATE TABLE t6 (a int, b d6 GENERATED ALWAYS AS (a * 2) STORED); db1=# INSERT INTO t6 (a) VALUES (2); ERROR: value for domain d6 violates check constraint "d6_check"
このような場合にパーサは、再帰が許されない場合であることを検出できず、CTEを使用可能な順序に並べ替える際にそのような参照を考慮することもできませんでした。
本来エラーになるべき問い合わせで、何らか結果が返ったり、アサート失敗が生じる動作が報告されました。潜在的にはクラッシュを引き起こす可能性があります。
(修正後の正常動作例 - このエラーが出ないというのがバグ) db1=# CREATE TABLE t7 (id int); db1=# INSERT INTO t7 VALUES (1),(2); db1=# WITH RECURSIVE out_cte(n) AS (WITH sub_cte AS (SELECT * FROM out_cte) DELETE FROM t7 RETURNING id) SELECT * FROM out_cte; ERROR: recursive query "out_cte" must not contain data-modifying statements
以下のようにキーがjsonに暗黙キャストされる場合に、非スカラーのキーであることが検査されず、クラッシュを引き起こすことが報告されました。
(修正後の動作例 - 最後のSELECTでクラッシュすることがあった) db1=# CREATE TYPE typ8 AS ENUM ('happy', 'sad', 'neutral'); db1=# CREATE FUNCTION f8_to_json(typ8) RETURNS json LANGUAGE sql IMMUTABLE AS $$ SELECT to_json($1::text); $$; db1=# CREATE CAST (typ8 AS json) WITH FUNCTION f8_to_json(typ8) AS IMPLICIT; db1=# SELECT JSON_OBJECT('happy'::typ8 : '123'::jsonb); ERROR: key value must be scalar, not array, composite, or json
パラレルワーカーとの通信プロトコルでは、返されたレコードの型を特定することに対応していないためです。これまでパラレル実行時に「ERROR: input of anonymous composite types is not implemented」が発生することがありました。
(障害発生例 - 例でarray_dimsを使っているのは成功時の出力を小さくするため) db1=# CREATE TABLE t9 (id int, v text); db1=# INSERT INTO t9 SELECT g, md5(g::text) FROM generate_series(1, 400000) g; db1=# VACUUM ANALYZE t9; db1=# SET debug_parallel_query TO on; db1=# SELECT array_dims(array_agg(s)) FROM (SELECT * FROM t9) s; ERROR: input of anonymous composite types is not implemented
以下のように、生成した配列をunnest関数に与えるとクラッシュが発生していました。
(障害発生例 - oidv列を指定した場合も同様にクラッシュする) db1=# CREATE TABLE t10 (i2v int2vector, oidv oidvector); db1=# INSERT INTO t10 VALUES ('1', '10000'); db1=# SELECT ARRAY(SELECT i2v) FROM t10; array ------------------ [1:1][0:0]={{1}} (1 row) db1=# SELECT unnest(ARRAY(SELECT i2v)) FROM t10; server closed the connection unexpectedly
この修正はPostgreSQL 9.5より前の振る舞いに戻すものです。
ドメイン型にデフォルトがある場合、(明示的なDEFAULT句を指定せずに)その型の列を追加すると、既存の行にドメインのデフォルト値が設定されず、新しい列はNULLのままになっていました。
本障害でアサート失敗やメモリエラーが出る動作が報告されました。クラッシュを引き起こす可能性もあります。
(報告された障害発生例) db1=# CREATE TABLE t13 (c01 INT, c02 TEXT); db1=# CREATE INDEX i13 ON t13 (c01); db1=# INSERT INTO t13 (c01, c02) VALUES (0, 'abc'); db1=# CREATE LOCAL TEMP TABLE IF NOT EXISTS v878825600 ( c878825601 INT COMPRESSION DEFAULT CONSTRAINT cons_878825602 REFERENCES v878825600 MATCH SIMPLE ON UPDATE NO ACTION ON DELETE SET DEFAULT ( c878825601, c878825601, c878825601, c878825601, c878825601, c878825601, c878825601 ) PRIMARY KEY ) ON COMMIT DELETE ROWS; db1=# CREATE LOCAL TEMP TABLE IF NOT EXISTS v878825601 ( c878825601 INT COMPRESSION DEFAULT CONSTRAINT cons_878825602 REFERENCES v878825600 MATCH SIMPLE ON UPDATE NO ACTION ON DELETE SET DEFAULT ( c878825601, c878825601, c878825601, c878825601, c878825601, c878825601, c878825601 ) PRIMARY KEY ) ON COMMIT DELETE ROWS; ERROR: pfree called with invalid pointer 0x103e61f (header 0x0000006000000001)
(報告された不適切なエラーメッセージ) db1=# CREATE TABLE pk14 (a int PRIMARY KEY); db1=# CREATE TABLE fk14 (a int REFERENCES pk14); db1=# ALTER TABLE fk14 ALTER CONSTRAINT fk14_a_fkey DEFERRABLE, ALTER CONSTRAINT fk14_a_fkey NO INHERIT; ERROR: ALTER CONSTRAINT statement constraints cannot be marked NO INHERIT (本来出力されるべきエラーメッセージ) ERROR: FOREIGN KEY constraints cannot be marked NO INHERIT
(報告されたエラー発生例) db1=# CREATE TEMPORARY TABLE p15 (a int PRIMARY KEY) ON COMMIT DELETE ROWS; db1=# CREATE TEMPORARY TABLE c15 () INHERITS (p15); db1=# ANALYZE; db1=# DROP TABLE c15; db1=# ANALYZE; ERROR: tuple to be updated was already modified by an operation triggered by the current command
以前は、XMLSERIALIZE(... INDENT)を使用するビューまたはルールがINDENT句なしでダンプされ、リストア後に誤った問い合わせ結果が発生していました。
ORDER BYまたはDISTINCTが指定されている場合、Aggプランノード内でソートを行うのではなく、集約入力値を事前にソートすることを検討します。しかし、集約入力に失敗する可能性のある式(例えば、入力の除数の一部が0になる可能性がある除算など)が含まれ、そのような失敗を防ぐためのFILTER句がある場合、これは問題となります。事前にソートすると、式の評価がFILTERテストの前に押し出され、いずれにせよエラーが発生する可能性があります。FILTERがあり、入力式が単純なVarやConstよりも複雑なものである場合は、事前ソートを行わないようにすることで、これを回避するようになりました。
(報告された障害発生例) db1=# CREATE TABLE t17 (id int, data jsonb); db1=# INSERT INTO t17 (id, data) VALUES (1,'{"a": null}'), (2,'{"a": "2"}'), (3,'{"a": "2"}'), (4,'{"a": ""}'); db1=# SELECT array_agg(distinct (data->>'a')::int) FILTER (WHERE data->>'a' IS NOT NULL AND data->>'a' != '') FROM t17; ERROR: invalid input syntax for type integer: ""
外部結合の後に適用されるので冗長ではない(外部結合で NULL が生じうる)にもかかわらず、場合によってはプランナが問い合わせ条件「IS NOT NULL」を破棄していました。
要素がNULLである複合型の値は、NOT NULL制約では排除されませんが、IS NULL/IS NOT NULL式ではNULLとして扱われます。そうではない一貫性に欠けた振る舞いがあり、誤った問い合わせ結果が生じていました。ドキュメントにも複合型についてはNOT NULL制約とCHECK (VALUE IS NOT NULL)制約は同じでは無いことが明記されました。
(修正前バージョンでの誤動作例 - id=1 の行のみ選択されるのが正しい動作) db1=# CREATE TYPE typ19 AS (m1 int, m2 int); db1=# CREATE TABLE t19 (id int, v typ19 NOT NULL); db1=# INSERT INTO t19 VALUES (1, '(10,20)'), (2, '(,)'); db1=# SELECT id, v, (v IS NULL) AS isnull FROM t19 WHERE v IS NOT NULL; id | v | isnull ----+---------+-------- 1 | (10,20) | f 2 | (,) | t (2 rows)
この結果、ハッシュテーブルで処理できるはずの追加の部分式(すなわち、右辺が全て定数のIN、NOT IN、= ANY)が不必要に非効率的に実行されることがありました。
内部でハッシュテーブルを使うかどうかはEXPLAINの出力には現れませんが本修正で性能改善が期待できます。以下のような形状の問い合わせが該当します。
SELECT * FROM t20 WHERE c1 IN ('certainstring1', 'certainstring3', 《...多数の項...》) OR c1 IN ('certainstring2', 'certainstring4', 《...多数の項...》);
まだANALYZEが実行されていないテーブルの行数をプランナが推定する時、テーブルのfillfactor設定を推定に使用しますが、その結果を少なくとも1ページあたり1行に制限する処理が省略されていました。fillfactorの値が低い場合、推定値が不当に小さくなる可能性がありました。
この最適化を使用すると、並行して実行されるVACUUM処理がページをall-visibleとマークした時に、デッドタプルが返される可能性があることが判明しました。
多くのキーを持つインデックス可能な句(例えば、配列要素が数万個ある「jsonbcol ?| array[...]」)は、クエリの開始に O(N2) の時間を要しており、またその処理中にキャンセルもできませんでした。
これまでクラッシュが生じていました。
§ § § §以前の動作では、サブプランのいずれかが準備完了するまで何も処理されませんでした。
これまでは、pg_stat_ioビューはwal senderによるI/O実行をプロセス終了まで集計していませんでした。 これからはそのようなI/Oも最大1秒遅れで報告されます。
起動後の短時間において、synchronous_standby_namesが有効であるのに、バックエンドプロセスが同期コミットを待機しない場合があり得ました。
「ALTER ROLE role1 WITH PASSWORD 'pass'」などで応答がなくなります。
json_array()関数にWITH句を伴う問い合わせを渡した場合にアサート失敗や予期せぬエラーが生じる動作が報告されました。
(エラー発生例) db1=# SELECT json_array( WITH x AS (SELECT 1) VALUES (TRUE) ); ERROR: unexpected utility statement in WITH (修正後バージョンでの出力) json_array ------------ [true] (1 row)
引数endptrにNULLが指定されているコードはリリース済のPostgreSQLには存在しないので、通常影響はありません。
これにより、パーティションワイズ結合が有効な場合に、クラッシュすることがありました。
これまでは、削除済みのWALを指している無効なスロットをコピーできてしまい、意図しないエラーやデータ破損につながる可能性がありました。
wal_levelがlogicalより低く設定されていると、スロットが有効なまま残り、昇格後にアサート失敗する可能性がありました。
ここでの「リストア」はPostgreSQLサービス起動時にファイルに記録されていたスロットを読み込んで有効化することを指します。
本来WAL読取処理に必要なはずのカタログ情報がVACUUMで削除され、誤動作やデータの不整合を引き起こす可能性がありました。
ALTER PUBLICATION ADD TABLEやALTER TYPEなど、強いロックを取らないDDLによりカタログが更新された場合、WALをデコードする処理がその情報を取得できず、古いカタログ情報を使ってデコードしてしまうことで、結果としてデータが破損してしまう可能性がありました。
この結果、同じデータが再度適用されデータが重複してしまうことがありました。
サブスクリプション作成時に、サブスクライブ先のテーブルが他のパブリケーションでもフォローされている場合、重複したデータの受信につながる可能性があるため、警告が表示されます。今回の変更では、パーティションの親テーブルまたは子テーブルが別のパブリケーションでフォローされている場合も警告が出力されるようになりました。
要求されたリカバリタイムラインに到達できない場合、報告されるチェックポイントとタイムラインは、存在する場合、backup_labelから読み取られた値になります。このメッセージは以前はpg_controlファイルから値を報告していましたが、これはbackup_labelのない制御ファイルからリカバリする場合は正しいのですが、backup_labelがある場合には正しくありませんでした。
smgr_openコールバックを呼び出す前にSMgrRelationオブジェクトが完全に初期化されていることを確認するようになりました。これにより、コールバックが失敗した場合でも適切にクリーンアップされます。
pgstat_report_stat()は、実行中のプロセスが自身の統計情報を定期的にサーバに報告するための関数です。特にPostgreSQL 16以降では、WAL senderは定期的に自身のI/O統計情報を報告するようになりましたが、このレポート処理が、他の状況で発生する可能性のあるpgstat_report_stat()の呼び出しと競合するケースが発生しました。また、非常に稀ではありますが、15.xでもバックグラウンドワーカーなどのプロセスによるpgstat_report_stat()の同時呼び出しによって同様の競合が引き起こされる可能性がありました。
内部関数が、古いトランザクションを「実行中でなくなった」とマークする際に、トランザクションの実行状況に関する変数を更新しておらず、ホットスタンバイ中にアサート失敗が発生する可能性がありました。
サーバはこのようなDROPコマンドを拒否します。パーティションは、親テーブルまたはパーティションインデックスのいずれかの後続のDROPで、いずれにせよ削除されるため、実際には何の影響もありません。ただし、エラーは発生するため、psqlの--single-transactionモードでリストアする際にはリストアのトランザクション全体が失敗するため、問題を引き起こしました。
代わりに警告を出して該当エントリをスキップするようになりました。これは、GRANTとDROP ROLEが競合するタイミングで発生する可能性があったカタログ破損への対策です。過去のバージョンではこのような破損が確認されていました。
これまで、Windows環境の特定のビルド構成、たとえばlibpqがデバッグビルドで、それを使用するアプリケーションが非デバッグビルドである場合などに、クラッシュが発生する可能性がありました。
の問題が修正されました。従来は、指定した並列数にならない場合がありました。
このような対象を指定した場合は、エラーとして拒否されるようになりました。
この修正により、稀に発生するエラー「ERROR: expected expression in subquery output」が回避されます。
このmacOSアップデートにより、strchrnul()関数の設定プローブが機能しなくなっていました。
これはPostgreSQLのリリース版のコアコードには影響しませんが、バッファ単位のデータ機能を使用する拡張がvalgrindでのテスト中に誤ったエラーが発生する可能性がありました。
中国の夏時間法の変更とイランの歴史的修正が含まれます。また、チリのアイセン州のタイムゾーンが年間を通じて UTF-03 に変更されてAmerica/Santiago から分離したため、新たに America/Coyhaique が追加されました。
これは17.xバージョンむけの変更の後方適用です。デッドロック検出の失敗のためにCREATE DATABASEとDROP DATABASEで起こりうるハングアップを防止します。
ロジカルレプリケーションで問題が報告されました。
これは15.x以降バージョンむけの修正の後方適用です。当初は外観的な修正と考えられていましたが、その後の修正を通してデータ破損の防止に有効と判明しました。