<?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 15.1 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-15-1/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>Fri, 23 Oct 2026 06:42:18 +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 15.1 &#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 15.2 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/15-2/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Mon, 06 Mar 2023 00:45:56 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 15]]></category>
		<category><![CDATA[PostgreSQL 15.1]]></category>
		<category><![CDATA[PostgreSQL 15.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=12099</guid>

					<description><![CDATA[このリリースは 15.1 からの修正リリース（2023年 2月 9日リリース）です。 15.X からのアップデートではダンプ、リストアは不要です。 しかしながら、15.1 よりも前のバージョンからアップデートする場合には ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 15.1 からの修正リリース（2023年 2月 9日リリース）です。<br />
15.X からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、15.1 よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/15-1/ ">15.1 のリリース情報</a>も参照してください。</p>
<p><span id="more-12099"></span></p>
<h3>PostgreSQL 15.1 から 15.2 への変更点</h3>
<p>15.2、14.7、13.10、12.14、11.19 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>libpq は GSSAPIトランスポート暗号化の開始に失敗した後にメモリ内容をリークする可能性があり、修正されました。  (Jacob Champion) (15)(14)(13)(12)</li>
<p>
改変されたサーバや信頼できない中間者は、Kerberos のトランスポート暗号化の確立中にゼロ終端されていない文字列を送信できます。次に libpq はその文字列とアプリケーションメモリ内の次のゼロバイトまでのバイトをエラー報告にコピーします。呼び出し側のアプリケーションがエラー報告に対して行なう処理によっては、アプリケーションのメモリ内容が漏洩する可能性がありました。また、メモリ終端を超えた読み取りによるクラッシュの可能性もわずかにありました。
</p>
<p>
サーバメッセージを適切にゼロ終端させることで修正されました。(CVE-2022-41862)
</p>
<li>パーティションテーブルまたは継承ツリーの UPDATE中に、子テーブルで更新する必要がある GENERATED列の計算が修正されました。  (Amit Langote, Tom Lane) (15)(14)(13)</li>
<p>
親テーブルに存在しない、または親列の生成式とは異なる依存関係を持つGENERATED列を更新できない問題が生じていました。誤った更新結果が生じるおそれがありました。
</p>
<pre>
（修正前バージョンの誤動作例）
db=# CREATE TABLE t2p (c1 int);
db=# CREATE TABLE t2c (c2 int GENERATED ALWAYS AS (c1 + 1) STORED) INHERITS (t2p);
db=# INSERT INTO t2c VALUES (10);
db=# SELECT * FROM t2c;
 c1 | c2
----+----
 10 | 11
(1 row)

db=# UPDATE t2p SET c1 = c1 * 10;

（以下で c2列は 101 が正しい）
db=# SELECT * FROM t2c;
 c1  | c2
-----+----
 100 | 11
(1 row)
</pre>
<li>MERGE で GENERATED列の計算が失敗する可能性があったのが修正されました。  (Dean Rasheed) (15)</li>
<p>
MERGE の最初の行単位アクションが UPDATE の場合、後続の INSERTアクションでは（UPDATEターゲット列のいずれにも依存していないため）UPDATEアクションで計算する必要がないとみなされた GENERATED列の計算に失敗しました。誤った更新結果が生じるおそれがありました。
</p>
<pre>
（修正前バージョンの誤動作例）
db=# CREATE TABLE t3 (id int PRIMARY KEY, c1 int, c2 int,
                      g3 int GENERATED ALWAYS AS (c1 * 2) STORED,
                      g4 int GENERATED ALWAYS AS (c2 * 2) STORED);
db=# INSERT INTO t3 (id, c1, c2) VALUES (1, 5, 100);
db=# SELECT * FROM t3;
 id | c1 | c2  | g3 | g4
----+----+-----+----+-----
  1 |  5 | 100 | 10 | 200
(1 row)

db=# MERGE INTO t3 USING (VALUES (1,10),(2,20)) v(id, c1) ON t3.id = v.id
       WHEN MATCHED THEN UPDATE SET c1 = v.c1
       WHEN NOT MATCHED THEN INSERT VALUES (v.id, v.c1, 200);

（以下の id=1 の行の g3 は 20 が正しく、id=2 の行の g3、g4 は 40、400 が正しい）
db=# SELECT * FROM t3;
 id | c1 | c2  |   g3   |   g4
----+----+-----+--------+--------
  1 | 10 | 100 |     10 |    200
  2 | 20 | 200 | *null* | *null*
(2 rows)
</pre>
<li>MERGE で到達不可能な WHEN句に対するチェックが修正されました。  (Dean Rasheed) (15)</li>
<p>
無条件の WHEN句に続く WHEN句は下記のエラーで到達不能として拒否されるべきですが、このケースは常に検出されるわけではありませんでした。
</p>
<pre>
ERROR:  unreachable WHEN clause specified after unconditional WHEN clause
</pre>
<li>MERGE のルール検出テストが修正されました。  (Dean Rasheed) (15)</li>
<p>
MERGE はルールのあるテーブルには対応していません。しかし、かつてルールを持っていて今は持っていないテーブルでも以下のエラーが生じていました。
</p>
<pre>
ERROR:  cannot execute MERGE on relation "..."
DETAIL:  MERGE is not supported for relations with rules.
</pre>
<li>MERGE では「DO NOTHING」アクションを処理された行数として数えないようになりました。  (&Aacute;lvaro Herrera) (15)</li>
<p>
これにより、コードの動作がドキュメントと一致するようになります。本障害および修正で変わるのは、MERGE 実行後の影響を受けた行数の出力値、すなわち、psql で「MERGE 10」などと表示され、libpq の PQcmdTuples(res) で取得できる値だけです。
</p>
<li>「WITH RECURSIVE ... CYCLE」という共通テーブル式(CTE) が出力列にアクセスできるようになりました。  (Tom Lane) (15)(14)</li>
<p>
これまで CTE内から SET句で指定した列を参照すると下記のエラーが生じていました。
</p>
<pre>
（修正前バージョンのエラー発生例）
db=# WITH RECURSIVE cte7(x, y) AS (
       SELECT 0, 0 UNION ALL SELECT x, y FROM cte7 AS r WHERE r.is_cycle
	 ) CYCLE x, y SET is_cycle USING path
	 SELECT * FROM cte7;
ERROR:  cache lookup failed for type 0
</pre>
<li>外部テーブルへのバルクインサートを行なう際の保留中のインサート処理について修正されました。  (Etsuro Fujita) (15)(14)</li>
<p>
保留中のインサートがすぐに外部テーブルラッパー(FDW)にフラッシュされず、BEFORE ROWトリガで本来見えるはずの行が見えないなど、論理的な不整合が発生することがありました。
</p>
<p>
本障害により、結果としてトリガによる誤った更新が生じる可能性がありました。
</p>
<li>その時点では有効でないインデックスに REPLICA IDENTITY が設定できるようになりました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
pg_dump が REPLICA IDENTITY と印付けされたパーティションインデックスをダンプする時、パーティションインデックスが有効となる前に「REPLICA IDENTITY」を適用するコマンド実行順で生成され、リストア失敗の原因となっていました。 この順序で実行することを禁止する正当な理由はないと判断され、許可するようになりました。インデックスが有効になるまで、REPLICA IDENTITY の印付けは何の効果も持ちません。
</p>
<li>複数行の VALUESリストから INSERT を実行するルールにおける、DEFAULT の処理が修正されました。  (Dean Rasheed) (15)(14)(13)(12)(11)</li>
<p>
DEFAULT指定箇所を適切なデフォルト値の式に置き換えられず、「ERROR:  unrecognized node type」が発生することがありました。
</p>
<pre>
（修正前バージョンの誤動作例）
db=# CREATE TABLE t10 (val int);
db=# INSERT INTO t10 VALUES (100);
db=# CREATE TABLE t10_log (ts timestamptz DEFAULT now(), val int, dsc text);
db=# CREATE RULE r10 AS ON UPDATE TO t10
       DO ALSO INSERT INTO t10_log VALUES
         (DEFAULT, OLD.val, 'old'), (DEFAULT, NEW.val, 'new');
db=# UPDATE t10 SET val = 101 WHERE val = 100;
ERROR:  unrecognized node type: 148
</pre>
<li>jsonpath の存在チェックで未定義変数の使用が拒否されるようになりました。  (Alexander Korotkov, David G. Johnston) (15)(14)(13)(12)</li>
<p>
jsonpath の一致演算子ではパスパターンに未定義の変数があるとエラーになりますが、存在演算子ではエラーや警告を出さずに一致するものとして扱っていました。
</p>
<pre>
（正しい動作）
db=# SELECT jsonb_path_match('[{"a": 1}]', '$undefined_var');
ERROR:  could not find jsonpath variable "undefined_var"

（修正前バージョンの誤動作例、jsonb_path_match と同様にエラーとなるべき）
db=# SELECT jsonb_path_exists('[{"a": 1}]', '$undefined_var');
 jsonb_path_exists
-------------------
 t
(1 row)
</pre>
<li>TOAST格納された添え字の値を扱えるように、jsonb の添え字処理が修正されました。  (Tom Lane, David G. Johnston) (15)(14)</li>
<p>
テーブルから直接フェッチされた長いテキスト値を jsonb 添え字として使用すると、エラーを起こす可能性がありました。フェッチ（値の取り出し）では、たいてい一致する要素を見つけられません。この問題を引き起こすほどの長いキーはフィールドではおそらく稀ですが、代入ではガベージキーを使用して値を格納できました。
</p>
<pre>
（修正前バージョンの誤動作例）
db=# CREATE TABLE t12 (id text, test_json jsonb);
db=# INSERT INTO t12 VALUES ('foo', '{"foo": "bar"}');
db=# INSERT INTO t12
       SELECT s, ('{"' || s || '": "bar"}')::jsonb FROM repeat('longsub', 500) s;

（添え字に対する値が見つけられない結果になる）
db1=# SELECT substr(id, 1, 20), test_json[id] FROM t12;
        substr        | test_json
----------------------+-----------
 foo                  | *null*
 longsublongsublongsu | *null*
(2 rows)
</pre>
<li>並列ハッシュ結合における稀な場合のデータ破損が修正されました。  (Dmitry Astapov) (15)(14)(13)(12)(11)</li>
<p>
一時ファイルに書き出される大きなタプルの最後のチャンクがちょうど 32760バイトである場合、境界バグにより破損する可能性がありました。典型的には後に問い合わせがデータ破損の症状でエラーを出します。例えば（何らかデータ長を示す部分の値が壊れていることによる）「ERROR:  XX000: invalid memory alloc request size 1702125924」が出るケースが報告されました。
</p>
<p>
ここでのデータ破損はメモリ上や一時ファイルで生じるものです。しかし、更新をする並列問い合わせでデータ破損を含む処理がエラーを起こさずに実行されてしまう可能性が無いとは確認されていません。
</p>
<li>checkpoint_completion_target のデフォルト以外の設定を尊重するようになりました。  (Bharath Rupireddy) (15)(14)(13)(12)(11)</li>
<p>
checkpoint_completion_target の変更後に内部状態が更新されなかったため、特に設定を reload で変更した場合、チェックポイント I/O の実行が設定値に基づいて期待されるよりも高速または低速になることがありました。
</p>
<li>recovery_target_xid モードでログに正しい終了タイムスタンプが記録されるようになりました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
recovery_target_inclusive = "off" で recovery_target_xid 設定に基づいてリカバリを終了すると「LOG:  recovery stopping before ... transaction」のログメッセージに誤ったタイムスタンプ（常に 2000-01-01）が出力されました。
</p>
<li>バッファリングされたファイル読み込みの失敗に対するエラー報告が改善されました。  (Peter Eisentraut) (15)(14)(13)</li>
<p>
短くしか読めなかった場合について正しく報告するようになりました。不適切なエラーコードに基づくメッセージではなく、期待されたバイト数と読んだバイト数が出力されるようになります。ロジカルレプリケーションやベースバックアップに関するコードで修正が適用されました。
</p>
<li>int2vector と oidvector で要素数の恣意的な上限が取り除かれました。  (Tom Lane) (15)</li>
<p>
以前は、これらの型の入力関数は 100 以上の要素を拒否してきました。論理レプリケーションの列をリスト指定できる仕様の導入に伴って、int2vector が最大で 1600列分の要素を受け付ける必要が生じました。
</p>
<p>
列数の多いテーブルに対して、論理レプリケーションが「ERROR: int2vector has too many elements」エラーを出して、止まってしまう動作が報告されました。
</p>
<li>拡張問い合わせプロトコルで、パイプラインを実行していた場合、ANALYZE の後に即時コミットをしないようになりました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
明示的なトランザクション開始命令（BEGIN TRANSACTION など）が無い場合、ANALYZE は勝手にコミットしていました。これはパイプライン化された一連のコマンドの中では望ましくないと判断されました。
</p>
<li>間違った長さのキャンセルリクエストパケットを拒否するようになりました。  (Andrey Borodin) (15)(14)(13)(12)(11)</li>
<p>
これまで、長さが短いキャンセルリクエストも処理されていて、割り当てられたバッファの最後を超えた読み込みが発生していました。理論的にはセグメンテーション違反が起きる可能性がありましたが、そのバッファはメモリ末尾にとても近いため、実際にはほとんど発生しません。良く起きることは、間違ったバックエンド PID やキャンセルコードを指摘するでたらめなログメッセージを出力してしまうことです。
</p>
<p>
本修正でキャンセルリクエストについても間違った長さであることを示す「LOG:  invalid length of startup packet」が報告されるようになりました。
</p>
<li>ウィンドウ関数の実行条件式に対するプランナの前処理の誤りが修正されました。  (Richard Guo, David Rowley) (15)</li>
<p>
これにより「ERROR:  WindowFunc not found in subplan target lists」のようなプランナのエラーが出力されていました。
</p>
<li>ウィンドウ関数の実行条件式を実行する際に、無効な領域へのポインタアクセスが修正されました。  (David Rowley) (15)</li>
<p>
実際には、実行条件の最適化は int8 を返すいくつかのウィンドウ関数にのみ適用されるので、32-bit でビルドされた時のみの問題です。
</p>
<li>サブクエリのプルアップにおいて、再帰呼び出しやループに対する防御機構が追加されました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
作りこまれた問い合わせにより、結果として深い再帰になって、サブクエリの平坦化を試みるのに不合理に長時間を費やす可能性がありました。
</p>
<p>
これに対する適切な修正は後方適用するには修正量が大きくなります。本修正では、スタックの深さチェックと、問い合わせをキャンセルするための割り込み検査を加えています。
</p>
<li>Memoizeノードと、パーティション横断の結合やパラメタ化された入れ子ループを組み合わたのときの、プランナの問題が修正されました。  (Richard Guo) (15)(14)</li>
<p>
本障害により、Memoize が利用可能なときでも使われない劣った実行計画や、場合よっては誤った実行計画が生じる可能性がありました。
</p>
<li>パーティション横断の結合で、各パーティションに対するプラン生成の失敗に寛容になるように修正されました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
本障害により「ERROR:  could not devise a query plan for the given query」というエラーが生じることがありました。エラーを出すのではなく、パーティション横断の結合をしない実行計画を選択するようになりました。
</p>
<li>get_actual_variable_range によって実行されるクリーンナップ作業の量が制限されるようになりました。  (Simon Riggs) (15)(14)(13)(12)(11)</li>
<p>
get_actual_variable_range は最大値・最小値を調べる PostgreSQLの内部実装関数で、プランナで使われます。
</p>
<p>
プランナは、インデックスの最後に現れる大量のタプルを削除した後にこれらのインデックスエントリに killedビットをセットする膨大な仕事をしなければならないことがありました。
</p>
<p>
本修正で 1つのクエリでの処理量が 100 ヒープページに制限されました。最終的には全てのタプルの削除は必要ですが、これにより突然の大幅な性能低下は回避できます。
</p>
<li>リレーションの relkind が変わった時、統計計算が混乱してしまった問題が防止されました。  (Andres Freund) (15)</li>
<p>
テーブルをビューに変更するとクラッシュやアサート失敗になる可能性がありました。
</p>
<li>括弧で囲まれた「AT TIME ZONE」構文の表示が修正されました。  (Tom Lane) (15)(14)</li>
<p>
これは「AT TIME ZONE」の引数自体が式になっているルールやビューに対するダンプ/リストアの失敗をもたらしました。
</p>
<pre>
（誤動作例、括弧が外れてしまっている）
db=# CREATE VIEW v27 AS
       SELECT ('2022-12-01'::date + '1 day'::interval) AT TIME ZONE 'Europe/Paris';

db=# SELECT pg_catalog.pg_get_viewdef('v27'::regclass, true);
                                         pg_get_viewdef                         
-------------------------------------------------------------------------------------------------
  SELECT ('2022-12-01'::date + '1 day'::interval AT TIME ZONE 'Europe/Paris'::text) AS timezone;
(1 row)
</pre>
<li>SQL関数でユーティリティコマンドに対するキャッシュされたパースツリーの誤った上書きを防止するようになりました。  (Tom Lane, Daniel Gustafsson) (15)(14)</li>
<p>
SQL言語の関数が同じユーティリティコマンドを 1つの問い合わせの中で複数回実行した場合、クラッシュやアサート失敗、「ERROR:  unrecognized node type: ..」のような奇妙なエラーが引き起こされる可能性がありました。
</p>
<pre>
（アサート失敗が報告されたSQL実行例）
db=# CREATE FUNCTION f28() RETURNS INT LANGUAGE SQL AS $$
       CREATE TABLE t28 (col0 INT CHECK ('x' = 'x')); SELECT 1; $$;
db=# SELECT f28() FROM (VALUES (1), (1)) AS a0;
</pre>
<li>全文検索の問い合わせの実行がフレーズ一致を処理しているときに確実にキャンセルできるようになりました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<li>非決定的な照合順序を持つ文字列のハッシュ作成におけるメモリリークが修正されました。  (Jeff Davis) (15)(14)(13)(12)</li>
<li>DROP DATABASE と論理レプリケーションワーカプロセスと間のデッドロックが修正されました。  (Hou Zhijie) (15)(14)</li>
<p>
これは、ワーカで論理レプリケーションスロットを作成する際に、割り込みをブロックするという不用意な選択によって引き起こされていました。
</p>
<p>
バージョン15 では検出されないデッドロックをもたらす可能性がありました。バージョン14 ではデッドロックは観測されていませんが、ネットワークI/O を待っている間に割り込みをブロックすることは、やはり望ましくありません。
</p>
<li>レプリケーション接続の試行に失敗した後に、libpq の接続オブジェクトをクリーンアップするようになりました。  (Andres Freund) (15)(14)(13)(12)(11)</li>
<p>
以前のコードでは接続オブジェクトをリークしていました。 バックグラウンドのコードパスでは呼び出し元のプロセスが終了してしまうので無害です。 しかし、CREATE SUBSCRIPTION のようなコマンドでは、このような失敗により、セッション内での小さなメモリリークが発生していました。
</p>
<li>ホットスタンバイサーバで、プライマリ上でアクティブと知られている XID を調べる処理負荷が軽減されました。  (Simon Riggs, Michail Nikolaev) (15)(14)(13)(12)(11)</li>
<p>
KnownAssignedXids配列のクリーンアップが不十分な場合、特にスタンバイ側で max_connections が大きな値に設定されている場合、性能が低下する可能性がありました。
</p>
<li>カタログの最も古い xmin を決定する際に、無効な論理レプリケーションスロットを無視するようになりました。  (Sirisha Chamarthi) (15)(14)(13)</li>
<p>
レプリケーションスロットは、max_slot_wal_keep_size を超過して無効となった後も、システムカタログ内のデッドタプルのクリーンアップを妨げることができました。そのため、レプリケーションの消費者に障害が発生すると、カタログが際限なく肥大化する可能性がありました。
</p>
<li>論理デコーディングで、トランザクションのクラッシュが検出されたときにリモートノードに通知するようになりました。  (Hou Zhijie) (15)(14)</li>
<p>
サーバ再起動の後、再起動の直前に発生したトランザクションの変更を再ストリームします。 これらのトランザクションのいくつかは、完了しませんでした。理由は、1つのトランザクションが完了しなかったことに気づいたとき、関連するデコーディング状態をそのサーバでは捨てますが、それについてサブスクライバに伝えていなかったからです。そのため、サブスクライバは、次に再起動するまで、無駄なストリーミングファイルを保持することになっていました。
</p>
<li>論理デコーディングにおける未初期化メモリの使用が修正されました。  (Masahiko Sawada) (15)(14)(13)(12)(11)</li>
<p>
いくつかのケースで論理デコードの再開時に解放済の XID データの再利用を試み、予測不可能な動作を引き起こすことがありました。
</p>
<li>論理デコーディングのコンテキスト作成に際して共有状態を更新している間、スピンロックを取得するようになりました。  (Masahiko Sawada) (15)</li>
<p>
2フェーズトランザクションに関するデータを更新する際に、適切なロックを取得していなかったため、他プロセスから不整合データを見られる可能性がありました。
</p>
<li>pgoutput レプリケーションプラグインが、テーブルレプリケーションの列一覧に列挙されていない列を送信しないよう修正されました。  (Hou Zhijie) (15)</li>
<p>
UPDATE と DELETE のイベントは設定された列一覧に注意を払わないため、予想以上に多くのデータを送信していました。 この問題はレシーバが組み込みの論理レプリケーションコードである場合は発生しませんが、他のレシーバを混乱させる可能性があり、いずれにしてもネットワーク帯域幅を無駄にするものでした。
</p>
<li>ハッシュインデックスのページ分割操作の WALリプレイ時に稀に発生する「PANIC:  failed to acquire cleanup lock」を回避するようになりました。  (Robert Haas) (15)(14)(13)(12)(11)</li>
<li>WALリプレイ中にその全可視ビットを設定する際に、ヒープページの LSN が前進するようになりました。  (Jeff Davis) (15)(14)(13)(12)(11)</li>
<p>
これを行わなかった場合、スタンバイサーバとプライマリサーバでページが異なる可能性があり、LSN が変更されるタイミングに関する他のいくつかの想定に反しました。 PostgreSQL自体に関する限り、これは理論的な危険性だけであるように思えますが、サードパーティツールを混乱させる可能性がありました。
</p>
<li>int64_div_fast_to_numeric() がより広い範囲の入力に対して動作するように修正されました。  (Dean Rasheed) (15)(14)</li>
<p>
この関数はその第2引数における一部の値で誤動作していました。 PostgreSQL本体ではそのような使用法は存在していませんが、外部モジュールでは明らかに危険でしたので、修正されました。
</p>
<li>WaitEventSetロジックにおける潜在的なバッファオーバーランの問題が修正されました。  (Thomas Munro) (15)(14)(13)(12)(11)</li>
<p>
epollベースおよび kqueueベースでの実装は、その内部バッファのサイズが呼び出し元の出力バッファのサイズと異なる場合、カーネルにあまりにも多くのイベントを要求する可能性がありました。
</p>
<p>
このケースはリリース済みの PostgreSQL のバージョンでは発生しないことが知られていますが、この誤りは外部モジュールや将来のバグ修正にとって有害です。
</p>
<li>32-bitビルドで共有メモリにアクセスする際に、名目上未定義の挙動を回避するようになりました。  (Andres Freund) (15)(14)(13)(12)(11)</li>
<p>
clang の未定義動作サニタイザは、アラインメントが取れていないポインタの使用についてエラーを出します。これが非デバッグビルドで問題を起こす可能性は非常に低いですが、テストのために修正する価値があると判断されました。
</p>
<li>BRIN minmax-multi 演算子クラスのアサート失敗が修正されました。  (Tomas Vondra) (15)(14)</li>
<p>
このアサートは過度に厳密でした。アサート無しビルドでは無害です。
</p>
<li>不要な RESULT RTE 最適化ロジックでの不完全なアサートが削除されました。  (Tom Lane) (15)(14)(13)(12)</li>
<p>
問い合わせ実行で予期せぬアサート失敗が報告されました。
</p>
<li>ACLチェックに対する「ERROR:  cache lookup failed ..」エラーメッセージのコピーアンドペースト誤りが修正されました。  (Justin Pryzby) (15)(14)(13)(12)(11)</li>
<p>
原理的には、このエラーに到達することはありませんが、それらのいくつかは間違ったタイプのオブジェクトを報告していました（cache lookup failed for schema とすべきところがcache lookup failed for function となる等）。
</p>
<li>pg_basebackup で多数のテーブルスペース対応付けを指定した場合に、壊れたテーブル空間マップ(tablespace_map)ファイルを生成する可能性があり、修正されました。  (Antonin Houska) (15)</li>
<li>pg_dump で --if-exists オプションを使用したときに、無害な警告が出ないようになりました。  (Tom Lane) (15)</li>
<p>
これまで publicスキーマにデフォルト(pg_database_owner)以外の所有者がいる場合、pg_dump で --if-exists オプションを使用すると、ダンプ出力自体には問題はありませんが、以下のような警告メッセージが表示されていました。
</p>
<pre>
pg_dump: 警告: 文"-- *not* dropping schema, since initdb creates it
"中に IF EXISTS を挿入すべき場所が見つかりませんでした
</pre>
<pre>
pg_dump: warning: could not find where to insert IF EXISTS in statement "--
*not* dropping schema, since initdb creates it
"
</pre>
<li>psqlメタコマンドの \sf と \ef がSQL標準の関数本体を持つ SQL言語関数を処理できるように修正されました。  (Tom Lane) (15)(14)</li>
<p>
これらのコマンドは、SQL標準の構文を使用したときに関数本体の開始を誤認していました。
</p>
<p>
SQL標準の関数本体とは、文字列定数ではなく単一の RETURN 文やBEGIN ATOMIC ～ END のブロックで記述したものを指します。
</p>
<li>psql で ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA のタブ補完が修正されました。  (Dean Rasheed) (15)(14)(13)(12)(11)</li>
<li>contrib/pageinspectモジュールが更新され、そのディスクアクセス機能を「PARALLEL RESTRICTED(パラレル制限)」としてマークするようになりました。  (Tom Lane) (15)</li>
<p>
セッションの一時テーブルは並列ワーカからアクセスできないため、これらの関数のいずれかを使用して一時テーブルを調べる場合に、パラレル実行で結果が取得できない可能性がありました。
</p>
<li>contrib/segモジュールで seg型の値として入力した数が 127桁を超える場合に、クラッシュしたり、ごみデータを出力したりすることがあり、修正されました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<li>Microsoft Visual Studio 2013 でのビルドが修正されました。  (Tom Lane) (15)(14)(13)(12)</li>
<p>
以前のパッチでは、対象のすべてのプラットフォームで snprintf() に対応していると想定されていましたが、MSVC 2013 ではまだ完全に対応されていません。MSVC 2013 では sprintf() を使用するように戻されました。
</p>
<li>Strawberry Perl 5.30. 以上を使用して、MSVC で PL/Perl をビルドする際のコンパイルエラーが修正されました。  (Andrew Dunstan) (15)(14)(13)(12)(11)</li>
<li>MSVC でビルドされた PL/Perl と gcc でビルドされた Perlライブラリの不一致が修正されました。  (Andrew Dunstan) (15)(14)(13)(12)(11)</li>
<p>
このような組み合わせで、以前は「loadable library and perl binaries are mismatched」というエラーでPL/Perl のロードに失敗することがありました。
</p>
<li>Perl のヘッダファイルからのコンパイラ警告が抑制されました。  (Andres Freund) (15)(14)(13)(12)(11)</li>
<p>
推奨しているコンパイラオプションは、Perl のヘッダファイルの最近のバージョンで構造についての警告を引き起こします。 gcc を使用する場合、プラグマを使用してこれらの警告を抑制することができます。
</p>
<li>pg_waldump が未使用の静的インライン関数を破棄しないコンパイラでビルドされるように、修正されました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<li>タイムゾーンデータファイルが tzdata release 2022g に更新されました。グリーンランドとメキシコの夏時間法の変更に加え、カナダ北部、コロンビア、およびシンガポールの歴史的修正が適用されました。   (15)(14)(13)(12)(11)</li>
<p>
注目すべき点としては、新しいタイムゾーン America/Ciudad_Juarez が America/Ojinaga から分割されました。
</p>
<li>リレーションキャッシュエントリの rd_smgrポインタの安全でない使用を防ぐようになりました。  (Amul Sul) (14)(13)(12)(11)</li>
<p>
rd_smgr は PostgreSQL内部実装における RelationData構造体のメンバ変数です。
</p>
<p>
必要に応じて再計算する関数で rd_smgr のすべての使用をラップすることにより、一連の操作で rd_smgr が有効であり続けるというさまざまな仮定を取り除きます。これにより、一連の処理の途中で予期しないキャッシュフラッシュが発生した場合に発生するバグが防止されました。
</p>
<li>pg_dump で、検査対象のテーブルをロックする前に安全でないサーバ関数を呼び出さないようになりました。  (Tom Lane, Gilles Darold) (14)(13)(12)(11)</li>
<p>
pg_dump は、調べているテーブルが同時に削除されると失敗する可能性のあるいくつかのサーバ関数を使用します。テーブルのプロパティを深く調べる前にアクセス共有ロックを取得し、ダンプするつもりのないテーブルにそのような関数を適用しないようにすることで、この種の失敗が回避されました。
</p>
<li>VACUUM実行の最後での「ERROR:  wrong tuple length」の発生が防止されました。  (Ashwin Agrawal, Junfeng Yang) (13)(12)</li>
<p>
これは、VACUUM が現在のデータベースの datfrozenxid値を更新する必要があり、datacl値が行外に押し出されるほどデータベースに大量の権限付与がある場合に、発生していました。
</p>
<li>contrib/sepgsqlモジュールで、最近の libselinuxのバージョンでビルド時に出力されていた非推奨の警告が出ないように修正されました。  (Michael Paquier) (13)(12)(11)</li>
<li>contrib/postgres_fdwモジュールの誤ったアサートが修正されました。  (Etsuro Fujita) (12)</li>
<p>
正常な外部テーブルへの問い合わせでアサート失敗することがありました。
</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>
		<item>
		<title>PostgreSQL 15.1 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/15-1/</link>
		
		<dc:creator><![CDATA[高塚 遥 (Haruka Takatsuka)]]></dc:creator>
		<pubDate>Thu, 01 Dec 2022 01:00:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQ]]></category>
		<category><![CDATA[PostgreSQL 15]]></category>
		<category><![CDATA[PostgreSQL 15.0]]></category>
		<category><![CDATA[PostgreSQL 15.1]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=11832</guid>

					<description><![CDATA[このリリースは 15.0 からの修正リリース（2022年11月10日リリース）です。 15.X からのアップデートではダンプ、リストアは不要です。 しかしながら、1GB以上のテーブルを作成・削除していたならば、項目1番を ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 15.0 からの修正リリース（2022年11月10日リリース）です。<br />
15.X からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、1GB以上のテーブルを作成・削除していたならば、項目1番を参照して追加の手順を実行してください。</p>
<p><span id="more-11832"></span></p>
<h3>PostgreSQL 15.0 から 15.1 への変更点</h3>
<p>15.1、14.6、13.9、12.13、11.18、10.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>大きなテーブルの最初以外のセグメントを削除できない問題が修正されました。  (Tom Lane) (15)</li>
<p>
PostgreSQL は大きなテーブルを複数のファイル（通常 1ファイルあたり 1GB のファイル）に分割します。 テーブルを削除するロジックが壊れており、一時テーブルの削除と、通常テーブルを削除する WAL の再生の 2つのケースで、そのようなファイルの最初のファイル以外を削除しそこなうことがありました。 数ギガバイトの一時テーブルを日常的に作成するアプリケーションは、重大なディスク領域のリークを被る可能性がありました。
</p>
<p>
孤立した一時テーブルファイルは postmaster の起動時に削除されるため、15.1 に更新するだけで、一時テーブルのストレージのリークが解消されます。しかし、15.0 を使用中にデータベースがクラッシュし、その直前に大きなテーブルが削除された可能性がある場合、データベースディレクトリに「NNNN.NN」というパターンに従った名前のファイルがないか確認することが推奨されます。「NNNN」（「.NN」サフィックスなし）という名前の一致するファイルがない場合、これらのファイルは手動で削除する必要があります。
</p>
<li>更新可能ビューへの INSERT で、複数行 VALUES句にある DEFAULTトークンの処理が修正されました。  (Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<p>
この障害により、「ERROR:  cache lookup failed for type ..」エラーが発生したり、古いブランチではクラッシュの原因になることもありました。
</p>
<pre>
（障害発生例）
db=# CREATE TABLE t2 (a int, b text);
db=# CREATE TABLE t2_hist (ts timestamptz DEFAULT now(), a int, b text);
db=# CREATE VIEW v2 AS SELECT * FROM t2;
db=# CREATE RULE r_t2_log AS ON INSERT TO v2
       DO ALSO INSERT INTO t2_hist (a,b) VALUES (NEW.a, NEW.b);
db=# INSERT INTO v2 VALUES (1, DEFAULT), (10, DEFAULT);
ERROR:  cache lookup failed for type 0
</pre>
<li>「ON SELECT」でない「_RETURN」という名前のルールが禁止されました。  (Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<p>
これにより、ビューの「ON SELECT」ルールと他のルールとの間の混乱が回避されます。
</p>
<li>定数初期値で「SEARCH BREADTH FIRST」を使用する問い合わせがEXPLAIN VERBOSE でエラーを出さないようになりました。  (Tom Lane) (15)(14)</li>
<pre>
（問い合わせ自体は実行できる）
db=# WITH RECURSIVE cte4 AS (
       SELECT 1 AS x UNION ALL SELECT x + 1 FROM cte4
     ) SEARCH BREADTH FIRST BY x SET y
     SELECT * FROM cte4 LIMIT 3;
 x |   y
---+-------
 1 | (0,1)
 2 | (1,2)
 3 | (2,3)
(3 rows)

（explain verbose を付けるとエラーになる）
db=# explain (verbose) WITH RECURSIVE cte4 AS (
       SELECT 1 AS x UNION ALL SELECT x + 1 FROM cte4
     ) SEARCH BREADTH FIRST BY x SET y
     SELECT * FROM cte4 LIMIT 3;
ERROR:  record type has not been registered
</pre>
<li>外部テーブルパーティションを含むパーティションテーブルでMERGE の使用が禁止されました。  (&Aacute;lvaro Herrera) (15)</li>
<p>
MERGE で外部テーブルを直接ターゲットにすることは既に禁止されていましたが、このケースはサポートされておらず、理解できないエラーが発生していました。
</p>
<p>
「ERROR:  unexpected operation: ...」のようなエラーが出ることが報告されました。修正により「ERROR:  cannot execute MERGE on relation ...」が出るようになります。
</p>
<li>ALTER TABLE ATTACH PARTITION 実行中に行われるパーティションごとの外部キー制約の構築が修正されました。  (Jehan-Guillaume de Rorthais, &Aacute;lvaro Herrera) (15)(14)(13)(12)</li>
<p>
以前は、新しく追加されたパーティションに対して、不正確または重複した制約が作成されることがありました。
</p>
<li>パーティションテーブルまたは継承されたテーブルの拡張統計を参照する際のプランナエラー発生が修正されました。  (Richard Guo, Justin Pryzby) (15)</li>
<p>
問い合わせ実行に対して「ERROR:  cache lookup failed for statistics object」というエラーが発生する場合がありました。
</p>
<li>GINインデックスの高速挿入パスでの WAL操作の順序の誤りが修正されました。  (Matthias van de Meent, Zhang Mingli) (15)(14)(13)(12)(11)(10)</li>
<p>
この間違いは、PostgreSQLのコア部分で悪影響を与えることは知られていませんが、一部の拡張機能で問題が発生していました。
</p>
<li>トランザクションの開始とそのサブトランザクションの開始の間からリプレイが開始される場合の、論理デコードのバグが修正されました。  (Masahiko Sawada, Kuroda Hayato) (15)(14)(13)(12)(11)(10)</li>
<p>
これらのエラーは、デバッグビルドでのアサート失敗や、メモリリークを引き起こす可能性がありました。
</p>
<li>論理デコード中に、より多くの場所で割り込みを受け付けるようになりました。  (Amit Kapila, Masahiko Sawada) (15)(14)(13)(12)(11)(10)</li>
<p>
これにより、レプリケーションワーカのシャットダウンが遅いという問題が改善されます。
</p>
<li>レプリケーションワーカで外部テーブルのパーティションにデータ同期を試みる動作が防止されました。  (Shi Yu, Tom Lane) (15)(14)(13)</li>
<p>
パーティションテーブルは外部テーブルをパーティションとすることができますが、そのようなパーティションへの論理レプリケーションは今のところサポートされていません。実行しようとすると論理レプリケーションワーカのプロセスはこれまでクラッシュしていましたが、エラーを出すようになりました。
</p>
<li>レプリケーションワーカでの関数構文エラー後のクラッシュを回避するようになりました。  (Maxim Orlov, Anton Melnikov, Masahiko Sawada, Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<p>
論理レプリケーションワーカで実行された SQL言語または PL/pgSQL言語のCREATE FUNCTION または DO コマンドで構文エラーが発生した場合、ワーカプロセスは nullポインターの逆参照またはアサート失敗でクラッシュしていました。
</p>
<p>
サブスクリプション側にそのようなトリガを定義した場合に現象が報告されました。
</p>
<li>アーカイバモジュールのシャットダウンコールバックの二重呼び出しを回避するようになりました。  (Nathan Bossart, Bharath Rupireddy) (15)</li>
<li>テーブルアクセスメソッドを持たないテーブルへのアクセスに対して、プラン作成時の検査が追加されました。  (Tom Lane) (15)(14)(13)(12)</li>
<p>
これにより、例えば「ON SELECT」ルールが欠落しているビューの使用など、一部のカタログ破損シナリオにおけるクラッシュが防止されます。そのような場合には「ERROR:  cannot open relation ...」が出るようになりました。
</p>
<li>共有メモリ状態が破損しているときの postmaster のクラッシュが防止されました。  (Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<p>
postmasterプロセスは、共有メモリが破損した場合にも存続し、データベースの再起動を行うはずですが、コードのある 1箇所で対応が不十分でした。
</p>
<li>libpq がパイプラインモードのときに単一行モードを正しく処理するように修正されました。  (Denis Laxalde) (15)(14)</li>
<p>
パイプラインモードも有効である場合、単一行フラグが正しいタイミングでリセットされませんでした。
</p>
<li>コマンドラインクエリがキャンセルされた時の psql の終了ステータスが修正されました。  (Peter Eisentraut) (15)</li>
<p>
クエリがキャンセルされた場合、「psql -c query」は正常終了していました。他のエラーの場合と同様に、ゼロ以外のステータスで終了するようになりました。
</p>
<li>pg_basebackup でクロスプラットフォームのテーブルスペースの再配置を許可するようになりました。  (Robert Haas) (15)(14)(13)(12)(11)(10)</li>
<p>
--tablespace-mapping のリモートパスを Unixスタイルまたは Windowsスタイルの絶対パスにすることができるようになりました。これは、ソースサーバがローカルシステムとは異なる OS 上にある可能性があるためです。
</p>
<li>一部の CHECK制約に付加されたコメントを pg_dump がダンプできない問題が修正されました。  (Tom Lane) (15)</li>
<li>CREATE DATABASE で oidパラメータが 2^31 を超えることができるように修正されました。  (Tom Lane) (15)</li>
<p>
このパラメータの最大値を見落としにより、ソースインストールにそれより大きい OID を持つデータベースが含まれている場合、pg_upgrade が成功しませんでした。
</p>
<li>pg_stat_statements で既に解放されたメモリへのアクセスが修正されました。  (zhaoqigui) (15)(14)(13)(12)(11)(10)</li>
<p>
これは、拡張問い合わせプロトコルで発行された ROLLBACK コマンドをトラックしている時に発生します。デバッグビルドでは、これによりアサート失敗が発生しました。製品ビルドでは、目立った問題は発生しません。しかし、解放されたメモリが既に再利用されていた場合、クエリ文字列にゴミデータが格納される結果になると考えられます。
</p>
<li>LLVM 15 との非互換性が修正されました。  (Thomas Munro, Andres Freund) (15)(14)(13)(12)(11)</li>
<li>どのようなマシンであってもスピンロックのために__sync_lock_test_and_set() が使えるようになりました。  (Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<p>
この GCC ビルトイン関数をサポートしているコンパイラを使っていさえすれば、新しいマシンアーキテクチャへポーティングが簡単になります。
</p>
<li>最近の macOS で起きるコンパイル障害を避けるために、シンボル「REF」が「REF_P」にリネームされました。  (Tom Lane) (15)(14)(13)(12)(11)(10)</li>
<li>コンパイル時の非推奨の警告を避けるため、sprintf が使われなくなりました。  (Tom Lane) (15)(14)(13)(12)</li>
<li>タイムゾーンデータファイルが tzdata release 2022f に更新されました。チリ、フィジー、イラン、ヨルダン、メキシコ、パレスチナ、シリアの夏時間法が変更と、チリ、クリミア、イラン、メキシコの歴史的な修正が含まれます。   (15)(14)(13)(12)(11)(10)</li>
<p>
また、Europe/Kiev ゾーンは Europe/Kyiv にリネームされました。さらに、以下のゾーンは 1970年以来承認されている時計のある人口の多い近傍のゾーンに併合されました:
</p>
<pre>
Antarctica/Vostok、Asia/Brunei、Asia/Kuala_Lumpur、Atlantic/Reykjavik、
Europe/Amsterdam、Europe/Copenhagen、Europe/Luxembourg、Europe/Monaco、
Europe/Oslo、Europe/Stockholm、
Indian/Christmas、Indian/Cocos、Indian/Kerguelen、Indian/Mahe、Indian/Reunion、
Pacific/Chuuk、Pacific/Funafuti、Pacific/Majuro、Pacific/Pohnpei、
Pacific/Wake、Pacific/Wallis
</pre>
<p>
（これは Arctic/Longyearbyen、Atlantic/Jan_Mayen、Iceland、Pacific/Ponape、Pacific/Truk、Pacific/Yap のうちの一つに既にリンクされているゾーンにも、間接的に影響します。）1970年以降に主張されたこれらゾーンとの差異が誤りであるようだと判明した後、America/Nipigon、America/Rainy_River、America/Thunder_Bay、Europe/Uzhgorod、Europe/Zaporozhye も近傍のゾーンに併合されました。
</p>
<p>
これらの全てのケースでは以前のゾーンの名前は別名として残されています。しかし、実際のデータはマージされたゾーンにあります。これらのゾーン併合は 1970年以前のタイムゾーンの歴史を失うことになります。これは timestamptz 表示の一貫性を期待するアプリケーションには問題となるかもしれません。例えば、保存されている値が「1944-06-01 12:00 UTC」の場合、以前は「1944-06-01 13:00:00+01」と表示されましたが、Europe/Stockholm が選択されている場合は「1944-06-01 14:00:00+02」となります。
</p>
<p>
より古いゾーンデータをリストアするオプションを付けたタイムゾーンデータファイルを作ることも可能ですが、この選択はたくさんの他の古い（かつ典型的には証明に乏しい） ゾーンデータを追加してしまうことになります。結果として、この上位変更を受け入れる場合よりも、以前のリリースの全体の変更は多くなってしまいます。
</p>
<p>
PostgreSQL は tzdb の移行を推奨してきましたが、知る限りではほとんどの主要なオペレーティングシステムのディストリビューションでも同様のことをやっています。しかしながら、もしこれらの変更があなたのアプリケーションに重要な問題を起こすならば、可能性のある解決方法は tzdb の後方互換オプションを使ってタイムゾーンデータファイルをローカルにビルドしてインストールする方法です（PACKRATDATAオプションと PACKRATLISTオプションを見てください）。
</p>
<li>VACUUM と並行に実行される更新で稀に起きていた PANIC が回避されました。  (Tom Lane, Jeff Davis) (14)(13)(12)</li>
<p>
並行する VACUUM が UPDATE または DELETE で更新中のページの全ての可視フラグビットをセットするなら、その更新コマンドはそのビットをもう一度クリアする必要があります。しかし、いくつかのコードパスはそれに失敗し、PANIC で終了していました。
</p>
<p>
これはバージョン 14 と 15 で起きる可能性があることが知られています。それより前のブランチでは顕在化しないかもしれません。
</p>
<li>AFTERトリガに対してタプルを保存する際の資源管理のバグが修正されました。  (Tom Lane) (14)(13)(12)</li>
<p>
正常な状態において「ERROR:  tupdesc reference ... is not owned by resource owner ...」というエラーが出た後、「PANIC:  ERRORDATA_STACK_SIZE exceeded」によるサービス全体の停止または再起動が発生しました。
</p>
<li>パーティションごとの外部キー制約に対する制約名の生成が修正されました。  (Jehan-Guillaume de Rorthais) (14)(13)(12)</li>
<p>
最初に与えられた名前がそのパーティションの何らかの制約として既に使われていたら、新しい制約名が選ばれますが、意図した名前になっていませんでした。誤って「リレーション名__fkey」という制約名が生じていました。
</p>
<li>パーティションインデックスを作るときの、インデックスの式と述語の誤った照合が修正されました。  (Richard Guo, Tom Lane) (14)(13)(12)(11)</li>
<p>
パーティションテーブルにインデックスを作るときに、定義が一致する各パーティション上の既存インデックスを識別して、それを子インデックスとして取り込みしようとします。このとき、式の照合が正しく行われず、パーティション上の利用可能な既存インデックスが無視されて、重複したインデックスが作成されることがありました。
</p>
<li>スタンバイ昇格後の WAL破損を防止するようになりました。  (Dilip Kumar, Robert Haas) (14)(13)(12)(11)(10)</li>
<p>
アーカイブリカバリ中の（スタンバイモードではない）PostgreSQLインスタンスが昇格するときに、最後に読み込もうとした WALセグメントが部分レコードで終わっていた場合、新しいタイムライン上に無効な WAL セグメントを書き込んでいました。
</p>
<li>論理デコード中に、間違ったスナップショットでシステムカタログを検査することを防止するようになりました。  (Masahiko Sawada) (14)(13)(12)(11)(10)</li>
<p>
システムカタログを変更するトランザクションの途中でデコードが開始されると、デコーダがそれを認識できないことがあり、その結果、カタログ検索でそのトランザクションが進行中として扱われませんでした。
</p>
<li>パーティションテーブルのレプリカアイデンティティ設定についての無意味なチェックが除去されました。      (Hou Zhijie) (14)(13)</li>
<p>重要なのはリーフパーティションのレプリカアイデンティティの設定であり、それが親テーブルに設定されていない場合にエラーを投げる必要はありません。
</p>
<li>SQL関数に渡される読み書き可能な拡張データムの取り扱いを修正しました。  (Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
インライン化されていない SQL関数が 2つ以上の場所で引数を使用し、そのうちの 1箇所で読み書き可能なデータムを上書きで変更できると期待した場合、後でそのパラメータを使用した時に間違った値が観測されました。
</p>
<p>
配列を引数に取る再帰的な SQL関数の実行で、誤った問い合わせ結果が生じるケースが報告されました。PostgreSQL本体内では拡張データム機構は、配列と複合型の値に対してのみ使用されています。
</p>
<li>circle型の等価比較で NaN を適切に処理するように修正されました。  (Ranier Vilela) (14)(13)(12)</li>
<p>
左側の円の半径が浮動小数点数の NaN であった場合、中心座標が同じで任意の半径を持つ円と等しいと見なされるようになりました。
</p>
<li>Snowball辞書で過度に長い単語を語幹処理しないようになりました。  (Olly Betts, Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
入力単語が 1000バイトを超える場合、Snowballコードを通すのではなく、大文字小文字を揃えた後、そのまま返すようになりました。
</p>
<p>
この制限は、トルコ語の語幹機能における recursion-to-stack-overflow への既知問題から保護し、Snowballの語幹機能におけるその他の安全性や性能の問題に対する良い保険になると考えられます。
</p>
<li>文字列比較における解放後メモリアクセスが修正されました。  (Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
文字列比較関数の不適切なメモリ管理により、もはや割り当てられていないバッファに書き込みが生じて、そのメモリを現在使用している何かが壊れる可能性がありました。
</p>
<p>
これは、かなり長い文字列（1kB以上）で ICU照合順序が使用されている場合にのみ、発生しました。
</p>
<li>スタックオーバーランに至るまでの再帰に対するさらなる防御（検査コード）が追加されました。  (Richard Guo, Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
巨大な SQL文で「ERROR:  stack depth limit exceeded」のエラーを出さずに、バックエンドプロセスがクラッシュする動作が報告されていました。
</p>
<li>非常に小さな work_mem と大きなタプル（1行が大きい）の組み合わせでハッシュテーブルのサイズを選択するときの、誤動作を回避するようになりました。  (Zhang Mingli) (14)(13)</li>
<li>autovacuum launcherプロセスでメモリリークを回避するようになりました。  (Reid Thompson) (14)(13)(12)(11)(10)</li>
<p>
以前からのバグであるにもかかわらず現場からの報告がないことから、この問題はバージョン15 より前のブランチでは顕在化しないと思われますが、確かではないため、各バージョン系列にバックパッチが行われました。
</p>
<li>PL/pgSQL が RECORD として宣言されたパラメータを処理する能力が改善されました。  (Tom Lane) (14)(13)(12)(11)</li>
<p>
多相パラメータに対して行うのと同じように、セッション中に RECORDパラメータに渡される各具象型に対して、個別の関数キャッシュ項目を構築するようになりました。これにより、以前は「ERROR:  type of parameter ... does not match that when preparing the plan」などのエラーで失敗していたいくつかの使用法が動作するようになりました。
</p>
<li>libpq内の NULL のコネクションポインタに対する欠落していた検査が追加されました。  (Daniele Varrazzo, Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
libpq の関数は、NULL の PGconn 引数を検査して、クラッシュする代わりにエラーを出す、という慣習があります。PQflush() と PQisnonblocking() でこれが守られていなかったため修正されました。
</p>
<li>ecpgで、複数の varchar または bytea 変数が同じ宣言内で宣言されている時の変数ストレージクラスの省略を修正しました。  (Andrey Sokolov) (14)(13)(12)(11)(10)</li>
<p>
これまで「static varchar str1[10], str2[20], str3[30];」を以下のように変換していました。
</p>
<pre>
（不適切な出力例）
static struct varchar_1  { int len; char arr[ 10 ]; }  str1 ;
       struct varchar_2  { int len; char arr[ 20 ]; }  str2 ;
       struct varchar_3  { int len; char arr[ 30 ]; }  str3 ;
</pre>
<li>postgres_fdwで、EvalPlanQual の実行計画むけに構築されたターゲットリストが、必要なすべての列を持つことになりました。  (Richard Guo, Etsuro Fujita) (14)(13)(12)(11)(10)</li>
<p>
これにより「ERROR: variable not found in subplan target list」エラーが防止されます。EvalPlanQual は READ COMMITTED 隔離レベルの問い合わせで使われる処理です。
</p>
<li>プラットフォームの uuid_create() 関数からの不要な出力を拒否するようになりました。  (Nazir Bilal Yavuz) (14)(13)(12)(11)(10)</li>
<p>
uuid-osspモジュールでは libc の uuid_create() がバージョン1 の UUID を生成すると期待していますが、最近の NetBSD のリリースでは、代わりにバージョン4 の (ランダムな) UUID を生成します。これを検査して、そうであればエラーを出すようになりました。
</p>
<p>
ドキュメントの、NetBSD の実装が uuid-ossp に使用可能という記載も削除されました。（バージョン4 の UUID が必要な場合には、uuid-ossp モジュールではなく、本体付属の関数 gen_random_uuid() を使ってください。）
</p>
<li>新しい Perlテストモジュールが標準インストールに含まれるようになりました。  (&Aacute;lvaro Herrera) (14)(13)(12)(11)(10)</li>
<p>
PostgreSQL/Test/Cluster.pm と PostgreSQL/Test/Utils.pm をバージョン15 より前のブランチの標準インストールファイルに追加しました。これは、古いブランチで新しく書かれたテストコードを使いたい拡張のためです。
</p>
<li>NetBSD で、postmaster 起動時に動的シンボル解決を強制するようになりました。  (Andres Freund, Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
これにより、NetBSD 10 におけるダイナミックリンカでのデッドロックの危険性を回避できるようになりました。
</p>
<li>clang 15 以降のコンパイラからの警告が出ないようになりました。  (Tom Lane) (14)(13)(12)(11)(10)</li>
<li>VACUUM が btreeインデックスでのページ削除でページの親ダウンリンクを見つけるのに失敗した場合でも進行するように修正されました。  (Peter Geoghegan) (13)(12)(11)(10)</li>
<p>
エラーを投げるのではなく、むしろ問題を記録し、空のページを削除せずに続行するようになりました。以前は、バグのある演算子クラスまたは破損したインデックスにより、インデックスのバキューム処理がいつまでも完了せず、最終的に XID周回の問題につながっていました。
</p>
<p>
以下メッセージが ERROR から LOG に変更されます。「failed to re-find parent key in index ... for deletion target page ...」
</p>
<li>継承された更新で稀に生じる MULTIEXPR_SUBLINK のサブプランのエラーが修正されました。  (Tom Lane) (13)(12)(11)(10)</li>
<p>
構文 UPDATE tab SET (c1, ...) = (SELECT ... ) を継承テーブルやパーティション化された対象テーブルに使用すると、子テーブルが十分に異なっている場合、失敗することがありました。
</p>
<p>
これは通常、エグゼキュータでの一貫性チェックの失敗のエラーとして現れます。しかし、クラッシュや不正なデータ更新（すなわち論理的なデータ破損）も起こり得ます。
</p>
<p>
本構文の UPDATE に対して、「ERROR:  invalid attribute number ...」などの予期せぬエラーの発生が報告されました。
</p>
<li>外側の問い合わせがグループ化セットを持つ場合、FROM のないサブクエリの平坦化を回避するようになりました。  (Tom Lane) (11)(10)</li>
<p>
この誤りは、アサート失敗や「ERROR:  variable not found in subplan target list」 などのプランナエラーにつながる可能性があります。
</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>
