<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PostgreSQL 13.14 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-13-14/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Wed, 04 Nov 2026 06:48:14 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>PostgreSQL 13.14 &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQL 13.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/13-15/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Fri, 24 May 2024 02:40:23 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 13]]></category>
		<category><![CDATA[PostgreSQL 13.14]]></category>
		<category><![CDATA[PostgreSQL 13.15]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=14661</guid>

					<description><![CDATA[このリリースは 13.14 からの修正リリース（2024年 5月 9日リリース）です。 13.X からのアップデートではダンプ、リストアは不要です。 しかしながら、13.14 よりも前のバージョンからアップデートする場合 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 13.14 からの修正リリース（2024年 5月 9日リリース）です。<br />
13.X からのアップデートではダンプ、リストアは不要です。</p>
<p>しかしながら、13.14 よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/13-14/" rel="noopener">13.14 のリリース情報</a>も参照してください。</p>
<p><span id="more-14661"></span></p>
<h3>PostgreSQL 13.14 から 13.15 への変更点</h3>
<p>16.3、15.7、14.12、13.15、12.19 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>pg_stats_ext と pg_stats_ext_exprs の行の可視性がテーブル所有者だけに制限されました。(CVE-2024-4317)  (Nathan Bossart) (16)(15)(14)</li>
<p>
これらのビューは、アクセスするユーザに読み取り権限の無い列を伴う式の統計情報を隠していませんでした。most_common_vals などのビュー列でデータ露出が生じていました。潜在的な影響は完全には明らかになっていないため、安全性の観点から、これらのビューは関連するテーブルの所有者にしか表示されないものとなりました。
</p>
<p>
この修正では、新たに initdb で作成されたデータベースクラスタにしか修正の影響が及びません。既存のデータベースクラスタに対して適用するには、以下の手順が必要です。
</p>
<pre>
インストール先 share ディレクトリ下の fix-CVE-2024-4317.sql を
スーパーユーザ（下記例では postgres）で各データベースに対して実行する。

  $ psql -U postgres -d 《DB名》 -f "fix-CVE-2024-4317.sql"

このとき template0 データベースも対象にする。
template0 に対して SQLスクリプトを実行するには、
以下のように一時的に接続を許可して行う。

  $ psql -U postgres -c "ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;"
  $ psql -U postgres -d template0 -f "fix-CVE-2024-4317.sql"
  $ psql -U postgres -c "ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;"
</pre>
<li>複数の VALUES 行からの INSERT で対象列が配列か複合型を元にしたドメイン型である場合について、修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
このような場合に、予期せぬデータ型の不一致のエラーか、奇妙な INSERT結果（誤った問い合わせ結果）が生じることがありました。
</p>
<pre>
（エラー発生例：1行 INSERT では成功するものが 2行 INSERT で失敗する）
db1=# CREATE typ2 AS (e1 int, e2 text);
db1=# CREATE DOMAIN dom2 AS typ2;
db1=# CREATE TABLE t2 (c1 int, c2 dom2);
db1=# INSERT INTO t2 (c2.e1, c2.e2) VALUES (1, 'A');
db1=# INSERT INTO t2 (c2.e1, c2.e2) VALUES (2, 'B'), (3, 'C');
ERROR:  subfield "e1" is of type integer but expression is of type dom2
</pre>
<li>DO NOTHING を行う MERGE でも対象テーブルに SELECT 権限が必要になりました。  (&Aacute;lvaro Herrera) (16)(15)</li>
<p>
これにより特別なケースでの問題を回避します。「MERGE INTO t3 USING (SELECT 1) ON (true) WHEN MATCHED THEN DO NOTHING」のような形の問い合わせでアサート失敗が生じる場合が報告されました。仕様変更となりますが、実用的な MERGE文の動作に影響は無いと考えられます。
</p>
<li>MERGE による（UPDATE・DELETE アクションによる）自己書き換えタプルの処理が修正されました。  (Dean Rasheed) (16)(15)</li>
<p>
ターゲット行が 2行以上のソース行と結合する場合には、SQL標準に従って、エラーを出すようになりました。これまでの実装では同時更新を伴う場合に本条件を無視することがありました。
</p>
<p>
また、BEFOREトリガや VOLATILE の関数が問い合わせで使われていることで、ターゲット行が同トランザクションのコマンドで既に更新されていた場合に、誤解を招かないエラーメッセージを出すようになりました。
</p>
<pre>
（新たに出るようになったエラーメッセージ）
ERROR:  tuple to be updated or deleted was already modified by an operation triggered by the current command
HINT:  Consider using an AFTER trigger instead of a BEFORE trigger to propagate changes to other rows.
</pre>
<li>テーブルが boolean型の列でパーティショニングされていて、問い合わせが boolean型の「IS NOT」句を持つ場合の、誤った NULLパーティションのプルーニングが修正されました。  (David Rowley) (16)(15)(14)(13)(12)</li>
<p>
「《NULL値》 IS NOT FALSE」のような条件に対して、予期せぬエラーや誤った問い合わせ結果が生じました。
</p>
<pre>
（RANGE、HASHパーティションでは予期せぬエラーが発生）
db1=# CREATE TABLE t5 (b boolean, i int) PARTITION BY RANGE (b, i);
db1=# CREATE TABLE t5p PARTITION OF t5 FOR VALUES FROM (false, 0) TO (false, 1);
db1=# SELECT * FROM t5 WHERE b IS NOT true;
ERROR:  invalid strategy number 0

（LISTパーティションの場合、NULLのパーティションが読み飛ばされる）
db1=# CREATE TABLE t5l (b bool, i int) PARTITION BY LIST (b);
db1=# CREATE TABLE t5lp PARTITION OF t5l FOR VALUES IN (NULL);
db1=# INSERT INTO t5lp VALUES (NULL, 0);
db1=# SELECT * FROM t5l WHERE b IS NOT true;
 b | i
---+---
(0 rows)
</pre>
<li>ALTER FOREIGN TABLE SET SCHEMA の実行で、所有されているシーケンスが新しいスキーマに移動するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
通常のテーブルを新しいスキーマに移動すると、そのテーブルが所有するシーケンスも（インデックスと制約とともに）そのスキーマに移動されます。 しかし、外部テーブルではこのシーケンスの移動が見落とされていました。
</p>
<li>ALTER TABLE ... ADD COLUMN の実行で、所有するテーブルと同じ永続性を持つ IDENTITY/シリアルシーケンスが作成されるようになりました。  (Peter Eisentraut) (16)(15)</li>
<p>
CREATE UNLOGGED TABLE を使用すると、所有されているシーケンスもWAL出力されなくなります。 ALTER TABLE はこの点を考慮していなかったため、追加された IDENTITY列はWAL記録されたシーケンスが含まれることになりますが、これは無意味であると判断されました。
</p>
<li>従属関係を持つ関数またはパブリケーションが存在する場合に発生するALTER TABLE ... ALTER COLUMN TYPE のエラーメッセージが改善されました。  (Tom Lane) (16)(15)(14)</li>
<pre>
db1=# CREATE TABLE t(a int);
db1=# CREATE PUBLICATION p FOR TABLE t WHERE (a > 0);
db1=# ALTER TABLE t ALTER COLUMN a TYPE bigint;
(以前発生していたエラーメッセージ)
ERROR:  unexpected object depending on column: publication of table t in publication p
(改善されたエラーメッセージ)
ERROR:  cannot alter type of a column used by a publication WHERE clause
DETAIL:  publication of table t in publication p depends on column "a"
</pre>
<li>CREATE DATABASE で、他のオプションとの一貫性を保つために、STRATEGY キーワードを大文字と小文字を区別せずに認識するようになりました。  (Tomas Vondra) (16)(15)</li>
<li>Bitmap Heap Scan によってアクセスされたヒープページのEXPLAIN のカウントが修正されました。  (Melanie Plageman) (16)(15)(14)(13)(12)</li>
<p>
以前は、可視タプルを含まないヒープページはカウントされていませんでしたが、Bitmap Index Scan によって返されるすべてのページをカウントする方がより一貫性があると判断されました。
</p>
<li>MERGE のサブプランに対する EXPLAIN 出力が修正されました。  (Dean Rasheed) (16)(15)</li>
<p>
プランツリーの他の部分にある変数を参照する SubPlan のパラメータが適切に表示されないことがありました。EXPLAIN出力中に問い合わせに含まれない ctid列が出現する誤動作が報告されました。
</p>
<li>孤児になった一時テーブルを削除するときに起きるデッドロックを回避するようになりました。  (Mikhail Zhilin) (16)(15)(14)(13)(12)</li>
<p>
一時テーブルを作成するセッションがテーブルを削除せずにクラッシュした場合、自動バキュームが最終的に孤児テーブルを削除しようとします。 ただし、同じ一時名前空間が割り当てられているセッションでも同様に削除しようとします。一時テーブルに依存関係（所有シーケンスなど）がある場合、これら 2つのクリーンアップ試行の間でデッドロックが発生する可能性がありました。
</p>
<p>
このデッドロックは「ERROR:  deadlock detected ...」エラーで検出されます。
</p>
<li>DISABLE_PAGE_SKIPPING オプションを使用した VACUUM での可視性マップ状態の更新が修正されました。  (Heikki Linnakangas) (16)</li>
<p>
見落としにより、この動作モードではすべてのヒープページがダーティになり、過剰な I/O が発生していました。また、誤って設定された可視性マップビットもクリアされませんでした。
</p>
<li>リレーションごとの凍結XID値を検査する際に競合状態を回避するようになりました。  (Noah Misch) (16)(15)(14)(13)(12)</li>
<p>
VACUUM によるリレーションごとの値からのデータベースごとの凍結XID値の計算が、別の VACUUM によるこれらの値の同時更新によって混乱する可能性がありました。
</p>
<li>並列VACUUM処理のバッファ使用量レポートが修正されました。  (Anthonin Bonnefoy) (16)(15)</li>
<p>
並列ワーカによって実行されたバッファアクセスが VERBOSEモードで報告される統計にカウントされませんでした。
</p>
<li>プランナで、同値クラスから生成された結合条件が確実に正しい計画レベルに適用されるようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
PostgreSQL 16 より前のバージョンでは、生成された条件が外部結合の上（後）で評価されるべき時に、外部結合の下で評価される可能性があり、誤った問い合わせ結果が発生する可能性がありました。一部の SELECTアームの結合列に定数出力を持つ UNION ALL ツリーへの結合を検討する場合には、16.x を含む全バージョンに同様の危険性がありました。
</p>
<li>ORDER BY または DISTINCTオプションを使用した集計関数の計画時に発生するエラー「ERROR:  could not find pathkey item to sort」が修正されました。  (David Rowley) (16)</li>
<p>
これは PostgreSQL 16.1 で適用された修正（31番の項目）に似ていますが、本修正では並列プランに対して問題解決します。
</p>
<li>一部のウィンドウ関数への潜在的に間違った最適化が防止されました。  (David Rowley) (16)(15)</li>
<p>
非定数引数を使用した ntile() および count() の Run Condition の最適化を無効にするようになりました。これにより副問合せで発生する可能性のある誤動作が回避されます。誤動作で典型的には「ERROR:  WindowFunc not found in subplan target lists」のようなエラーが生じます。
</p>
<li>移動しないウィンドウフレームで移動集約モードを無駄に使用しないようになりました。  (Vallimaharajan G) (16)(15)(14)(13)(12)</li>
<p>
通常の集約関数がウィンドウ関数として使用されて、ウィンドウフレームの開始が UNBOUNDED PRECEDING として指定されている場合、そのフレームの先頭位置は移動できないため、特別な (そしてより高価な) 移動集計モードを使用する必要はありません。この最適化は当初から意図されていましたが、コーディングエラーのために働いていませんでした。
</p>
<li>GEQO でパーティションごとの結合を計画する時に、解放済データの使用を避けるようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
通常これはクラッシュまたは予期せぬエラーメッセージを引き起こします。
</p>
<li>Memoize で使用中のデータを解放しないようになりました。  (Tender Wang, Andrei Lepikhov) (16)(15)(14)</li>
<p>
運用ビルドでは、解放されたデータは使用前に上書きされない可能性が高いため、このエラーは頻繁には問題を引き起こしませんでした。潜在的にはクラッシュを引き起こす可能性があります。
</p>
<li>「ERROR:  requested statistics kind "X" is not yet built」というメッセージで誤って報告されていた統計の種類コードが修正されました。  (David Rowley) (16)(15)(14)(13)(12)</li>
<p>
エラー発生時に「X」部分が誤って出力されていました。
</p>
<li>「catcache list」オブジェクトを線形検索する代わりにハッシュテーブルを使用するようになりました。  (Tom Lane) (16)</li>
<p>
この変更により、何千ものロールを持つインストレーションにおけるいくつかの操作で報告された性能問題（GRANT ROLE で数十秒かかる等）が解決されます。
</p>
<li>FROM で RECORD を返す関数についてより注意深い実装になりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
このような関数呼び出しの出力列は、列名とデータ型を指定する AS句によって定義する必要があります。実際の関数の出力値がそれと一致しない場合、実行時にエラーになるはずです。
</p>
<p>
しかし、一部のコードパスでは実際の値が通常より早くに検査され、不一致のときに、奇妙なエラーが発行されたり、エラーにならなかったり、アサート失敗が発生したりする可能性がありました。
</p>
<pre>
（修正前バージョンでは結果が返るが、列数不一致でエラーになるのが正しい）
db1=# WITH a(b) AS (VALUES (ROW(1,2,3)))
        SELECT * FROM a, coalesce(b) AS c(d int, e int);
    b    | d | e
---------+---+---
 (1,2,3) | 1 | 2
(1 row)
</pre>
<li>行型を返す SQL言語プロシージャに関する混乱が修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
単一の複合型列を返す SQL言語で実装されたプロシージャでは、アサート失敗またはコアダンプが発生する可能性がありました。
</p>
<pre>
（クラッシュ動作例）
db1=# CREATE TYPE typ AS (a INT, b INT);
db1=# CREATE PROCEDURE p_udt(OUT typ) LANGUAGE SQL AS $$ SELECT (1, 2); $$;
db1=# CALL p_udt(NULL);
server closed the connection unexpectedly
</pre>
<li>内部実装のためのいくつかの再帰関数に保護的なスタック深さ検査が追加されました。  (Egor Chindyaskin) (16)(15)(14)(13)(12)</li>
<li>date_bin() の丸めミスとオーバーフローの危険性が修正されました。  (Moaaz Assali) (16)(15)(14)</li>
<p>
関数 date_bin(stride, source, origin) で、source のタイムスタンプが origin のタイムスタンプより前にあり、それらの差がすでに stride の正確な倍数になっている場合、コードは stride を誤って減算していました。誤った問い合わせ結果が発生します。
</p>
<pre>
（誤動作例）
db1=# select date_bin('30 minutes'::interval, '2024-01-01 15:00:00'::timestamp, '2024-01-01 17:00:00'::timestamp);
      date_bin
---------------------
 2024-01-01 14:30:00
</pre>
<p>
また、整数オーバーフローも検出するようになりました。いずれも誤った問い合わせ結果の原因となります。
</p>
<li>timestamp型の値に interval型の値を足し引きするときに整数オーバーフローを検出するようになりました。  (Joseph Koshakow) (16)(15)(14)(13)(12)</li>
<p>
timestamp型の範囲を越えていて「ERROR:  timestamp out-of-range」を出すべき一部の場合で、ERROR ではなく誤った問い合わせ結果を返していました。
</p>
<li>pg_get_expr() での競合状態を回避するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
引数によって参照されるリレーションが同時に削除された場合、関数は NULL を返すべきところですが、エラーになっていました。
</p>
<li>XIDステータス関数での古いトランザクションID の検出が修正されました。  (Karina Litskevich) (16)(15)(14)(13)(12)</li>
<p>
2^31 を超える過去のトランザクションID が最近のものとして誤認され、pg_xact_status() または txid_status() の誤動作につながる可能性がありました。
</p>
<li>テーブルのフリースペースマップが、テーブルの終端を過ぎたページを返さないようになりました。  (Ronan Dunklau) (16)(15)(14)</li>
<p>
フリースペースマップ（空き領域マップ）は WAL に記録されないため、OS のクラッシュ、レプリカの昇格、PITR リストアなどのエッジケースで、「ERROR: could not read block」が発生する可能性がありました。
</p>
<li>WaitEventSetWait で待機中にエラーが生じた場合の、ファイルディスクリプタのリークが修正されました。  (Etsuro Fujita) (16)(15)(14)(13)(12)</li>
<p>
WaitEventSetWait は PostgreSQL の内部実装関数です。
</p>
<li>外部テーブルへの非同期 Append を伴う問い合わせで、例外スタックが壊れることがあり修正されました。  (Alexander Pyhalov) (16)(15)(14)</li>
<p>
実装内部の状態として、待機条件が設定されていない場合に発生します。実際の障害発生例は報告されていませんが、エラー処理で奇妙な動作やクラッシュが生じる可能性が考えられます。
</p>
<li>インデックスの再作成中にインデックスにアクセスすると、エラーを出すようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
以前は単なるアサーションチェックでしたが、通常の実行時エラーに昇格しました。また、テーブルにアクセスするユーザ定義関数を含む式インデックスを再作成するときに、より的確なエラーメッセージ「ERROR:  cannot access index ... while it is being reindexed」が出ます。
</p>
<pre>
（以前のエラー発生例）
db1=# CREATE TABLE t34(i int PRIMARY KEY);
db1=# CREATE FUNCTION f34(i int) RETURNS int IMMUTABLE LANGUAGE SQL
        AS $$ SELECT i FROM t34 WHERE i = $1 $$;
db1=# CREATE INDEX idx34 ON t34 ( f34(i) );
db1=# INSERT INTO t34 VALUES (1);
db1=# REINDEX INDEX idx34;
ERROR:  could not read block 0 in file "base/26295/26339": read only 0 of 8192 bytes
CONTEXT:  SQL function "f34" during startup
</pre>
<li>name型の列に対する Index Only Scan で、正しい値が返されるようになりました。  (David Rowley) (16)(15)(14)(13)(12)</li>
<p>
以前は、インデックスに物理的に格納されている値ではなく、その値へのポインタが呼び出し元に返されていました。これが valgrind でテストしたときに不適切なメモリアクセスとして検出されました。理論的にはクラッシュが発生する可能性がありますが、実際の発生は報告されません。
</p>
<li>レプリケーションスロットの無効化時に生じる競合状態が修正されました。  (Bertrand Drouvot) (16)</li>
<p>
これにより誤った競合原因を報告する可能性がありました。
</p>
<li>論理レプリケーションでテーブル同期操作が必要かどうかを決定する際の競合状態が修正されました。  (Vignesh C) (16)(15)</li>
<p>
サブスクライバがどのテーブルを同期する必要があるかを特定している間に到着した無効化イベントが忘れられていて、新たに同期が必要なテーブルがタイムリーに処理されない可能性がありました。
</p>
<li>4GB を超える DSM（動的共有メモリ）割り当てによるクラッシュが修正されました。  (Heikki Linnakangas) (16)(15)(14)(13)(12)</li>
<li>新しいサーバーセッションのクライアントソケットを非ブロッキングモードにできない場合は、そのセッションを切断するようになりました。  (Heikki Linnakangas) (16)(15)(14)(13)(12)</li>
<p>
理論的にはブロッキングモードのソケットで操作することも可能でしたが、長い間完全には機能していませんでした。後で誤動作するよりは接続開始時に失敗した方がよい判断されました。
</p>
<li>OpenSSL 3.0.0 以降での不適切なエラー報告が修正されました。  (Heikki Linnakangas, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
OpenSSL によって、システムより報告されたエラーを PostgreSQL は、読み取り可能なものではなく、数値のエラーコードで報告していました。
</p>
<li>Windows で API関数 getaddrinfo() のエラー報告処理のスレッドセーフ性が修正されました。  (Thomas Munro) (16)</li>
<p>
マルチスレッドの libpq クライアントプログラムは、ネットワークルックアップの失敗後に、誤った、あるいは破損したエラーメッセージを受け取る可能性がありました。
</p>
<li>libpq と ecpglib が、Cライブラリ関数 bindtextdomain() への同時呼び出しを回避するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
GNU gettext の実装では同時呼び出しは問題ないようですが、Windows で利用可能なバージョンではそうではありません。
</p>
<li>ecpg のプリプロセッサがクラッシュする問題が修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
プログラムがプリプロセッサのコマンド行で定義されたマクロを再定義しようとした場合に発生します。
</p>
<li>ecpg が「unspported feature will be passed to server 」という誤った警告を出さないようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<li>ecpg を Infomix互換モードで実行したときに、追加される関数 intoasc() の結果文字列が正しくゼロ終端されるようになりました。  (Oleg Tselebrovskiy) (16)(15)(14)(13)(12)</li>
<li>initdb の -c オプションでは、大文字と小文字を区別せずにパラメータ名を照合するようになりました。  (Tom Lane) (16)</li>
<p>
サーバはパラメータ名の大文字と小文字を区別せずに処理するため、このコードも同様に処理する必要があります。これにより、生成された postgresql.conf ファイルに冗長なエントリが追加されることを回避します。
</p>
<li>psql でクエリがキャンセルされた後にクエリ結果がリークしないようになりました。  (Tom Lane) (16)(15)</li>
<p>
この問題は「\;」で区切られたクエリ文字列内の、最後のクエリでないクエリのキャンセルの場合にのみ発生していました。
</p>
<li>ロールのコメントが存在する場合、 --no-role-passwords の設定に関係なく、ロールのコメントがダンプされるように pg_dumpall が修正されました。  (Daniel Gustafsson, &Aacute;lvaro Herrera) (16)(15)(14)(13)(12)</li>
<li>MacOS 上で、pg_basebackup、pg_checksums、および pg_rewind で .DS_Store という名前のファイルをスキップするようになりました。  (Daniel Gustafsson) (16)(15)</li>
<p>
これにより Finder がそのようなファイルを作成するときの問題が回避されます。
</p>
<li>PL/pgSQL の式に続く単一行コメント (「--」形式のコメント) の解析が修正されました。  (Erik Wienhold, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
この間違いにより、このようなコメントが PL/pgSQL CASE ステートメントの「WHEN」式の後に続く場合、解析エラーが発生していました。
</p>
<pre>
（エラー発生例）
db1=# CREATE FUNCTION f50(p1 int) RETURNS text LANGUAGE plpgsql AS $$
      BEGIN
        CASE p1
        WHEN 1 -- comment before THEN
          THEN RETURN 'one';
        ELSE RETURN 'other';
        END CASE;
      END; $$;

db1=# SELECT f50(1);
ERROR:  syntax error at end of input
LINE 1: SELECT "__Case__Variable_2__" IN (1 -- comment before THEN)
                                                                   ^
QUERY:  SELECT "__Case__Variable_2__" IN (1 -- comment before THEN)
CONTEXT:  PL/pgSQL function f50(integer) line 3 at CASE
</pre>
<li>contrib/amcheck で、短いヘッダ値と長いヘッダ値による誤った一致の失敗を報告しないようになりました。  (Andrey Borodin, Michael Zhilin) (16)(15)(14)(13)(12)</li>
<p>
ヒープタプルやインデックスタプルの可変長データは、作成時に適用された圧縮パラメータに応じて、短いヘッダか長いヘッダを持つことができます。これらのケースで違いがある場合にエラーを出すのではなく、同等なものとして扱うようになりました。
</p>
<pre>
（エラー例：論理的には同じ 2タプルがあり、ヘッダ長が 1バイトと 4バイトで異なる）
db1=# CREATE TABLE t51 (v text);
db1=# ALTER TABLE t51 ALTER COLUMN v SET STORAGE PLAIN;
db1=# INSERT INTO t51 VALUES ('x');
db1=# COPY t51 TO '/tmp/t51.dat';
db1=# COPY t51 FROM '/tmp/t51.dat';
db1=# CREATE INDEX t51_idx ON t51(v);
db1=# CREATE EXTENSION IF NOT EXISTS amcheck;
db1=# SELECT bt_index_check('t51_idx', true);
ERROR:  heap tuple (0,2) from table "t51" lacks matching index tuple within index "t51_idx"
</pre>
<li>BRIN 出力関数のバグが修正されました。  (Tomas Vondra) (16)(15)(14)</li>
<p>
これらの出力関数は、contrib/pageinspect でインデックスエントリを表示するためにのみ使用されるため、誤りが実際に問題になることはほとんどありません。
</p>
<li>contrib/postgres_fdw で、定数によるソート要求を発行しないようになりました。  (David Rowley) (16)(15)(14)(13)(12)</li>
<p>
これは、定数発行サブクエリと「UNION ALL」が関係する場合に発生する可能性がありました。もちろん、定数による並べ替えは無意味ですが、リモートサーバーによって誤って解釈され、「ERROR:  ORDER BY position N is not in select list」が発生する危険性もありました。
</p>
<li>contrib/postgres_fdw でリモートセッションのタイムゾーンを「UTC」ではなく「GMT」に設定するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
これは実用上は同じ結果になるはずです。しかし、「GMT」はサーバ内のハードウェアに組み込まれているコードによって認識されますが、「UTC」はタイムゾーンデータベースで検索されます。 そのため、リモートサーバのタイムゾーンデータベースにエントリが欠落しているという万が一の事態が発生した場合、古いコードでは失敗する可能性がありました。
</p>
<li>contrib/xml2 において、最近の libxml2 のバージョンで非推奨となったライブラリ関数の使用を避けるようになりました。  (Dmitry Koval) (16)(15)(14)(13)(12)</li>
<li>LLVM 18 との非互換性が修正されました。  (Thomas Munro, Dmitry Dolgov) (16)(15)(14)(13)(12)</li>
<li>「make check」が musl C ライブラリで動作できるようになりました。  (Thomas Munro, Bruce Momjian, Tom Lane) (16)(15)(14)(13)(12)</li>
<li>CREATE RULE コマンドで、既にコマンド内の外側で使用されているテーブルをビューに変換することが禁止されました。  (Tom Lane) (15)(14)(13)(12)</li>
<p>
これにより、クラッシュの可能性が回避されました。
</p>
<pre>
（クラッシュ例: 変換対象の t2 が同コマンド内の外側で参照されている）
db1=# CREATE TABLE t1 (id int, v text);
db1=# CREATE TABLE t2 (id int, v text);
db1=# CREATE FUNCTION convert_tbl2view() RETURNS SETOF t1 LANGUAGE plpgsql AS
      $$ BEGIN EXECUTE
         'CREATE RULE "_RETURN" AS ON SELECT TO t2 DO INSTEAD SELECT * FROM t1';
         RETURN QUERY EXECUTE 'SELECT * FROM t1 LIMIT 0'; END; $$;
db1=# SELECT * FROM t2 UNION ALL SELECT * FROM convert_tbl2view();
server closed the connection unexpectedly
</pre>
</ol>

<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 13.14 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/13-14/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 00:05:58 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 13]]></category>
		<category><![CDATA[PostgreSQL 13.13]]></category>
		<category><![CDATA[PostgreSQL 13.14]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=14421</guid>

					<description><![CDATA[このリリースは 13.13 からの修正リリース（2024年 2月 8日リリース）です。 13.X からのアップデートではダンプ、リストアは不要です。 しかしながら、本バージョンでの GINインデックスの修正については、イ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 13.13 からの修正リリース（2024年 2月 8日リリース）です。<br />
13.X からのアップデートではダンプ、リストアは不要です。</p>
<p>しかしながら、本バージョンでの GINインデックスの修正については、インデックスが既に破壊されている可能性もあるためアップグレード後にインデックス再作成することを推奨します。<br />
また、13.13 よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/13-13/ ">13.13 のリリース情報</a>も参照してください。</p>
<p><span id="more-14421"></span></p>
<h3>PostgreSQL 13.13 から 13.14 への変更点</h3>
<p>16.2、15.6、14.11、13.14、12.18 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>REFRESH MATERIALIZED VIEW CONCURRENTLY 内でのセキュリティ上の制限を厳格化しました。  (Heikki Linnakangas) (16)(15)(14)(13)(12)</li>
<p>
同時リフレッシュのある一段階が弱いセキュリティ制限のもとで実行されていました。マテリアライズドビューの所有者が、何らか説きつけて、スーパーユーザや他の高権限ユーザにそのビューの同時リフレッシュをさせた場合、REFRESH を実行したユーザの権限でコードを実行させることができました。
</p>
<p>
全てのユーザ定義コードはマテビュー所有者として実行されるように修正されました。これが期待される動作でした。
</p>
<p>
この誤りを使った権限奪取は PostgreSQL 16.x では実施できないことが知られていて、おそらく 16.x では実際には脆弱性が無いと見られます。(CVE-2024-0985)
</p>
<li>JIT のインライン化を実行する時のメモリリークが修正されました。  (Andres Freund, Daniel Gustafsson) (16)(15)(14)(13)(12)</li>
<p>
多数の JITコンパイルの後にバックエンドプロセスがメモリ不足状態になることが報告されていました。
</p>
<li>不正なパーティション結合のプランが生成されないように修正されました。  (Richard Guo) (16)(15)(14)(13)(12)</li>
<p>
LATERAL参照を伴うまれな状況で、不正な実行プランが作られる可能性がありました。影響を受ける場合には、誤った問い合わせ結果が返る、「ERROR:  variable not found in subplan target list」などの奇妙なエラーになる、あるいは、エグゼキュータでプロセスがクラッシュする可能性がありました。
</p>
<li>PlaceHolderVar でサブクエリ出力式の不正なラッピングが修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
サブクエリが、外部結合の下にあって、外部結合のスコープ外にあるものを LATERAL参照する出力列を持っているとき、誤った問い合わせ結果が生じる可能性がありました。外部結合により生じるべき出力列の NULL が、異なる値になる可能性がありました。
</p>
<p>
PlaceHolderVar はプランナの実装コードにおいて別のプランノード結果から値が充当される変数を意味します。
</p>
<li>ウィンドウ関数の条件実行（EXPLAIN で「Run Condition:」と出力される動作）の誤動作が修正されました。  (Richard Guo) (16)(15)</li>
<p>
本誤りにより予期せぬエラー「ERROR:  WindowFunc not found in subplan target lists」が生じるおそれがありました。
</p>
<li>Memoize プランについて内側のユニーク性の検出について修正されました。  (Richard Guo) (16)</li>
<p>
この誤りにより「ERROR:  cache entry already complete」が生じるおそれがありました。
</p>
<li>定数畳み込みをするフィールドを選択するときの varnullingrels の計算が修正されました。  (Richard Guo) (16)</li>
<p>
「ERROR:  wrong varnullingrels (b) (expected (b 3)) for Var 2/2」といった予期せぬエラーが発生することがありました。
</p>
<p>
varnullingrels はプランナの実装コードにおける変数ノードの修飾情報の一つです。
</p>
<li>MERGE がパーティションにまたがる更新をするときに、不適切な動作を行わないようになりました。  (Dean Rasheed) (16)(15)</li>
<p>
パーティションテーブルに対して MERGE UPDATE 動作をするときに、パーティションキーを変更するために UPDATE が DELETE と INSERT に置き換えられる場合に「AFTER UPDATE ROW」トリガを発効しないようになりました。RLS 検査などの他の UPDATE 後のアクションも同様に行われなくなります。
</p>
<p>
これらのアクションは一般的には失敗します。このことは通常の UPDATE で実行しない理由であり、MERGE でも実行すべきではありません。
</p>
<li>パーティションにまたがる MERGE の更新で、BEFORE ROW DELETE トリガが動作するようになりました。  (Dean Rasheed) (16)(15)</li>
<p>
このようなトリガが NULL を返すことで更新を妨げようとした場合、MERGE がエラーやアサート失敗を引き起こしていました。
</p>
<p>
「ERROR:  could not open file "base/16384/16393.1" (target block 3081245700): previous segment is only 1 blocks」というエラーが出るケースが報告されました。
</p>
<li>BEFORE ROW UPDATEトリガで PINされていないバッファへのアクセスが防止されました。  (Alexander Lakhin, Tom Lane) (16)(15)(14)</li>
<p>
更新中タプルが別セッションによって更新されて別ページに移動されたばかりの場合、バッファへの PINなしに新しいタプルバージョンからデータを取得しようとするタイミングがありました。これにより原理的には、新タプルの未更新列にガベージデータが表示される可能性がありました。
</p>
<p>
実際に問題が生じる可能性は低いと見られます。
</p>
<li>パラレルハッシュ結合で巨大な共有メモリ領域の要求が回避されました。  (Thomas Munro, Andrei Lepikhov, Alexander Korotkov) (16)(15)(14)(13)(12)</li>
<p>
上限値が大きすぎたために、予想ハッシュテーブルサイズが大きい場合に「ERROR:  invalid DSA memory alloc request size ..」エラーが発生することがありました。
</p>
<li>一時テーブルを拡張しようとしてエラーが発生するときに、ローカルバッファ状態が破損されることがあり、修正されました。  (Tender Wang) (16)</li>
<p>
ディスク不足時にエラーが生じた後、アサート失敗が生じるケースが報告されました。
</p>
<li>複数引数を持つ DISTINCT 指定された集約を評価するときに、誤ったタプルスロットの使用が修正されました。  (David Rowley) (16)</li>
<p>
この誤りにより、エグゼキュータで「ERROR:  attribute 1 of type record has wrong type」などのエラーが生じる可能性がありました。
</p>
<pre>
（エラー発生例）
db1=# SELECT
        string_agg(DISTINCT 'a', ','),
        sum((SELECT sum(1) FROM (VALUES(1)) b(id) WHERE a.id = b.id))
        FROM unnest(array[1]) a(id);
ERROR:  attribute 1 of type record has wrong type
DETAIL:  Table has type text, but query expects integer.

（正しい応答）
 string_agg | sum
------------+-----
 a          |   1
(1 row)
</pre>
<li>外部キーの制約トリガで更新されるタプルが追加の可視性検査に失敗するときに、heap_update() と heap_delete() でアサート失敗にならないように修正されました。  (Alexander Lakhin) (16)(15)(14)(13)(12)</li>
<p>
この誤りはアサートを無効にした実運用むけビルドでは、何ら影響はありません。
</p>
<li>複雑な継承テーブルツリーに対する ALTER TABLE .. ADD COLUMN でエラーになることがあり、修正されました。  (Tender Wang) (16)(15)(14)(13)(12)</li>
<p>
孫テーブルが複数の中間の親テーブルを通して新たな列を継承した場合、「ERROR:  tuple already updated by self」エラーが生じました。
</p>
<li>ALTER TEXT SEARCH CONFIGURATION ... MAPPING で指定するトークン名が重複している場合の問題が修正されました。  (Tender Wang, Michael Paquier) (16)(15)(14)(13)(12)</li>
<p>
これまでは「ERROR:  tuple already updated by self」が発生していました。
</p>
<li>DROP RULE で重複したロール名を指定した場合について修正されました。  (Michael Paquier) (16)</li>
<p>
これまでは「ERROR:  tuple already updated by self」が発生していましたが、これからは重複した指定を無視してエラーを出さないようになります。
</p>
<pre>
（これまでのエラー例）
db1=# CREATE ROLE u;
db1=# DROP ROLE u, u;
ERROR:  tuple already updated by self
</pre>
<li>DROP STATISTICS が関連するテーブルに適切にロックを取得するようになりました。  (Tomas Vondra) (16)(15)(14)(13)(12)</li>
<p>
ロック取得不足のため、DROP STATISTICS を ANALYZE と同時に実行した場合に、「ERROR:  tuple concurrently deleted」が発生していました。
</p>
<li>GENERATED と DEFAULT の式で関数の揮発性検査が修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
これらの場所では、関数のデフォルト引数に VOLATILE 関数が指定されているのを検出できなかったり、使われる具体的なデータ型について実際には IMMUTABLE であるのに多様関数を VOLATILE と判断したりする可能性がありました。
</p>
<p>
これにより GENERATED句を不適切に拒否または受け入れしたり、ALTER TABLE .. ADD COLUMN で定数デフォルト値の最適化を誤って適用したりする可能性がありました。
</p>
<li>フィールドを TOAST から展開するときに、新たなカタログキャッシュエントリが古くなったことを検出するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
カタログタプルの行外フィールドは何であれ、カタログキャッシュに挿入する前に、TOAST展開されます。これはカタログキャッシュエントリを無効化するかもしれないデータベースアクセスと関わりますが、新たなエントリはまだキャッシュに存在していません。その結果、既に古くなったキャッシュエントリが作られて永続化するかもしれないという競合動作になります。これにより（例えば DDL の同時実行で稀に）予期せぬ振る舞いがもたらされました。
</p>
<p>
TOAST展開後にタプルの可視性を再チェックすることで修正されました。
</p>
<li>一部プラットフォームにおけるエッジケースの整数オーバーフロー検知の誤りが修正されました。  (Dean Rasheed) (16)(15)(14)(13)(12)</li>
<p>
「0 - INT64_MIN」の計算はオーバーフローエラーとなるべきで、大部分のプラットフォームではそうなっています。しかしながら、組み込みの整数オーバーフローが無く、128-bit整数も無いプラットフォームの場合、オーバーフローを検知できず、INT64_MIN の値を返していました。
</p>
<li>timestamp型の値に interval型の値を足し引きするときに、ユリウス日のオーバーフローを検出するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
timestamp型の範囲を越えていて「ERROR:  timestamp out-of-range」を出すべき一部の場合で、ERROR ではなく誤った問い合わせ結果を返していました。
</p>
<li>interval_mul() と interval_div() でオーバーフロー検査を更に追加しました。  (Dean Rasheed) (16)(15)(14)(13)(12)</li>
<p>
interval型の値の掛け算と割り算で、「ERROR:  interval out of range」を出すべき一部ケースで、ERROR ではなく誤った問い合わせ結果を返していました。
</p>
<li>内部実装関数 scram_SaltedPassword() が割り込み可能になりました。  (Bowen Shi) (16)</li>
<p>
大きな scram_iterations（イテレーション回数が多い）場合に、本関数は時間を要します。本関数は例えば password_encryption が scram-sha-256 であるときに ALTER ROLE ... PASSWORD '...' でパスワード変更するときに使われます。本修正により本関数実行中に問い合わせのキャンセルが可能になりました。
</p>
<li>設定パラメータ stats_fetch_consistency が変更されたときに、キャッシュされた統計情報が確実に破棄されるようになりました。  (Shinya Kato) (16)(15)</li>
<p>
一部のコードパスで、古い統計情報が返される可能性がありました。本修正は以下のビューの応答に影響があります。
</p>
<pre>
 pg_stat_archiver
 pg_stat_bgwriter
 pg_stat_checkpointer
 pg_stat_io
 pg_stat_slru
 pg_stat_wal
</pre>
<li>pg_file_settingsビューが backend および superuser-backend コンテキストの設定について未適用の値の妥当性を検査するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
これまで、該当の設定パラメータについて無効な値であっても error列に何も出力されませんでした。
</p>
<pre>
(16.x での該当設定パラメータ)
 ignore_system_indexes
 jit_debugging_support
 jit_profiling_support
 log_connections
 log_disconnections
 post_auth_delay
</pre>
<li>新たなパーティションインデックスに既存インデックスを当てはめるときに、照合順序も一致させるようになりました。  (Peter Eisentraut) (16)(15)(14)(13)(12)</li>
<p>
これまではパーティションキーの対応する要素から、異なる照合順序を持つインデックスも受け入れていて、誤動作を引き起こす可能性がありました。
</p>
<li>パーティションインデックスに対する REINDEX INDEX で、子インデックスが同時に削除された場合のエラーを回避するようになりました。  (Fei Changhong) (16)(15)(14)</li>
<p>
予期せぬ「ERROR:  could not open relation with OID」が発生していました。
</p>
<li>GINインデックスの内部ページの不完全な分割をクリーンアップする時の、不十分なロックが修正されました。  (Fei Changhong, Heikki Linnakangas) (16)(15)(14)(13)(12)</li>
<p>
バッファへの（排他ロックではなく）共有ロックでこれを行おうとしていましたが、二つのプロセスが同時にクリーンアップを行おうとするとインデックス破損が生じる可能性がありました。
</p>
<li>GINインデックスの挿入で早すぎるバッファPIN の解放が回避されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
インデックスのルートページの分割が自身の挿入と同時に生じると、「ERROR:  buffer NNNN is not owned by resource owner」になる可能性がありました。
</p>
<li>パーティションテーブルに対する SP-GiSTインデックス のエラーが回避されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
このようなインデックスを使用しようとして、「ERROR:  could not open file "pg_tblspc/0/PG_16_202307071/0/0": No such file or directory」といったエラーが生じる可能性がありました。
</p>
<li>ラージオブジェクトの所有者検査が修正されました。  (Tom Lane) (16)</li>
<p>
所有者権限が必要なラージオブジェクト操作（例えば GRANT や COMMENT）で、所有者ユーザであってもスーパーユーザでない限り、「ERROR:  unrecognized class ID: 2613」といったエラーが出て失敗しました。
</p>
<li>ラージオブジェクトの所有者変更の報告について修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
何もしない ALTER LARGE OBJECT OWNER コマンド（元の所有者を指定するなど）が、誤った class ID を PostAlterHook に渡していました。本フックを使っている拡張に混乱をもたらしていたと考えられます。
</p>
<li>EXPLAIN (BUFFERS) での I/O タイミングデータの報告が修正されました。  (Michael Paquier) (16)(15)</li>
<p>
「shared/local」ラベルの数は実際には共有バッファだけを参照していました。本修正で、このラベルは「shared」に変更されました。
</p>
<li>CREATE DATABASE の耐久性が保証されるようになりました。  (Noah Misch) (16)(15)</li>
<p>
これまで、CREATE DATABASE の実行中や直後に OSクラッシュが生じた場合、リカバリに失敗したり、起動後にそのデータベースへの接続に失敗する可能性がありました。同様のタイミングでベースバックアップを取得した場合にも、そのバックアップを使用する時に似た問題が起きる可能性がありました。症状としては、データベースディレクトリや PG_VERSIONファイル、pg_filenode.mapファイルが欠損するか空になります。
</p>
<li>バックアップからのリカバリ開始時、終了時に「LOG」メッセージをより多く出すようになりました。  (Andres Freund) (16)(15)</li>
<p>
リカバリの問題を診断するのに役立つ追加情報がマスタプロセスのログとして提供されます。具体的には以下のメッセージです。
</p>
<pre>
LOG:  starting backup recovery with redo LSN XX/XXXXXXXX, checkpoint LSN XX/XXXXXXXX, on timeline ID NN
LOG:  restarting backup recovery with redo LSN XX/XXXXXXXX
LOG:  completed backup recovery with redo LSN XX/XXXXXXXX and end LSN XX/XXXXXXXX
</pre>
<li>スタンバイサーバがサブトランザクションでデッドインデックスタプルを不正に処理するのが、防止されました。  (Fei Changhong) (16)(15)(14)(13)(12)</li>
<p>
実装においてサブトランザクションで startedInRecoveryフラグが正しく設定されていませんでした。これはデッドインデックスタプルの処理にのみ影響があります。この誤りにより、サブトランザクション中の問い合わせが返すべき（プライマリではデッドだがスタンバイでは未だ有効な）インデックスエントリを無視してしまう可能性があり、誤った問い合わせ結果が生じます。あるいは、未だプライマリではデッドになっていないインデックスエントリにデッドと早すぎる印付けをしてしまう可能性がありました。後者は深刻な結果になるか明らかではありませんが、想定された動作ではありません。
</p>
<li>walreceiverプロセスのシグナル処理が修正されました。  (Heikki Linnakangas) (16)</li>
<p>
レプリケーション接続確立まで待つ間、walreceiver を SIGTERM に応答しないようにした変更を、旧に戻しました。以前の変更内容では、スタンバイ昇格が妨げられることがありました。
</p>
<li>レコードが WALデコーディングのバッファに収まるかどうかの検査で、整数オーバーフローの危険があり、修正されました。  (Thomas Munro) (16)(15)</li>
<p>
このバグは 64-bitプラットフォーム上で 32-bit ビルドした PostgreSQL を稼働させる場合を除き、顕在化しないと考えられます。
</p>
<li>ロジカルレプリケーションの apply worker と、その tablesync worker、および、ALTER SUBSCRIPTION を試みるセッションプロセスの間のデッドロックが修正されました。  (Shlok Kyal) (16)(15)(14)(13)(12)</li>
<p>
このデッドロックの一端はロック待ちと無関係であるため、デッドロックに陥ると自動では検出できず、（コマンドキャンセルやプロセス停止など）手動で介入しない限り永続的に止まってしまいます。
</p>
<p>
tablesync worker はロジカルレプリケーションのテーブル初期同期を行うものです。apply worker は変更差分の適用を行います。
</p>
<li>pgoutput 論理レプリケーション・プラグインで、列のデフォルト値が正しく転送されることが保証されました。  (Nikhil Benesch) (16)(15)</li>
<p>
新しい列にデフォルトの定数値を持つ ALTER TABLE ... ADD COLUMN ... は、既存のタプルの書き換えをせず、代わりにタプルの読み取りコードが正しいデフォルト値を挿入することを期待していました。
</p>
<p>
その後、そのテーブルでレプリケーションが開始された場合、pgoutput は正しいデフォルト値の代わりに NULL を送信し、サブスクライバで不正なレプリケーションを引き起こしていました。
</p>
<li>列のないテーブルに対する論理レプリケーションの初期同期の失敗が修正されました。  (Vignesh C) (16)(15)</li>
<p>
このケースでは、不適切な形式の COPY コマンドが生成されていました。
</p>
<li>使用する前にサブスクリプションの接続文字列を再検証するようになりました。  (Vignesh C) (16)</li>
<p>
これは、password_required=true のサブスクリプションがスーパーユーザを所有者として接続文字列にパスワードなしで作成されたけれども、その後に所有者が非スーパーユーザに変更されたケースを検出することを目的としています。
</p>
<p>
これまではパスワードファイルや PGPASSWORD環境変数でパスワードが供給されれば、接続文字列にパスワードの無いサブスクリプションを一般ユーザで利用可能でした。
</p>
<li>新しいクライアントが、サーバのパスワードチャレンジに応答せずに切断した場合に、CheckPWChallengeAuth が正しいステータスコードを返すようになりました。  (Liu Lang, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
CheckPWChallengeAuth は PostgreSQL実装内部の関数です。これまで一部ケースでこの場合をログ出力されるエラーとして扱っていました。これは意図したものではなく、psql のような一般的なクライアントで頻繁にある動作であるため、ログスパムの生成につながっていました。
</p>
<p>
また、この誤りは ClientAuthentication_hook を使用する拡張を混乱させたかもしれません。
</p>
<li>OpenSSL 3.2 との非互換性が修正されました。  (Tristan Partin, Bo Andreson) (16)(15)(14)(13)(12)</li>
<p>
「data」フィールドの使用に代えて BIO「app_data」フィールドを使用するようになりました。以前のバージョンでは問題ありませんでしたが、3.2 ではクラッシュや二重解放のエラーを引き起こしていました。
</p>
<p>
「LOG: could not accept SSL connection: Socket operation on non-socket」というエラーが出てSSL接続に失敗するケースが報告されました。
</p>
<li>OpenSSLがエラー時に errno を設定しないことに、より注意するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
以前の実装では、errno が設定されていない場合、報告されたエラーの原因は EOF の読み込みだと決めつけていました。 これにより「could not accept SSL connection: Success」のような奇妙なエラー報告が稀に発生していました。
</p>
<li>外部データラッパーの ForeignAsyncRequest関数が失敗した場合の、ファイルディスクリプタのリークが修正されました。  (Heikki Linnakangas) (16)(15)(14)</li>
<p>
外部テーブルから構成されたパーティションテーブルへの問い合わせなどで、非同期実行が使われたときに ERROR を出す場合に、該当している可能性があります。
</p>
<li>CREATE SUBSCRIPTION の接続文字列検証における軽度のメモリリークが修正されました。  (Jeff Davis) (16)</li>
<li>ファイル関連のシステムコールによる ENOMEM エラーを「internal_error」(SQLSTATE: XX000) ではなく、「out_of_memory」(SQLSTATE: 53200) として報告するようになりました。  (Alexander Kuzmenkov) (16)(15)(14)(13)(12)</li>
<li>PL/pgSQL の中で SQL標準形式の本体を持つ CREATE FUNCTION / CREATE PROCEDURE をサポートするようになりました。  (Tom Lane) (16)(15)(14)</li>
<p>
以前は、関数本体にセミコロンが含まれているため、構文エラーとなっていました。
</p>
<pre>
（本マイナーバージョンから実行可能になった PL/pgSQL の例）
db1=# DO LANGUAGE plpgsql $$
      BEGIN
        CREATE FUNCTION f1() RETURNS int
          BEGIN ATOMIC
            SELECT 1;
          END;
        END $$;

（以前は以下のようなエラーになった）
ERROR:  syntax error at end of input
LINE 5:             SELECT 1;
</pre>
<li>libpq によるパイプラインのエラー処理が修正されました。  (&Aacute;lvaro Herrera) (16)(15)(14)</li>
<p>
クエリの問題以外の理由 (接続が失われた場合など) でエラーが返された場合、パイプラインの状態が同期しなくなる可能性があります。これにより、呼び出し側のアプリケーションでビジーループが発生する可能性がありました。
</p>
<li>libpq の PQsendFlushRequest() 関数が、他の「PQsend」関数と同じルールの下でクライアント出力バッファをフラッシュするようになりました。  (Jelte Fennema-Nio) (16)(15)(14)</li>
<p>
パイプラインモードでも、引き続き PQflush() を呼び出す必要がある場合がありますが、この変更により一部の不整合が解消されます。
</p>
<li>libpq が 2つの異なるスレッドで OpenSSL を同時に初期化するときの競合状態を、回避するようになりました。  (Willi Mann, Michael Paquier) (16)(15)(14)(13)(12)</li>
<li>GSSAPI データ送信におけるタイミング依存のエラーが修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
ノンブロッキングモードで GSSAPI 暗号化を使用すると、libpq が「GSSAPI caller failed to retransmit all data needing to be retried」というエラーを出して、サーバへのデータ送出に失敗することがありました。
</p>
<li>postgresql.conf の lc_ で始まる設定パラメータ（例えば lc_messages）のコメントを常に解除するように、initdb が変更されました。  (Kyotaro Horiguchi) (16)</li>
<p>
initdb は V16以前は postgresql.conf の「lc_...」パラメータのコメントを常に解除していて、本マイナーバージョンアップで再び元の動作に戻されました。16.0 の変更により、initdb の --no-locale オプションがlc_messages に意図した効果を及ぼさなくなっていました。
</p>
<li>pg_dump で、拡張のメンバーオブジェクトのRLSポリシーまたはセキュリティラベルをダンプしなくなりました。  (Tom Lane, Jacob Champion) (16)(15)(14)(13)(12)</li>
<p>
以前は、コマンドがこれらのプロパティを設定するためダンプに含まれていましたが、これらのプロパティは拡張機能の内部事項として考慮される必要があるため、全く誤った動作でした。さらに、復元するユーザにはそれらを設定するための十分な権限がない可能性があり、（RLSポリシーをダンプするにはテーブルのロックを取得する必要があるため）ダンプするユーザにもそれらをダンプするための十分な権限がない可能性がありました。
</p>
<li>pg_dump で、元となるテーブルがダンプされていない場合は、拡張統計オブジェクトをダンプしないようになりました。  (Rian McGuire, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
典型的には「--exclude-table」などの指定で一部テーブルを除外したときに、除外したテーブルの拡張統計オブジェクトも除外するということです。これはインデックスなどの他の依存オブジェクトの動作に準拠します。
</p>
<li>pg_dump のあるコードパスで、メモリ不足を適切に検出するようになりました。  (Daniel Gustafsson) (16)</li>
<li>pgbenchスクリプトが、開いたままのパイプラインで終了することをエラーとして扱うようになりました。  (Anthonin Bonnefoy) (16)(15)(14)</li>
<p>
以前は、\startpipeline コマンドに一致する\endpipeline がない場合、pgbench は奇妙な動作をしていました。これは、pgbench が適切に処理する必要があるケースというよりは、スクリプトのミスのように見えるため、エラーを投げるようになりました。
</p>
<li>BRIN インデックスの bloom演算子クラス で、false_positive_rate に関する過度に厳密なアサートが修正されました。  (Alexander Lakhin) (16)(15)(14)</li>
<p>
false_positive_rate パラメータに最大値を指定したときに、アサート失敗が生じる動作が報告されました。
</p>
<li>contrib/intarray で、INT_MAX に等しい値の要素を持つ配列がgist__int_ops インデックスに挿入された場合のクラッシュが修正されました。  (Alexander Lakhin, Tom Lane) (16)(15)(14)(13)(12)</li>
<li>contrib/pageinspect の hash_bitmap_info() 関数がパーティション化されたハッシュインデックスに適用されるときに、より適切なエラーを報告するようになりました。  (Alexander Lakhin, Michael Paquier) (16)(15)(14)(13)(12)</li>
<p>
「ERROR:  could not open file "....": No such file or directory」といったエラーが生じる動作が報告されました。
</p>
<li>contrib/pgstattuple の pgstathashindex() 関数がパーティション化されたハッシュ インデックスに適用されるときに、より適切なエラーを報告するようになりました。  (Alexander Lakhin) (16)(15)(14)(13)(12)</li>
<p>
「ERROR:  could not open file "....": No such file or directory」といったエラーが生じる動作が報告されました。
</p>
<li>Windows では、pg_ctl および pg_regress でサブプロセスを起動するときに自動実行オプションを抑制するようになりました。  (Kyotaro Horiguchi) (16)(15)(14)(13)(12)</li>
<p>
cmd.exe 経由で子プロセスを起動するときは、/D フラグを渡して、レジストリで指定された自動実行コマンドが実行されないようになりました。これにより予想外の副作用が回避できます。
</p>
<li>ソースコードにおいて、is_valid_ascii() が mb/pg_wchar.h から utils/ascii.h に移動されました。  (Jubilee Young) (16)(15)</li>
<p>
この変更により、pg_wchar.h で「include <simd.h>」を行う必要がなくなりました。一部のサードパーティコードで問題が発生していました。
</p>
<li>libxml2 のバージョン 2.12.0 以降でのコンパイル失敗が修正されました。  (Tom Lane) (16)(15)(14)(13)(12)</li>
<li>Windows での WAL_DEBUG を有効にしたときのコードのコンパイル失敗が修正されました。  (Bharath Rupireddy) (16)(15)(14)(13)</li>
<li>Python のヘッダーファイルからのコンパイラ警告が抑制されるようになりました。  (Peter Eisentraut, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
PostgreSQL のビルドで選択されるコンパイラオプションは、Python のヘッダファイルの最新バージョンに含まれる構造体に関する警告を引き起こしました。gcc を使用する場合、プラグマを使用してこれらの警告を抑制するようになります。
</p>
<li>LLVM 18 でのコンパイル時に非推奨の警告が出ないようになりました。  (Thomas Munro) (16)(15)(14)(13)(12)</li>
<li>タイムゾーンデータファイルが tzdata release 2024a に更新されました。   (16)(15)(14)(13)(12)</li>
<p>
グリーンランド、カザフスタン、パレスチナの夏時間法の変更、南極観測点のケーシーとボストークの修正、ベトナム、トロント、ミクロン島の歴史的修正が含まれます。
</p>
<li>LWLock のキューから取り出しするときに、待機中のプロセスのリストを検索する必要がなくなりました。  (Andres Freund) (15)(14)(13)(12)</li>
<p>
これにより、待ちリストが長い場合の O(N^2) の動作が修正されました。一部のユースケースでは、これによりスループットが大幅に向上します。
</p>
<li>ロジカルデコーディング中に間違ったスナップショットでシステムカタログを検査することが防止されました。  (Fei Changhong) (15)(14)</li>
<p>
システムカタログを変更するトランザクションの途中でデコーディングが開始されると、デコーダがそれを認識できず、そのトランザクションをカタログ検索の進行中として扱うことができない場合がありました。
</p>
<p>
この修正は、トップレベルのトランザクションにはすでにカタログ変更が含まれているとマークされているけれども、そのサブトランザクションにはマークがついていない場合に対処します。
</p>
<p>
「ERROR: could not map filenode "..." to relation OID」という奇妙なエラーメッセージが出るケースが報告されました。
</p>
</ol>

<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
