<?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 16.1 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-16-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:47: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 16.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 16.2 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/16-2/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Tue, 27 Feb 2024 00:20:59 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 16]]></category>
		<category><![CDATA[PostgreSQL 16.1]]></category>
		<category><![CDATA[PostgreSQL 16.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=14412</guid>

					<description><![CDATA[このリリースは 16.1 からの修正リリース（2024年 2月 8日リリース）です。 16.X からのアップデートではダンプ、リストアは不要です。 しかしながら、本バージョンでの GINインデックスの修正については、イン ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 16.1 からの修正リリース（2024年 2月 8日リリース）です。<br />
16.X からのアップデートではダンプ、リストアは不要です。</p>
<p>しかしながら、本バージョンでの GINインデックスの修正については、インデックスが既に破壊されている可能性もあるためアップグレード後にインデックス再作成することを推奨します。<br />
また、16.1 よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/16-1/ ">16.1 のリリース情報</a>も参照してください。</p>
<p><span id="more-14412"></span></p>
<h3>PostgreSQL 16.1 から 16.2 への変更点</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>
		<item>
		<title>PostgreSQL 16.1 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/16-1/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Mon, 27 Nov 2023 01:15:33 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 16]]></category>
		<category><![CDATA[PostgreSQL 16.1]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=13335</guid>

					<description><![CDATA[このリリースは 16.0 からの修正リリース（2023年 11月 9日リリース）です。 16.X からのアップデートではダンプ、リストアは不要です。 しかしながら、いくつかの修正を適用するにはインデックス再構築が必要です ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 16.0 からの修正リリース（2023年 11月 9日リリース）です。<br />
16.X からのアップデートではダンプ、リストアは不要です。</p>
<p>しかしながら、いくつかの修正を適用するにはインデックス再構築が必要です。項目4番、5番、6番、7番について確認してください。</p>
<p><span id="more-13335"></span></p>
<h3>PostgreSQL 16.0 から 16.1 への変更点</h3>
<p>16.1、15.5、14.10、13.13、12.17、11.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>DISTINCT を付けて "any" 型の引数をとる集約関数を実行するときに、不明なデータ型の引数の扱いが修正されました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
本障害により、実行時にテキスト型の値が不明なデータ型の値（即ち 0x00 で終わる文字列）として解釈されて、テキスト値に続くサーバメモリの露出をもたらす可能性がありました。(CVE-2023-5868)
</p>
<li>新たな配列次元を計算する時に整数オーバーフローを検知するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
現在の配列範囲の外側にある配列の添え字に新たな要素を割り当てるとき、境界値ケースで検知されない整数オーバーフローが生じる可能性がありました。潜在的に任意コード実行の攻撃が可能なメモリ上書きや、サーバメモリ暴露が可能でした。(CVE-2023-5869)
</p>
<li>pg_signal_backend ロールがバックグラウンドワーカと autovacuum のプロセスにシグナル送信することを防ぐようになりました。  (Noah Misch, Jelte Fennema-Nio) (16)(15)(14)(13)(12)(11)</li>
<p>
ドキュメントでは pg_signal_backend はスーパーユーザ所有のプロセスにはシグナルを投げれないとされていますが、これらプロセスには送信可能でした。紐づくロールの ID が ゼロになっていたため、スーパーユーザ所有でないと見做されていました。これらをスーパーユーザ所有として扱うように修正されました。
</p>
<p>
PostgreSQL本体コードの範囲ではセキュリティ影響は軽微です。しかし、バックグラウンドワーカを使う拡張が脆弱になるかもしれません。(CVE-2023-5870)
</p>
<li>GiSTインデックス作成で再帰的なページ分割中の誤動作が修正されました。  (Heikki Linnakangas) (16)(15)(14)(13)(12)</li>
<p>
ページのダウンリンク位置が不正確に追跡される場合について修正されて、そのような状態から復旧できるロジックが導入されました。この誤りはその後のインデックス検索で誤った問い合わせ結果をもたらします。マイナーバージョンアップ後に GiSTインデックスを再作成することを推奨します。
</p>
<li>interval型の列に対する Btreeインデックスエントリの重複排除が防止されました。  (Noah Misch) (16)(15)(14)(13)</li>
<p>
interval型には「24:00:00」と「1 day」のように、区別できるけれども比較すると等しい値があります。これは Btree 重複排除における前提を破ります。そのため、interval型の列は重複排除の対象外とする必要がありました。この見落としにより index only スキャンで誤った問い合わせ結果が返る可能性がありました。さらに、amcheck がほぼ全てのこのようなインデックスをエラー報告するように改定されました。
</p>
<p>
マイナーバージョンアップ後に interval型列の btreeインデックスは再作成すべきです。
</p>
<li>datetime_minmax_multi_ops の BRINインデックスで date型の値をより適切に処理するようになりました。  (Tomas Vondra) (16)(15)(14)</li>
<p>
日付の距離計算が逆方向であったため、マージするエントリを適切に決定できませんでした。このようなインデックスは正しい結果を返すものの、本来よりも大幅に非効率でした。該当する BRIN インデックスは再作成することを推奨します。
</p>
<li>datetime_minmax_multi_ops の BRINインデックスで、timestamp および timestamptz 型の無限値や大きな値をより適切に処理するようになりました。  (Tomas Vondra) (16)(15)(14)</li>
<p>
無限（infinity、-infinity）が、他の値から大きな距離ではなく、距離ゼロと誤って処理されていて、マージするエントリを適切に決定できませんでした。また、無限ではないけれども巨大な値（タイムスタンプとして表現できる上限に近い値）では、内部オーバーフローを起こして、やはり、マージするエントリを適切に決定できませんでした。このようなインデックスは正しい結果を返すものの、本来よりも大幅に非効率でした。該当する BRIN インデックスは再作成することを推奨します。
</p>
<li>interval_minmax_multi_ops の BRINインデックスで極端な interval型の値での演算オーバーフローを回避するようになりました。  (Tomas Vondra) (16)(15)(14)</li>
<p>
このバグは大きな interval型の値を該当するインデックスに挿入するときに、予期せぬエラー「ERROR:  interval out of range」をもたらします。
</p>
<li>複合パーティションキーを持つハッシュパーティションテーブルに対するステップ生成と実行時プルーニングが修正されました。  (David Rowley) (16)(15)(14)(13)(12)(11)</li>
<p>
プルーニングとはパーティションテーブルへの問い合わせで一部パーティションの走査を省略することを意味し、ここでのステップとはそのための情報が格納されたデータ構造を意味します。
</p>
<p>
複数あるパーティションキーの 1つに IS NULL条件がある一部の場合にクラッシュする可能性がありました。
</p>
<li>MERGE での同時行更新の再チェックの不整合が修正されました。  (Dean Rasheed) (16)(15)</li>
<p>
READ COMMITTED モードでは UPDATEは、対象行が同時実行トランザクションから更新されたことを検知したなら、対象行に関する問い合わせの WHERE句を再チェックします。MERGE において、この再チェック処理が適切に動作しておらず、新たに更新された行を再度更新すべきかの判断を誤る可能性がありました。
</p>
<p>
本障害により、READ COMMITTEDモードでの同時実行で、MERGE が誤った問い合わせ結果（誤った更新結果）となる可能性がありました。
</p>
<li>継承テーブルに対する UPDATE、DELETE、MERGE で、親テーブルが制約で除外されるときでも、対象テーブルを正しく識別するようになりました。  (Amit Langote, Tom Lane) (16)(15)(14)</li>
<p>
コマンドで指定したテーブルが制約により処理対象から除外されているけれども、その子孫テーブルは除外されていない場合、最初の除外されていない子孫テーブルを主対象テーブルとみなしていました。
</p>
<p>
この誤りにより、文レベルのトリガが子テーブルに対して発火する誤動作が生じました。加えて、バージョン16 では予期せぬエラーも発生しました。
</p>
<pre>
（16.0 でのエラー発生例）
db1=# CREATE TABLE t8p (f1 int, f2 int, f3 int, check (f1 < 10) NO INHERIT);
db1=# CREATE TABLE t8c () INHERITS (t8p);
db1=# INSERT INTO t8c SELECT i, i+1, 0 FROM generate_series(1,1000) i;
db1=# CREATE INDEX ON t8c (f1, f2);
db1=# UPDATE t8p SET f3 = 11 WHERE f1 = 12 and f2 = 13;
ERROR:  invalid perminfoindex 0 in RTE with relid 16648
</pre>
<li>btree の ScalarArrayOpExprノードのマーク/リストア処理で、境界値の誤りが修正されました。  (Peter Geoghegan) (16)(15)(14)(13)(12)(11)</li>
<p>
ScalarArrayOpExpr は「indexcol = ANY(ARRAY[...])」や「indexcol IN (...)」といった検索条件で使われるエグゼキュータノードです。マーク/リストア処理とは、処理位置を覚えておいて再開する btreeインデックス検索の内部処理です。
</p>
<p>
本障害により、誤った問い合わせ結果が生じて、結果に含まれるべき行が失われる可能性がありました。
</p>
<li>Memoizeプラン要素の実行における問い合わせ実行内でのメモリリークが修正されました。  (Orlov Aleksej, David Rowley) (16)(15)(14)</li>
<li>集合を返す関数が、繰り返しゼロ行を返す場合のクエリ内メモリリークが修正されました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
行数の多いテーブルに対する jsonb_array_elements() 関数実行で引数でjsonb型の列の存在しないキーを指定したときにメモリリークが発生する現象が報告されました。
</p>
<li>cursor_to_xmlschema() 関数がデータを返さないポータルに適用された場合でもクラッシュしないようになりました。  (Boyu Yang) (16)(15)(14)(13)(12)(11)</li>
<li>連続した pg_logical_slot_get_changes() 関数の呼び出しの間でオリジンフィルタ条件の不適切な共有が修正されました。  (Hou Zhijie) (16)</li>
<p>
この関数の 1つの呼び出しで設定されたオリジン条件が、オリジン引数を指定しなかった後の呼び出しで再使用されていました。これは意図された動作ではありません。
</p>
<li>contrib/pgrowlocks の pgrowlocks() 関数がパーティションテーブルに適用された場合に意図したエラーが表示されるようになりました。  (David Rowley) (16)(15)(14)(13)(12)</li>
<p>
以前は「ERROR:  only heap AM is supported」という的外れなエラーが発生していました。「ERROR:  ".." is a partitioned table」が本来出るべきエラーです。
</p>
<li>さまざまな SQL関数で無効なインデックスをよりきれいに処理するようになりました。  (Noah Misch) (16)(15)(14)(13)(12)(11)</li>
<p>
pgstatindex()、pgstatginindex()、pgstathashindex()、または pgstattuple() が無効なインデックスに適用された場合、エラーを報告するようになりました。brin_desummarize_range()、brin_summarize_new_values()、brin_summarize_range()、または gin_clean_pending_list() が無効なインデックスに適用された場合は、デバッグ・レベルのメッセージを報告する以外は何もしない動作になります。
</p>
<p>
以前は、これらの関数はインデックスを処理しようとして、失敗した CREATE INDEX の残骸の内容によっては奇妙なエラーを出すことがありました。「ERROR:  could not read block 0 in file」が出るケースが報告されました。
</p>
<li>to_tsvector() への長い入力に対する、早すぎるメモリ割り当てエラーを回避するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
実際には処理可能な場合でも、「ERROR:  invalid memory alloc request size .....」が発生することがありました。
</p>
<li>tsvector型のバイナリ入力関数 tsvectorrecv() で構築された tsvectorデータの過剰なサイズ割り当てが修正されました。  (Denis Erokhin) (16)(15)(14)(13)(12)(11)</li>
<p>
受信ベクトルに位置データが含まれている場合、バイナリ受信関数は、完成した tsvector に無駄なスペース（位置データのサイズにほぼ等しい）を残していました。極端な場合、これにより出力時に長さ制限を下回っていたベクトルに対して「ERROR:  lexeme length exceeded maximum total lexeme length」が発生する可能性がありました。いずれの場合もディスクスペースが無駄になる可能性がありました。
</p>
<li>破損した PGLZ圧縮データの検査が改善されました。  (Flavien Guedez) (16)(15)(14)(13)</li>
<p>
以前はクラッシュ（セグメンテーション違反）が発生していました。
</p>
<li>run_as_ownerオプションのコマンドによる変更が実際に適用されるようにALTER SUBSCRIPTION が修正されました。  (Hou Zhijie) (16)</li>
<p>
これまでは ALTER SUBSCRIPTION ... SET (run_as_owner = ...) を実行しても効いていませんでした。
</p>
<li>パーティションテーブルへの一括テーブル挿入が修正されました。  (Andres Freund) (16)</li>
<p>
パーティション間での挿入状態の不適切な共有により、COPY FROM 中に失敗する可能性があり、典型的には「ERROR:  could not read block NNNN in file XXXX: read only 0 of 8192 bytes」が発生していました。
</p>
<li>COPY FROM で必要のない列のデフォルト値評価を避けるようになりました。  (Laurenz Albe) (16)</li>
<p>
これにより、デフォルト値が実際にはその列で有効でない場合や、デフォルトの式が現在の実行コンテキストで失敗する場合に発生するエラーが回避されます。このような特殊なケースは、ダンプのリストア時に発生することがありました。15.x 以前のリリースではこのような状況にならなかったため、16.x 以降について修正されました。
</p>
<li>COPY FROM でサポートされていないエンコーディング変換が必要な場合に正常に失敗するようになりました。  (Tom Lane) (16)(15)(14)</li>
<p>
最近のリファクタリングで、意図していたエラーチェックが誤って削除され、有用なエラーメッセージの代わりに「ERROR:  cache lookup failed for function 0」が出力されていました。
</p>
<li>EXPLAIN によって表示されるようにマークされたパラメータの起動時の値がNULL である場合に、EXPLAIN でのクラッシュを回避するようになりました。  (Xing Guo, Aleksander Alekseev, Tom Lane) (16)(15)(14)(13)(12)</li>
<p>
PostgreSQL本体には、これに適合する組み込みパラメータはありませんが、拡張機能でそのようなパラメータを定義することができます。
</p>
<li>「ON COMMIT DROP」での一時テーブル削除中にスナップショットがあることを確認するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
これにより、一時テーブルのカタログエントリが（非常に複雑な「CHECK」条件などで）TOAST を必要とするほど大きい幅のフィールドを持つ場合の誤動作が防止されます。
</p>
<p>
CREATE TEMP TABLE でアサート失敗が発生する動作が報告されました。
</p>
<li>system() によってフォークされたばかりの子プロセスの、シャットダウン信号に対する不適切な応答が回避されました。  (Nathan Bossart) (16)(15)(14)(13)(12)(11)</li>
<p>
Cライブラリ関数の system() は archive_command 設定などでPostgreSQL が外部コマンドを呼ぶ動作で使用されています。system() によってフォークされたものの、目的の子プログラムをまだ実行していない子プロセスが、親サーバープロセス向けのシグナルを受信して動作するおそれがありました。これにより、終了時にクリーンアップ処理が重複して実行されてしまいます。
</p>
<p>
fastシャットダウンに対してアサート失敗する動作が報告されました。
</p>
<li>フロントエンドプログラム（pg_ctl や pg_controldata、pg_checksums）で、pg_control の不正な読み取りに対応するようになりました。  (Thomas Munro) (16)(15)(14)(13)(12)</li>
<p>
ファイルシステムによっては、サーバがそのファイルに同時に書き込むときに、pg_control の読み込みがアトミックな動作にならないことがあります。これは不正な CRC によって検出できます。エラーを報告する前に、数回再試行してファイルが有効になるかどうかを確認するようになりました。
</p>
<li>関連する SQL関数で pg_control の不正な読み取りが回避されました。  (Thomas Munro) (16)(15)(14)(13)(12)(11)</li>
<p>
ファイルの一貫したビューを確実に取得できるように、pg_control を読み取る前に適切なロックを取得するようになりました。関数 pg_control_system()、pg_control_checkpoint()、pg_control_recovery()、pg_control_init() で修正が行われました。
</p>
<li>「ORDER BY」または「DISTINCT」を使用した集計関数の計画時に発生するエラー「ERROR:  could not find pathkey item to sort」が修正されました。  (David Rowley) (16)</li>
<li>バックエンドアクティビティの文字列配列のサイズを計算するときに、整数オーバーフローの発生が回避されました。  (Jakub Wartak) (16)(15)(14)(13)(12)</li>
<p>
64ビットマシンでは、track_activity_query_size 設定値は、許可される接続数を乗算したときに 32ビットのオーバーフローを引き起こすのに十分大きな数となります。
</p>
<p>
該当する処理が実行される代表的な操作は pg_stat_activityビューの参照です。max_connections が 3000 以上、track_activity_query_size = 1MB のとき、「SELECT * FROM pg_stat_get_activity(NULL)」に対して、「ERROR:  invalid memory alloc request size 18446744072590721024」が発生するケースが報告されました。
</p>
<li>継承テーブルの ANALYZE に対して、pg_stat_progress_analyzeビューで一貫性のない進捗状況統計が一時的に表示される問題が修正されました。  (Heikki Linnakangas) (16)(15)(14)(13)</li>
<p>
current_child_table_relidフィールドの更新と同時に、ブロックレベルのカウンタをゼロにリセットする必要がありました。
</p>
<li>統計カウンタに WAL書き込みを報告するようにbackground writer が修正されました。  (Nazir Bilal Yavuz) (16)(15)(14)</li>
<p>
background writerプロセスからの WAL書き込みがこれまでpg_stat_walビューで参照できる統計情報に反映されませんでした。
</p>
<li>pgstat_report_wal() で強制フラッシュ動作の混乱が修正されました。  (Ryoga Yoshida, Michael Paquier) (16)(15)</li>
<p>
本障害により、WAL と I/O に関する一部の統計情報が PostgreSQLサービス停止で失われてしまうおそれがありました。
</p>
<li>一時テーブルの拡張（ブロック追加）に関する統計追跡が修正されました。  (Karina Litskevich, Andres Freund) (16)</li>
<p>
以前は、一時テーブルの書き込みが通常テーブルの書き込みとしてカウントされていました。
</p>
<li>track_io_timing が有効なときにリレーション拡張操作にかかる時間を書き込み時間に含めるようになりました。  (Nazir Bilal Yavuz) (16)</li>
<li>キャッシュされたCALL文の依存関係を追跡し、必要に応じて再計画するようになりました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
CALL文の引数でインライン化されている関数を置き換えする DDLコマンドでは、PL/pgSQL によるキャッシュを捨てる必要がありました。これが行われなかったため、誤動作や「ERROR:  cache lookup failed」などの奇妙なエラーが発生していました。
</p>
<pre>
（誤動作例）
db1=# CREATE FUNCTION f(int) RETURNS int LANGUAGE sql AS $$ SELECT $1 + 1 $$;
db1=# CREATE PROCEDURE p1(p int) LANGUAGE plpgsql
        AS $$ BEGIN CALL p2(f(p)); END $$;
db1=# CREATE PROCEDURE p2(p int) LANGUAGE plpgsql
        AS $$ BEGIN RAISE NOTICE '%', p; END $$;
db1=# CALL p1(10);
NOTICE:  11
db1=# DROP FUNCTION f(int);
db1=# CREATE FUNCTION f(int) RETURNS int LANGUAGE sql AS $$ SELECT $1 + 2 $$;
db1=# CALL p1(10);
ERROR:  cache lookup failed for function 16699
CONTEXT:  SQL statement "CALL p2(f(f1))"
PL/pgSQL function p1(integer) line 1 at CALL
</pre>
<li>OpenSSL接続のセットアップでエラーが出た後に発生する可能性があった、NULLポインタを解放することによるクラッシュを回避するようになりました。  (Sergey Shinderuk) (16)(15)</li>
<li>外側の問い合わせレベルから レコード型の値を解析するときに、正しくネストの深さを追跡するようになりました。  (Richard Guo) (16)(15)(14)(13)(12)(11)</li>
<p>
この見落としにより、アサート失敗やクラッシュ、または「ERROR:  bogos varno: ..」エラーが引き起こされる可能性がありました。レコード型を出力する共通テーブル式（WITH句）を使った問い合わせで現象の発生が報告されました。
</p>
<li>ScalarArrayOpExprプランノードにおけるハッシュ関数と否定関数の依存関係を追跡するようになりました。  (David Rowley) (16)(15)(14)</li>
<p>
これらの関数はノードの元の演算子が存在している間は消えないと考えられるためこれはほとんどの場合に無害です。
</p>
<li>レコード型のキャッシュ管理でエラー処理のバグが修正されました。  (Thomas Munro) (16)(15)(14)(13)(12)(11)</li>
<p>
誤った個所でちょうどメモリ不足エラーが起きると、無限ループをもたらす一貫しない状態が生じる可能性がありました。
</p>
<li>WALの読み取り中のメモリ不足エラーを FATAL として扱うようになりました。  (Michael Paquier) (16)(15)(14)(13)(12)</li>
<p>
以前はでたらめなデータ状態として扱っており、WAL の終わりに到達したものと解釈していましたが、それは間違っていて一貫しない WAL再生が引き起こされる可能性がありました。
</p>
<li>でたらめな WALレコード長フィールドに基づいてメモリーを割り振ろうとして起こりうるリカバリのエラーが修正されました。  (Thomas Munro, Michael Paquier) (16)(15)(14)(13)(12)</li>
<p>
プライマリ停止後にスタンバイが「FATAL:  invalid memory alloc request size ....」を出して止まる現象が報告されました。
</p>
<li>Windows で min_dynamic_shared_memory を 0 より大きくに設定したときに、パラレルクエリの SQL実行で「ERROR:  could not duplicate handle ...」エラーが生じる障害が修正されました。  (Thomas Munro) (16)(15)(14)</li>
<li>内部実装関数 GenericXLogFinish の処理順序が修正されました。  (Jeff Davis) (16)(15)(14)(13)(12)(11)</li>
<p>
このコードは、変更されたバッファをダーティとしてマークする前に WAL を書き込むことで、クラッシュ安全性に必要な条件に違反していました。この関数を使用する　PostgreSQL本体コードはありませんが、拡張機能（例えば contrib/bloom）は使用します。
</p>
<li>PL/Python例外処理の誤ったアサートが削除されました。  (Alexander Lakhin) (16)(15)(14)(13)(12)(11)</li>
<li>サブスクリプションの新しいオプション run_as_owner をダンプするよう pg_dump が修正されました。  (Philip Warner) (16)</li>
<p>
この見落としにより、サブスクリプションは run_as_owner を意図して true に設定していたとしても、常に false として復元されていました。これはバージョン16 より前のリリースの動作とは同等ではありません。
</p>
<li>選択的リストアが選択されたテーブルのテーブルレベルとカラムレベルのACL 両方を含むように pg_restoreが修正されました。  (Euler Taveira, Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
以前は両方のタイプとも存在する場合にテーブルレベルの ACL のみが復元されていました。
</p>
<li>pg_upgrade に abstime、reltime、tinterval のデータ型の使用について検査するロジックが追加されました。  (&Aacute;lvaro Herrera) (16)(15)(14)(13)(12)</li>
<p>
これらのデータ型は PostgreSQLバージョン12 で廃止されたため、アップグレード可能と主張する前に古いデータベースに存在しないことを確認します。
</p>
<li>Windows での pgbench で偽性のエラー「ERROR:  too many client connections」を回避するようになりました。  (Noah Misch) (16)(15)(14)(13)(12)</li>
<li>vacuumdb の -N オプションを複数与えた場合の処理が修正されました。  (Nathan Bossart, Kuwamura Masaki) (16)</li>
<p>
複数の -N オプションは、複数スキーマについてスキーマ内テーブルを除外すべきですが、クエリ生成の誤りで、実際には何も除外されていませんでした。
</p>
<li>vacuumdb が ANALYZEのみの動作モード（-Z、--analyze-only オプション）であっても、--buffer-usage-limit オプションに従うように修正されました。  (Ryoga Yoshida, David Rowley) (16)</li>
<li>contrib/amcheckで中断されたページ削除を破損として扱わなくなりました。  (Noah Misch) (16)(15)(14)(13)(12)(11)</li>
<p>
この修正で以下のような誤った報告が防止されます。
</p>
<pre>
ERRPR:  the first child of leftmost target page is not leftmost of its level ...
ERROR:  block NNNN is not leftmost ...
ERROR:  left link/right link pair in index XXXX not in agreement
</pre>
<p>
リカバリを終えたデータベースクラスタで、btree インデックスぺージを削除するWALレコードが中途であって、VACUUM がそれらをクリーンアップする前に、amcheck を実行するとこれらのエラーが発生していました。
</p>
<li>contrib/btree_ginで「&lt;」または「&lt;=」を使用して interval型のインデックスに対するインデックススキャンを行った際の障害が、修正されました。  (Dean Rasheed) (16)(15)(14)(13)(12)(11)</li>
<p>
このようなインデックススキャンは本来返すべきすべての値を返せず、誤った問い合わせ結果が生じました。
</p>
<li>LLVM 16 および 17のサポートが追加されました。  (Thomas Munro, Dmitry Dolgov) (16)(15)(14)(13)(12)</li>
<li>最近の macOSでのビルド時の警告を抑制しました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
Xcode 15 (macOS Sonoma とともにリリース) では、PostgreSQL のビルド中にライブラリの重複に関する警告が多数発生するようにリンカの動作が変更されました。これらは無害ですが目障りなため、同じライブラリを複数回引用することは避けるようになりました。
</p>
<p>
また、-multiply_define の使用も削除されました。これは明らかに無効なものでした。
</p>
<li>contrib/unaccent のルールファイルをビルドするとき、PostgreSQLビルドで --with-python が指定されておらず、PYTHON変数も設定されていない場合に、エラーにするのではなくパス指定無しの「python」コマンドを使うようになりました。  (Japin Li) (16)(15)(14)(13)</li>
<li>デフォルトのタイムゾーンの略語リストから「PHOT」（フェニックス諸島時間）が削除されました。  (Tom Lane) (16)(15)(14)(13)(12)(11)</li>
<p>
最近の Debian および Ubuntuリリースでは、基礎となる tzdbエントリがデフォルトでインストールされなくなったため、デフォルトリストにこの略語が存在すると、エラーが発生する可能性があります。必要であれば、カスタム略語ファイルを介して元に戻すことができます。
</p>
<li>共有カタログに対して正しい動作を行うように pg_stat_reset_single_table_counters() が修正されました。  (Masahiro Ikeda) (15)</li>
<p>
これまでは本関数でリセットしても共有カタログには効果がありませんでした。
</p>
<li>gtsvector_picksplit() の誤った実装が修正されました。  (Alexander Lakhin) (15)(14)(13)(12)(11)</li>
<p>
tsvector列の GiSTインデックスでのページ分割の決定が適切に行われない可能性がありました。
</p>
<p>
この障害により不正メモリ読み取りが生じるケースが報告されました。
</p>
<li>エラー後に同セッションでロジカルデコーディングが再試行されるときの、アサート失敗が修正されました。  (Hou Zhijie) (15)(14)(13)(12)(11)</li>
<li>autovacuum launcherプロセスの動作を止めてしまう可能性のある、データベース削除時の競合状態が修正されました。  (Andres Freund, Will Mortensen, Jacob Speidel) (15)</li>
<p>
競合で削除されたデータベースの統計エントリが残り、そのためにどのデータベースを処理するかの選択が混乱する可能性がありました。
</p>
<li>外部ソート処理における論理テープ制御でデータ型サイズの混乱が修正されました。  (Ranier Vilela) (15)(14)(13)</li>
<p>
Linux などの long が int よりも大きいプラットフォーム（Windows なら同サイズ）において、数テラバイトの一時ファイルを必要とする巨大なソート処理について、整数オーバーフローで誤動作を引き起こす可能性がありました。
</p>
<li>sysloggerプロセスの標準入力が意図せず閉じられることが回避されるようになりました。  (Heikki Linnakangas) (15)(14)(13)</li>
<li>SQLのパース解析中に意味のある処理を行わないユーティリティコマンドのプランキャッシュ再検証を行わないようになりました。  (Tom Lane) (15)(14)(13)(12)(11)</li>
<p>
これにより CPUサイクルが節約されるだけでなく、スナップショットを設定してはならないトランザクション制御コマンドでのキャッシュ無効化後のエラーが防止されます。
</p>
<p>
プロシージャ内で COMMIT の次に SET TRANSACTION ISOLATION LEVEL を実行して、「ERROR:  SET TRANSACTION ISOLATION LEVEL must be called before any query」が発生する障害ケースが報告されました。
</p>
<li>テーブルの行データを処理するコードにおいて、値が使用されている間は参照渡しの attmissingval値を長期間有効なコンテキストに保持するようになりました。  (Andrew Dunstan) (15)(14)(13)(12)(11)</li>
<p>
これにより、タプルスロットの寿命がその値を構築したタプル記述子よりも長くなった場合に、不正なポインタが使用される可能性が回避されます。
</p>
<p>
予期せぬエラー「ERROR:  unsupported byval length: 32639」が生じて、その後にアサート失敗やクラッシュが生じるケースが報告されました。
</p>
<li>ALTER ROLE の後に search_path の有効な値を再計算するようになりました。  (Jeff Davis) (15)(14)(13)(12)(11)</li>
<p>
これにより、ロール名を変更後に特別な文字列「$user」の意味が再決定されます。
</p>
<li>pg_dump で pg_catalog スキーマのダンプを要求された場合のアサート失敗が修正されました。  (Peter Eisentraut) (15)</li>
<li>pg_basebackup で無効な一時スロット名が生成されないようになりました。  (Jelte Fennema) (15)(14)(13)(12)(11)</li>
<p>
サーバー接続が pgbouncer を介して実行されている場合でのみ発生が確認されています。
</p>
<li>未解放のセーブポイントがある場合に COMMIT AND CHAIN/ROLLBACK AND CHAIN が正しく動作するように修正されました。  (Liu Xiang, Tom Lane) (14)(13)(12)</li>
<p>
現在のトランザクションのプロパティを新しいトランザクションに伝播する代わりに、以前のトランザクションのプロパティをいくつか伝播していました。
</p>
<p>
以下のように実行したときに「SHOW transaction_isolation」に対して不適切な出力が得られるケースが報告されました。
</p>
<pre>
db1=# START TRANSACTION ISOLATION LEVEL SERIALIZABLE; COMMIT;
      START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
      SAVEPOINT s; COMMIT AND CHAIN;
      SHOW transaction_isolation; 
      COMMIT;
</pre>
<li>スタンバイモードの WALリカバリで無効なページヘッダが見つかった場合にエラーが報告されるようになりました。  (Yugo Nagata, Kyotaro Horiguchi) (14)(13)(12)</li>
<p>
これまでは無効なページヘッダに対するエラー出力なしにページ読み込みのリトライが行われていました。
</p>
<li>複合型の定数フィールドへの参照を含むビューを逆解析するときに、「ERROR:  record type has not been registered」が発生していたのが回避されました。  (Tom Lane) (13)(12)(11)</li>
<p>
SEARCH/CYCLE を含む再帰問い合わせの EXPLAIN 出力でエラーが発生するケースが報告されました。
</p>
<li>RECORD型 の ROW() 式からフィールドを展開できるようになりました。  (Tom Lane) (12)(11)</li>
<p>
PostgreSQL 13 以降では、下記例のように f1、f2、… というフィールド名でレコード型から要素を参照することができます。本機能が PostgreSQL 11.x、12.x にもバックポートされました。
</p>
<pre>
db1=# SELECT (ROW(1,2,3)).f3;
 f3
----
  3
(1 row)
</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>
	</channel>
</rss>
