<?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 12.8 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-12-8/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, 30 Oct 2026 08:22:47 +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 12.8 &#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 12.9 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/12-9/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Mon, 29 Nov 2021 01:04:08 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 12]]></category>
		<category><![CDATA[PostgreSQL 12.8]]></category>
		<category><![CDATA[PostgreSQL 12.9]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=7678</guid>

					<description><![CDATA[このリリースは 12.8 からの修正リリース（2021年11月11日リリース）です。 12.X からのアップデートではダンプ、リストアは不要です。 しかしながら、本リリースで修正されたいくつかの障害により既にインデックス ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 12.8 からの修正リリース（2021年11月11日リリース）です。<br />
12.X からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、本リリースで修正されたいくつかの障害により既にインデックスに破損が生じている可能性があるため、該当するインデックスを再構築することが推奨されます。<br />
また、12.6 よりも前のバージョンから移行する場合には <a href="/tech-blog/pgsql/12-6">12.6 のリリース情報</a>も確認してください。</p>
<p><span id="more-7678"></span></p>
<h3>PostgreSQL 12.8 から 12.9 への変更点</h3>
<p>14.1、13.5、12.9、11.14、10.19、9.6.24 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>PostgreSQLサーバが SSL暗号化または GSS暗号化においてハンドシェイクが完了するまでは外来データを拒絶するようになりました。  (Tom Lane) (14)(13)(12)(11)(10)(9.6)</li>
<p>
これまで TCP接続にデータを挿入できる中間者は、暗号化で保護されているはずのデータベースセッションの冒頭に平文データを投入可能でした。サーバが認証データを要求してこない場合（例えば SSL証明書認証のみを使っている場合）に限られますが、これを悪用して偽の SQLコマンドをサーバに送ることができました。(CVE-2021-23214)
</p>
<li>libpq が SSL暗号化または GSS暗号化のハンドシェイクが完了する前は、外来データを拒絶するようになりました。  (Tom Lane) (14)(13)(12)(11)(10)(9.6)</li>
<p>
これまで TCP接続にデータを挿入できる中間者は、暗号化で保護されているはずのデータベースセッションの冒頭に平文データを投入可能でした。libpq の問い合わせ応答以外の細かい振る舞いのために実現は容易ではありませんが、これを悪用してクライアントの最初の問い合わせに偽の応答を挿入することがおそらく可能でした。別の攻撃は、セッションの初期に送られたクライアントのパスワードやその他の機微データを抜き出すことです。これは前項のサーバ側脆弱性と組み合わせて可能となります。(CVE-2021-23222)
</p>
<li>物理レプリケーションで、プライマリが部分的な WALレコードで終わっているWALセグメントを渡した後にクラッシュした場合について、修正されました。  (&Aacute;lvaro Herrera) (14)(13)(12)(11)(10)(9.6)</li>
<p>
ダウンするプライマリが不完全な WALレコードの残りを書き込み完了できなかった場合、以前のクラッシュリカバリロジックでは、それをバックアップして、不完全な WALレコードの最初から WAL を上書きしました。スタンバイサーバは既にその WALセグメントのコピーを持っているかもしれないので、これは問題がありました。不整合な次セグメントに遭遇して、手動の介入なしにはリカバリできないことになりました。
</p>
<p>
本障害により、更新処理を実行中のプライマリのクラッシュ後にスタンバイがレプリケーション継続できなくなる可能性があり、対処策はスタンバイで WALファイルを手動削除して再起動することでした。
</p>
<p>
クラッシュ後の再起動時に WALセグメント境界を越えたバックアップをしないように修正されました。その代わりに、次の WALセグメントの始めに新しいタイプ（OVERWRITE_CONTRECORD）の WALレコードを書いて、不完全な WALレコードは無視しなければならないことを知らせるようになりました。
</p>
<p>
この修正を適用する場合、新しい WALレコードタイプが生じるようになるため、プライマリより先にスタンバイサーバをアップデートするのが良いです。
</p>
<li>並列VACUUM がインデックスを取りこぼさないように修正されました。  (Peter Geoghegan, Masahiko Sawada) (14)</li>
<p>
テーブルが min_parallel_index_scan_size を上回る 2つ以上のインデックスを持つ場合に、並列VACUUM が min_parallel_index_scan_size を下回るインデックスを処理していませんでした。この結果、これらのインデックスは VACUUM で除去済みのヒープ上のエントリに対する参照を持つことになって、破損した状態となる可能性があります。
</p>
<p>
この問題は並列VACUUM を行わない autovacuum には影響しません。発生条件に該当する、サイズの大小が異なる複数のインデックスを持っていて手動VACUUM を行ったことがあるテーブルについて、REINDEX を行うことが推奨されます。
</p>
<li>CREATE INDEX CONCURRENTLY が直近の準備されたトランザクションを待つように修正されました。  (Andrey Borodin) (14)(13)(12)(11)(10)(9.6)</li>
<p>
準備されたトランザクションから直近に挿入された行が、新たなインデックスから無視されるかもしれませんでした。その結果、インデックスに依存する問い合わせが、その行を取りこぼすおそれがありました。
</p>
<p>
この問題に対する以前の修正は、CREATE INDEX CONCURRENTLY が検査したときに進行中の PREPARE TRANSACTIONコマンドを考慮できていませんでした。max_prepared_transactions &gt; 0 の準備されたトランザクション（二相コミット）が有効なサーバでは、CONCURRENTLY指定で作成されたインデックスを全て REINDEXすることが推奨されます。
</p>
<li>同時作成をしているインデックスで、新たな行に対するエントリ追加の失敗を引き起こす可能性のある競合状態が回避されました。  (Noah Misch, Andrey Borodin) (14)(13)(12)(11)(10)(9.6)</li>
<p>
これにより破損したインデックスが生じる可能性があります。実際には稀にしか発生しないとみられますが、この誤りは潜在的に CONCURRENTLY指定を付けたあらゆるインデックス構築または再構築に影響する可能性があります。同時作成したインデックスの全てを REINDEXすることが推奨されます。
</p>
<li>対象インデックスに付加された演算子クラスのパラメータを維持するようにREINDEX CONCURRENTLY が修正されました。  (Michael Paquier) (14)(13)</li>
<p>
REINDEX CONCURRENTLY 実行後にデフォルトパラメータになってしまう現象が発生していました。
</p>
<li>組込オブジェクト以外を含んだデータベースを複製するときの共有依存関係の誤作成が修正されました。  (Aleksander Alekseev) (14)</li>
<p>
データベースの複製は、テンプレートデータベースから新たなデータベースを作成するとき行われます。本誤動作の結果 pg_shdepend の内容が不正になります。原理的には本障害でオブジェクトを所有しているロールが削除可能になってしまう可能性がありますが、本障害の実際の影響は限定的と考えられます。
</p>
<li>パーティションテーブルにアタッチあるいはデタッチしているテーブルについて、リレーションキャッシュが確実に無効化されるようになりました。  (Amit Langote, &Aacute;lvaro Herrera) (14)(13)(12)(11)(10)</li>
<p>
本障害により、アタッチ/デタッチの後に既存のセッションからそのパーティションに対する直接の挿入/更新を行ったときに、アタッチ/デタッチ操作がリレーションキャッシュに反映されていないことによる、不適切な制約の適用等の誤動作を起こす可能性がありました。
</p>
<li>範囲型の作成時にパースツリーが破損する障害が、修正されました。  (Alex Kozhemyakin, Sergey Shinderuk) (14)</li>
<p>
CREATE TYPE がパースツリーの要素を誤って解放していて、続くイベントトリガや CREATE TYPE コマンドがプランキャッシュに格納されて後に再使用される場合に、（クラッシュや予期せぬエラー等の）問題が起きる可能性がありました。
</p>
<li>複合型のドメインの配列の要素の更新について修正されました。  (Tom Lane) (14)(13)(12)(11)</li>
<p>
「UPDATE tab SET fld[1].subfld = val」のようなコマンドが、配列要素が複合型ではなく複合型のドメインである場合に失敗して、クラッシュや誤った更新結果を引き起こしました。
</p>
<pre>
（障害発生例／クラッシュが生じる）
db=# CREATE TYPE typ11 AS (subfld1 int, subfld2 int);
db=# CREATE DOMAIN dom11 AS typ11 NOT NULL;
db=# CREATE TABLE tbl11 (id int, fld dom11[]);
db=# INSERT INTO tbl11 VALUES (1, '{"(1,2)","(3,4)"}'::dom11[]);
db=# UPDATE tbl11 SET fld[1].subfld1 = 1;
server closed the connection unexpectedly
</pre>
<li>FETCH FIRST WITH TIES と FOR UPDATE SKIP LOCKED の組み合わせが禁止されました。  (David Christensen) (14)(13)</li>
<p>
FETCH FIRST WITH TIES は同順位でない行を見つけるまで停止しないため、返すべき行数に加えてもう 1行を取り出す必要があります。また、現在の実装では FOR UPDATE が使われた場合は返さない行についてもロックを取得します。その結果、SKIP LOCKED オプションが指定された場合に望ましくない振る舞いが生じました。当面の対処として、この組み合わせが禁止されました。
</p>
<p>
以下の動作例では id=3 の行が応答に登場しない結果となります。
</p>
<pre>
（望ましくない動作の例）
db=# CREATE TABLE t12 (id int, n int);
db=# INSERT INTO t12 VALUES (1,10),(2,10),(3,30),(4,40);
db=# BEGIN;
     SELECT * FROM t12 ORDER BY n FETCH FIRST ROW WITH TIES FOR UPDATE SKIP LOCKED;
 id | n
----+----
  1 | 10
  2 | 10
(2 rows)

（別セッションで以下を実行）
db=# SELECT * FROM t12 ORDER BY n FETCH FIRST ROW WITH TIES FOR UPDATE SKIP LOCKED;
 id | n
----+----
  4 | 40
(1 row)
</pre>
<li>ALTER INDEX .. ALTER COLUMN .. SET (..) でのオプション指定が禁止されました。  (Nathan Bossart, Michael Paquier) (14)(13)</li>
<p>
これまでパーサが受け付けていて、ALTER TABLE の場合と同じパラメータが指定可能でしたが、これは文書記載がなく、実際には機能しない一方、オプションを付与するとその列やテーブルの削除ができなくなりました。
</p>
<li>numeric型の power() 関数で稀な場合の精度損失が修正されました。  (Dean Rasheed) (14)(13)(12)(11)(10)(9.6)</li>
<p>
第一引数が 1 に非常に近い場合に不正確な結果が生じる可能性がありました。「^」演算子の左辺が 1 に近い場合についても同様に該当します。
</p>
<li>Memoizeプランでハッシュ等価演算子の誤選択が回避されました。  (David Rowley) (14)</li>
<p>
本障害により、クラッシュまたは誤った問い合わせ結果が生じるおそれがありました。
</p>
<li>副問い合わせの式を関数にプルアップする際のプランナエラーが修正されました。  (Tom Lane) (14)(13)</li>
<p>
FROM にある関数が FROM句の副問い合わせの出力をラテラル参照する場合で、副問い合わせを外側の問い合わせに平坦化が可能である場合、関数の式へコピーされた式は完全には処理されませんでした。その結果、プランの実行時にクラッシュを引き起こすおそれがありました。
</p>
<pre>
（本障害でクラッシュを起こす問い合わせの例）
db=# SELECT * FROM (
       SELECT jsonb_path_query_array(mod-&gt;'lecs', '$[*]') AS lec
         FROM unnest(array['{"lecs": [{"id": "1"}]}'::jsonb]) AS um(mod)) AS ss,
           jsonb_to_recordset(ss.lec) AS j (id text);
</pre>
<li>列の範囲の見積に不完全な MCV のみのプランナ統計情報を信用して使わないように修正されました。  (Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
ANALYZE で稀に MCV（most-common-values、最頻値）リストが作られてヒストグラムは作られないことがあります。このような場合、MCVリストのみでデータ全体をあらわせそうな場合に限って、MCVリストのみで列値の範囲を見積をするようになりました。
</p>
<li>サブトランザクション内でのポータルのスナップショット復旧について修正されました。  (Bertrand Drouvot) (14)(13)(12)(11)</li>
<p>
プロシージャがあるトランザクションをコミットやロールバックして、その次の明示的な動作が新たなサブトランザクション内である場合にスナップショット管理を誤っていました。その結果、不正なポインタが生じて、クラッシュを引き起こす可能性がありました。
</p>
<p>
典型的には PL/pgSQL で以下のような処理を行う場合に該当します。
</p>
<pre>
  FOR i IN 1..100 LOOP -- 何らかのループ
    BEGIN 
      {問い合わせを実行}
    EXCEPTION
      {条件に応じて COMMIT や ROLLBACK を実行してループを継続}
    END;
  END LOOP;
</pre>
<li>スナップショットのエクスポート後にトランザクションが失敗した場合に、正しくクリーンアップするようになりました。  (Dilip Kumar) (14)(13)(12)(11)(10)(9.6)</li>
<p>
この誤りは、同じセッションがスナップショットを再びエクスポートしようとした場合に限って問題を引き起こします。ありそうな該当シナリオは、レプリケーションスロットを作成して、それが何らかエラーで失敗して、その後に続けて他のレプリケーションスロットを作成しようとすることです。
</p>
<p>
予期せぬ「ERROR:  clearing exported snapshot in wrong transaction state」が発生する動作が報告されました。
</p>
<li>スタンバイサーバでオーバーフローしたサブトランザクション追跡の周回を防止しました。  (Kyotaro Horiguchi, Alexander Korotkov) (14)(13)(12)(11)(10)(9.6)</li>
<p>
この誤りにより、スタンバイサーバで顕著な性能低下をもたらすおそれがあります。該当した場合、SubtransSLRU についての過大な処理量がはっきり現れました。
</p>
<li>スタンバイサーバの昇格中に、（二相コミット機能の）準備されたトランザクションが適切に考慮されるようになりました。  (Michael Paquier, Andres Freund) (14)(13)(12)(11)(10)(9.6)</li>
<p>
同時実行中のセッションが取得したスナップショットで、準備されたトランザクションが省略される可能性がある限られた時間帯がありました。その後、そのセッションがスナップショットを使用してデータを更新すると、誤った結果やデータの破損が発生する可能性がありました。
</p>
<li>EXPLAIN が WorkTableScanノードにアタッチされたフィルタ条件を表示しようとした時の予期せぬエラーが修正されました。  (Tom Lane) (14)</li>
<p>
CTE (WITH句）を伴う問い合わせの EXPLAIN で、以下のエラーが出る動作が報告されました。
</p>
<pre>
ERROR:  could not find RecursiveUnion for WorkTableScan with wtParam 0
</pre>
<li>ALTER INDEX コマンドを使ってテーブルの名前を変更する際に、正しいロックレベルを使用するように修正されました。  (Nathan Bossart, &Aacute;lvaro Herrera) (14)(13)(12)</li>
<p>
歴史的な理由から、ALTER INDEX ... RENAME はあらゆる種類のリレーションに適用できます。インデックス名を変更するのに必要なロックレベルは、テーブル等その他のリレーション名を変更する場合より低いのですが、ALTER INDEX を使った場合には対象がインデックス以外であっても、誤って低いロックレベルが使用されていました。
</p>
<pre>
（誤動作例）
db=# CREATE TABLE t24a (id int);  CREATE TABLE t24b (id int);
db=# BEGIN;
db=*# ALTER TABLE t24a RENAME TO t24x;
db=*# ALTER INDEX t24b RENAME TO t24y;
db=*# ^Z

（別セッションでロックを確認）
db=# SELECT relation::regclass, locktype, mode FROM pg_locks WHERE relation IS NOT NULL;
 relation | locktype |           mode
----------+----------+--------------------------
 pg_locks | relation | AccessShareLock
 t24b     | relation | ShareUpdateExclusiveLock
 t24a     | relation | AccessExclusiveLock
(3 rows)
</pre>
<li>オブジェクトとそのオブジェクトを所有するロールが並行して同時に削除された場合に null-pointer-dereference によるクラッシュが発生することがあり、回避されました。  (&Aacute;lvaro Herrera) (14)(13)(12)(11)(10)(9.6)</li>
<li>lo_export() または関連する関数が失敗した場合のスナップショット参照のリーク警告が防止されました。  (Heikki Linnakangas) (14)(13)(12)(11)(10)(9.6)</li>
<p>
以前は下記のようなメッセージが出力されましたが、実際のリークはほとんど害のないものでした。
</p>
<pre>
WARNING:  Snapshot reference leak: Snapshot 0x5634afd61cb8 still referenced
</pre>
<li>CoerceToDomain式ノードの非効率なコード生成が修正されました。  (Ranier Vilela) (14)(13)</li>
<p>
本修正は DOMEIN型の列に値を投入したり、DOMAIN型に型キャストする場合のエグゼキュータ処理を効率化します。
</p>
<li>いくつかのリスト操作で O(N^2) の動作が回避されるようになりました。  (Nathan Bossart, Tom Lane) (14)(13)</li>
<p>
これにより、 (1)プライマリ上で多数の排他ロックを保持しているトランザクションをスタンバイでリプレイする場合、 (2)チェックポイント後に削除(unlink)されることになっているファイルが多数ある場合、 (3)ハッシュ集約に多くのバッチ(ディスク書き出し)が含まれる場合、 (4)pg_trgm が複雑な正規表現からインデックス可能な条件を抽出する場合、を含むいくつかのシナリオで処理速度低下が修正されました。
</p>
<p>
これらのうち、実際にユーザから報告されたのは (1) だけですが、それ以外も非効率なリスト削除により該当すると見られます。
</p>
<li>B-tree のポスティングリスト分割に関する防御的な検査が追加されました。  (Peter Geoghegan) (14)(13)</li>
<p>
この変更により、テーブルの TID の重複を含むインデックスの破損を検出できるようになります。
</p>
<li>BRIN の float8 または float4 の minmax_multi_ops インデックスにNaN を挿入する時のアサート失敗が回避されました。  (Tomas Vondra) (14)</li>
<p>
アサートを無効にした実運用むけビルドにおいては、このような場合、いくらか非効率的ですが間違ってはいないインデックスになります。
</p>
<li>自動VACUUM のランチャープロセスが pg_log_backend_memory_contexts() の要求に対してより迅速に応答できるようになりました。  (Koyu Tanigawa) (14)</li>
<p>
これまで数秒を要することがありました。
</p>
<li>認証処理で使われる HMACハッシュ計算におけるメモリリークが修正されました。  (Sergey Shinderuk) (14)</li>
<li>shared_memory_type が sysv の場合、huge_pages を on に設定することが禁止されました。  (Thomas Munro) (14)(13)(12)</li>
<p>
以前はこの設定は受け入れられていましたが、実装がないため何もしませんでした。
</p>
<li>PL/pgSQL の RETURN QUERY文における、クエリ型のチェックが修正されました。  (Tom Lane) (14)</li>
<p>
RETURN QUERY は、UPDATE RETURNING のようにタプルを返すことができる任意のクエリを受け入れるべきです。 v14 では誤って SELECT 以外のものを禁止していました。さらに、可変の RETURN QUERY EXECUTE では、クエリ型チェックがまったく適用されていませんでした。
</p>
<li>大域的でないデフォルト権限を正しくダンプするように、pg_dump が修正されました。  (Neil Chen, Masahiko Sawada) (14)(13)(12)(11)(10)(9.6)</li>
<p>
大域的な（限定なしの）ALTER DEFAULT PRIVILEGES コマンドが関数の EXECUTE などデフォルトである権限を取り消した後、限定付きの ALTER DEFAULT PRIVILEGES コマンドが選択されたロールやスキーマに対してその権限を再び付与した場合、pg_dump は制限付きの権限付与を正しくダンプできませんでした。
</p>
<li>ダンプされるパーティションテーブルに対して、pg_dump が共有ロックを取得するようになりました。  (Tom Lane) (14)(13)(12)(11)(10)</li>
<p>
pg_dump が子のパーティションのいずれかをロックすれば、パーティションテーブル自体に対する重要な DDL を防ぐのに十分であるためこの見落としはたいていの場合は無害なものでしたが、関連するロックが保持されないため、子のないパーティションテーブルをダンプするときに問題が発生する可能性がありました。
</p>
<li>PostgreSQL 8.3 より前のサーバからトリガ定義をダンプしようとした際のpg_dump のクラッシュが修正されました。  (Tom Lane) (14)(13)(12)(11)</li>
<li>pg_restore の無効なラージオブジェクトの TOCファイルに関するエラーメッセージ中の誤ったファイル名が修正されました。  (Daniel Gustafsson) (14)(13)(12)(11)(10)(9.6)</li>
<p>
以前は以下のようなファイル名が空のエラーメッセージが表示されていました。
</p>
<pre>
pg_restore: error: invalid line in large object TOC file "": ..
</pre>
<li>ソケットレベルの障害発生後、pgbench がゼロ以外のステータスで終了するようになりました。  (Yugo Nagata, Fabien Coelho) (14)(13)(12)</li>
<p>
望ましい動作は実行を完了した後、ステータス 2 で終了することで、そのように修正されました。また、ソケットレベル障害のエラー報告が修正されました。
</p>
<li>pg_amcheck が一時的なリレーションや、無効または準備ができていないインデックスをチェックしないようにしました。  (Mark Dilger) (14)</li>
<p>
これにより、ほぼ確実に矛盾しているように見える、役に立たないリレーションのチェックが回避されます。
</p>
<li>contrib/amcheck がスタンバイサーバで実行される際に、UNLOGGEDテーブルをスキップするようになりました。  (Mark Dilger) (14)</li>
<p>
このようなテーブルは空になりますし、UNLOGGEDインデックスもすでにスキップするようになっているため、このようにするのが適切です。
</p>
<li>pg_stat_statements が最大 1GB 単位でクエリテキストファイルを読み込むようになりました。  (Tom Lane) (14)(13)(12)(11)(10)(9.6)</li>
<p>
2GB 以上のファイルを一度に読み込もうとするとすると失敗する可能性があるため、複数回に分けて読み込むようになりました。
</p>
<li>postgres_fdw がデータ変換エラーを報告しようとする際に発生しうる NULLポインタのクラッシュが修正されました。  (Tom Lane) (14)(13)(12)(11)(10)(9.6)</li>
<li>内部実装の関数 GetSharedSecurityLabel() が、クリティカルなリレーションキャッシュエントリがまだ構築されていない新たに開始したセッションでも使用できるようになりました。  (Jeff Davis) (14)(13)(12)(11)(10)(9.6)</li>
<p>
（サードパーティモジュール以外で）影響があるのは contrib/sepgsql のみです。
</p>
<li>TAPテストを実行する際、モジュール自体のディレクトリを PATH に含めるようになりました。  (Andrew Dunstan) (14)</li>
<p>
これによりインストールされていないプログラムを検出できるようになりました。
</p>
<li>Windows のタイムゾーン名を IANAタイムゾーンに割り当てるのにCLDRプロジェクトのデータを利用するようになりました。  (Tom Lane) (14)(13)(12)(11)(10)(9.6)</li>
<p>
initdb は新たなクラスタのタイムゾーンパラメータに、システムのタイムゾーンに対応した IANAタイムゾーンを設定しようとします。これまで Windows で利用していたマッピングテーブルは何年も前に生成され、更新も散発的にしか行われないため、エラーが含まれていたり、最近追加されたゾーンが存在していなかったりと問題がありました。既存インストレーションには影響はなく、新しく初期化されたデータベースクラスタにのみ影響します。
</p>
<li>タイムゾーンデータファイルが tzdata release 2021e に更新されました。   (14)(13)(12)(11)(10)(9.6)</li>
<p>
フィジー、ヨルダン、パレスチナ、サモアで夏時間法が変更され、バルバドス、クック諸島、ガイアナ、ニウエ、ポルトガル、トンガの歴史的修正が行われています。
</p>
<p>
また、Pacific/Enderbury は Pacific/Kanton に名称変更されました。また、Africa/Accra、America/Atikokan、America/Blanc-Sablon、America/Creston、America/Curacao、America/Nassau、America/Port_of_Spain、Antarctica/DumontDUrville、Antarctica/Syowa の各ゾーンは、近くのより人口の多いゾーンに統合されました。これらの名前はエイリアスとして残されています。
</p>
<li>float4 と float8 のハッシュ関数が NaN に対して均一の結果を生成するように修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
PostgreSQL は浮動小数点型は全ての NaN が等しいと見なすため、ハッシュ関数が IEEE 754 規格に従って NaN である全てのパターンに対して同じハッシュコードを生成することが重要です。今までそれができていなかったため、ハッシュインデックスやハッシュを伴った実行計画で、正規化されていない NaN値（'-NaN'::float8 など）に対して、誤った問い合わせ結果がもたらされるおそれがありました。
</p>
<p>
このような NaN値が含まれる可能性がある場合には、浮動小数点型の列に対するハッシュインデックスを再作成することが推奨されます。
</p>
<li>wal_level が minimal に設定されている時 CREATE TABLESPACE のクラッシュリカバリでのデータ損失が防止されました。  (Noah Misch) (13)(12)(11)(10)(9.6)</li>
<p>
CREATE TABLESPACE から次のチェックポイントまでの間にサーバがクラッシュした場合、クラッシュリカバリが実施されても完全にデータが復元されない可能性がありました。wal_level が minimal 以外の場合には該当しません。
</p>
<li>パーティションテーブルがパブリケーションへ追加もしくは削除される際に、全てのパーティションのリレーションキャッシュが無効化されるようになりました。  (Hou Zhijie, Vignesh C) (13)</li>
<p>
無効化が行われていなかったことによって、既存セッションでロジカルレプリケーションが誤動作を起こす可能性がありました。
</p>
<li>FOR ALL TABLES と指定されたパブリケーションを作成もしくは削除する際に、リレーションキャッシュが無効化されるようになりました。  (Hou Zhijie, Vignesh C) (13)(12)(11)(10)</li>
<p>
無効化が行われていなかったことによって、既存セッションでロジカルレプリケーションが誤動作を起こす可能性がありました。
</p>
<li>修飾子が指定されていない同じ型へのキャストを破棄しないようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
例えば、numeric(18,3) と定義されている f1列の場合、パーサは f1::numeric の様なキャストを実行時には影響がないという理由で破棄していました。しかし、外側にあらわれる型は、numeric(18,3) ではなく numeric であるべきです。これは再帰的な UNION など、より大きな構造の型を正しく解決するために重要です。
</p>
<pre>
（ビュー定義で型キャストが無視される誤動作例）
db=# CREATE TABLE t51 (f1 numeric(18, 3));
db=# CREATE VIEW v51 AS SELECT f1::numeric AS n1 FROM t51;
db=# \d+ v51
                                View "public.v51"
 Column |     Type      | Collation | Nullable | Default | Storage | Description
--------+---------------+-----------+----------+---------+---------+-------------
 n1     | numeric(18,3) |           |          |         | main    |
View definition:
 SELECT t51.f1 AS n1
   FROM t51;
</pre>
<p>
旧動作が誤っていると考えられますが、非互換性を含む修正となります。
</p>
<li>現在のデータベースエンコーディングがサポートしていない ICU照合順序は作成できないようになりました。  (Tom Lane) (13)(12)(11)(10)</li>
<p>
これまでは作成はできていましたが、実際には照合順序は使用できず、削除することもできない状態となっていました。
</p>
<li>{0} 内の括弧をキャプチャする際の正規表現エラーを回避するようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
(.){0}...\1 の様な正規表現において、間違った後方参照番号が引き出され、下記のようなエラーやクラッシュ、アサート失敗が生じる可能性がありました。エラーを発生させずに後方参照がマッチしないと判断するように修正されました。
</p>
<pre>
ERROR:  invalid regular expression: invalid backreference number
ERROR:  invalid regular expression: quantifier operand invalid
</pre>
<li>正規表現の後方参照が、本来マッチすべきでない時にマッチしてしまうのを防ぐようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
正規表現エンジンは部分的なマッチを拒否した後のキャプチャした括弧のマッチデータ排除に関して不注意でした。これにより、定義された参照先がないために失敗するはずの場所で、後方参照が一致する可能性がありました。
</p>
<pre>
（誤動作例）
db=# select 'abcdef' ~ '^(.)\1|\1.';
 ?column?
----------
 t
(1 row)

（先頭で同文字が連続していないので部分マッチせず、全体としても f になるのが正しい）
</pre>
<li>反復ノード内の後方参照による正規表現の性能上のバグが修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
後方参照のロジックが正しくなく、必要以上に時間を要する箇所がありました。幸いなことに、この問題はほとんどの場合に他の最適化によって顕在化することがありませんでした。
</p>
<li>タイムゾーン付きの時刻を AT TIME ZONE に適用した際に、間違った結果を返す問題が修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
動的な TZ 略語でゾーンが指定されている場合に誤った問い合わせ結果が生じる可能性があります。
</p>
<pre>
（報告された誤動作例、CLT は -03 または夏時間で -04）
db=# SELECT '12:34 -02'::timetz AT TIME ZONE 'CLT';
     timezone
-------------------
 09:51:14-04:42:46
(1 row)
</pre>
<li>PlaceHolderVars の継承子テーブルへの転換の誤りが修正されました。  (Tom Lane) (13)(12)</li>
<p>
PlaceHolderVars は内部実装上のデータ構造です。この誤りにより、パーティションテーブルや継承テーブルを外部結合の外側（無ければ NULL になる側）に持つ問い合わせで、アサート失敗や実行計画の異常が生じる可能性がありました。実際の問題発生は稀であると考えられます。
</p>
<li>バックグラウンドワーカが LISTEN を実行できないようになりました。  (Tom Lane) (13)</li>
<p>
実行するための基盤が無いため、実行されてしまうと単に NOTIFY によるキューのクリーンアップを妨げる結果となります。
</p>
<li>他のバックエンドへの NOTIFY シグナル送信をトランザクションコミットの時に行うようになりました。  (Artur Zakirov, Tom Lane) (13)</li>
<p>
この変更によってプロシージャ内の COMMIT 直後に通知を送信できるようになりました。また、ロジカルレプリケーションワーカが通知を送信できるようになりました。これまではアイドル状態にならないと送信されず、これらのことができませんでした。
</p>
<li>WITH HOLD オプションによって前トランザクションから保留されている NO SCROLL指定のカーソルの巻き戻しを、拒否するようになりました。  (Tom Lane) (13)(12)(11)</li>
<p>
長い間 NO SCROLL カーソルを逆方向にフェッチすることは禁止されていましたが、歴史的背景により、クエリを完全に巻き戻してから再度フェッチすることは禁止されていませんでした。この例外は、特に巻き戻しに必要なデータを全て保持していない可能性のある保留されたカーソルの場合には不整合を引き起こしました（クラッシュが報告されています）。最悪のケースを防ぐためにスクロールできない保留されたカーソルの巻き戻しを禁止するようになりました。
</p>
<p>
非互換性を含む修正となります。
</p>
<li>WITH HOLD カーソルをトランザクション終了時点で保存するときに、既にカーソルが読み込み完了していた場合に、失敗しないように修正されました。  (Tom Lane) (13)(12)(11)</li>
<p>
クラッシュが生じる動作が報告されました。
</p>
<li>許可された最大長に増大したリレーションの検出が修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
これまでも 2^32 - 1 ブロックという最大長を超えてテーブルやインデックスを拡張する試みはストレージ処理の段階で拒絶されました。しかし、不整合な内部状態を防ぐにはより早い検知が必要で、バッファマネージャにおいてエラーを出すようになりました。
</p>
<p>
アサート失敗が報告されました。
</p>
<li>DO INSTEADルールを展開するときに、データ変更を伴う CTE（WITH句）の存在を確認するようになりました。  (Greg Nancarrow, Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
これが行われなったため、安全でないパラレルプラン選択などの問題が生じるおそれがありました。ルールが適用される問い合わせの実行時に「ERROR:  cannot assign XIDs during a parallel operation」が生じる動作が報告されました。
</p>
<p>
これからは、データ変更を伴う CTE を持つ問い合わせには DO INSTEDルールの適用はできず、そのことを示すエラーになります。
</p>
<pre>
（修正後の振る舞い例）
db=# CREATE TABLE t63a (i int);
db=# CREATE TABLE t63b (i int);
db=# CREATE RULE r63a AS ON INSERT TO t63a DO INSTEAD
       INSERT INTO t63b SELECT NEW.i;
db=# WITH cte1 AS (DELETE FROM t63a RETURNING *)
       INSERT INTO t63a SELECT * FROM cte1;
ERROR:  INSERT...SELECT rule actions are not supported for queries having data-modifying statements in WITH
</pre>
<li>拡張統計情報オブジェクトへの権限のない操作に対する誤ったパーミッションエラー報告が修正されました。  (Tomas Vondra) (13)(12)(11)(10)</li>
<p>
以前は意図したメッセージではなく以下のようなキャッシュルックアップエラーが出力されていました。
</p>
<pre>
ERROR:  cache lookup failed for type 27447
</pre>
<li>並列ワーカの誤ったスナップショット処理が修正されました。  (Greg Nancarrow) (13)(12)(11)(10)</li>
<p>
以前はトランザクション分離レベルが REPEATABLE READ よりも低かった場合、パラレルクエリで誤動作をすることがありました。
</p>
<p>
アサート失敗が報告されました。
</p>
<li>一時テーブルの TOASTテーブル変更を適切に無視するように、ロジカルデコーディングが修正されました  (Bertrand Drouvot) (13)(12)(11)</li>
<p>
ロジカルデコーディングは、ALTER TABLE によるヒープ書き換えなどで作られる一時テーブルの変更を通常は無視しますが、関連する TOASTテーブルについてそのようになっていませんでした。
</p>
<p>
これにより、パブリッシュされたテーブルを ALTER TABLE すると、その後で予期せぬエラーが生じることがありました。
</p>
<li>TOASTデータを正しく処理するために論理デコーディングのメモリ使用量計算が修正されました。  (Bertrand Drouvot) (13)</li>
<p>
アサート失敗やクラッシュを引き起こす可能性がありました。
</p>
<li>walreceiverプロセスが、終了する前に全ての必要なアーカイブ通知ファイルを 作成するのを保証するようになりました．  (Fujii Masao) (13)(12)(11)(10)(9.6)</li>
<p>
通知ファイルとは archive_status ディレクトリ下に作られる.ready や .done のサフィックスを持ったファイルです。
</p>
<p>
これまで walreceiver はちょうど WALセグメント境界で終了した場合、最後に受信したセグメントの通知ファイル作成に失敗していました。その結果、スタンバイでセグメントをアーカイブするのが遅れていました．
</p>
<li>バックアップマニフェスト生成における WAL範囲の計算が、タイムライン変更が伴う場合について修正されました。  (Kyotaro Horiguchi) (13)</li>
<p>
昇格直後のベースバックアップがpg_veryfybackup で失敗するケースが報告されていました。
</p>
<li>SELECT .. FOR UPDATE を使うルールで疑似リレーション OLD、NEW にロック処理を行わないように修正されました。  (Masahiko Sawada, Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
OLD や NEW を指定して SELECT .. FOR UPDATE を行うルールの実行で予期せぬエラーやクラッシュが生じていました。
</p>
<li>集約の FILTER句のパーサ処理が修正されました．  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
FILTER式が単純な boolean型の列の場合に、誤った意味解釈が行われて仕様外の動作（即ち、誤った問い合わせ結果）が生じる可能性がありました。また、FILTER式自体が boolean型を返す集約である場合にはエラーを出すべきですが、そのようになっておらず、実行時にクラッシュを起こすことがありました。
</p>
<pre>
（修正前バージョンでの障害発生例）
db=# CREATE TABLE t71 (i int, b boolean);
db=# INSERT INTO t71 VALUES (1, 't'),(2, 't'), (3, 'f');
db=# SELECT (SELECT max(0) FILTER (WHERE b IS TRUE)) FROM t71;
 max
-----
   0
(1 row)

db=# SELECT (SELECT max(0) FILTER (WHERE b)) FROM t71; -- 誤動作する
 max
-----
   0
   0

(3 rows)

db=# SELECT (SELECT array_agg(z.b) FILTER (WHERE bool_or(z.i &gt; 0))
       FROM t71) FROM t71 z; -- クラッシュする
server closed the connection unexpectedly
</pre>
<li>ALTER TYPE/DOMAIN/OPERATOR .. SET が拡張のメンバシップを変更しないように修正されました。  (Tom Lane) (13)</li>
<p>
拡張のスクリプトで実行された ALTER .. SET は、ターゲットとなるオブジェクトが拡張のメンバになっていなかった場合に、それを拡張のメンバにしてしまうことがありました。
</p>
<p>
拡張のスクリプトがその拡張に属さないオブジェクトにアクセスする理由はほとんど無いため、これ自体は大きな問題はありません。しかし、ALTER TYPE .. SET はその型に依存するドメインにも再帰的に効果を及ぼすため、それらも拡張のメンバになり、拡張のアップグレードスクリプトで望まない副作用を引き起こしました。
</p>
<li>LLVM 内でのエラー後に LLVM状態のクリーンアップを試みないように修正されました。  (Andres Freund, Justin Pryzby) (13)(12)(11)</li>
<p>
これにより、致命的な LLVM のエラーが起きた後にバックエンドが終了する際に起こりうるクラッシュを防止します．
</p>
<li>SP-GiSTインデックスのスキャンが統計ビューでカウントされることを保証するようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
SP-GiST のコードでは、タプルのカウンタは正しく進む一方で、インデックススキャン回数の加算が欠落していました。
</p>
<li>リカバリ中に recovery_min_apply_delay が変更された場合には、関連する待機間隔を再計算するようになりました。  (Soumyadeep Chakraborty, Ashwin Agrawal) (13)(12)(11)(10)(9.6)</li>
<p>
これにより設定変更が直ぐに効くようになります。
</p>
<li>simplehash.h のハッシュテーブルが 2^32 要素を超えた場合に無限ループになる誤りを修正しました．  (Yura Sokolov) (13)(12)(11)(10)</li>
<p>
これは数百GB の work_mem が設定されていない限り顕在化しないため、実際には発生していなかったものと見られます。
</p>
<li>ANALYZE実行における拡張統計の計算中のメモリ使用量が削除されました。  (Justin Pryzby, Tomas Vondra) (13)(12)(11)(10)</li>
<li>AIX において libpq の関数が欠落しており、修正されました。  (Tony Reix) (13)</li>
<p>
コード再編成の誤りで以下のドキュメント記載された関数がエクスポートされていませんでした。
</p>
<pre>
  pg_encoding_to_char()
  pg_utf_mblen()
  pg_char_to_encoding()
  pg_valid_server_encoding()
  pg_valid_server_encoding_id()
</pre>
<li>接続を試みている途中で malloc() に失敗してもエラー後に正しく回復できるように、ecpg が修正されました。  (Michael Paquier) (13)(12)(11)(10)(9.6)</li>
<p>
ecpg を使うクライアントで pthread の mutex が残ったままになっていて、リソースリークやデッドロックを起こす恐れがありました。
</p>
<li>PL/pgSQL の CALL文の引数で呼ばれる STABLE の関数を誤って評価していたものが修正されました。  (Tom Lane) (13)(12)(11)</li>
<p>
静的関数は古いスナップショットを使って呼ばれており、そのため、セッションのトップレベルコマンドの開始後に行われたデータベースの変更が見えていませんでした。
</p>
<li>PL/pgSQL で最も外側のブロックからの EXIT が可能になりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
明示的な RETURN を必要としないルーチンであれば、この使い方は有効でしたが、これまでは許されていませんでした。
</p>
<li>pg_ctl のハードコーディングされた生成されたコマンド長の上限が取り除かれました。  (Phil Krylov) (13)(12)(11)(10)(9.6)</li>
<p>
これにより、例えば postmaster に渡すコマンドラインオプションを多数指定する場合の制限がなくなります。なお、pg_ctl が扱うパス名についての制限は未だあり、殆どの場合 MAXPGPATH（デフォルト1024）バイトで制限されます。
</p>
<li>RLS（行単位セキュリティ）ポリシーむけにテーブルごとの問い合わせ作成を回避することで、また、反復的な format_type() の呼び出しを回避することで、pg_dump の性能が改善されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
これらの変更はローカルサーバからのダンプでは重要ではありませんが、リモートサーバからのダンプではネットワーク往復が少なくなることで顕著なメリットがあります。
</p>
<li>contrib/btree_gin の（char(n)ではなく）"char" 列に対するインデックスの誤りが修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
&lt; や &lt;= 演算子を使ったインデックススキャンが実行されたときに、誤った問い合わせ結果（返るべきエントリが返らない）が生じました。インデックス破損ではなく、検索ロジックの誤りに起因します。
</p>
<li>RISC-V アーキテクチャむけのスピンロックのサポートが追加されました。  (Marek Szuba) (13)(12)(11)(10)(9.6)</li>
<li>OpenSSL 3.0.0 がサポートされました。  (Peter Eisentraut, Daniel Gustafsson, Michael Paquier) (13)(12)(11)(10)</li>
<li>作成した OpenSSL の BIO（I/O 抽象化）オブジェクトに正しい型識別子を設定するようになりました。  (Itamar Gafni) (13)(12)(11)(10)(9.6)</li>
<p>
この誤りは、おそらく OpenSSL のインストールを監査する類のタスクを行うコードでのみ問題となります。しかし、形としては OpenSSL API に違反しているため修正されました。
</p>
<li>libpq の静的リンクのための pkg-configファイルが修正されました。  (Peter Eisentraut) (13)(12)</li>
<p>
PostgreSQL 12 以降から、長らく正しい pkg-configファイルが提供されていませんでした。
</p>
<li>pg_regexec() が範囲外の search_start パラメータに対してより頑健になりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
pg_regexec() は PostgreSQL の正規表現機能の内部実装関数です。
</p>
<p>
search_start が文字列の終わりを過ぎている場合に、これまではクラッシュの可能性がありましたが、REG_NOMATCH を返すようになります。この場合はおそらく PostgreSQLコアコードでは生じませんが、拡張モジュールから使われるかもしれません。
</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 12.8 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/12-8/</link>
		
		<dc:creator><![CDATA[データベース技術グループ]]></dc:creator>
		<pubDate>Wed, 01 Sep 2021 02:11:03 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 12]]></category>
		<category><![CDATA[PostgreSQL 12.7]]></category>
		<category><![CDATA[PostgreSQL 12.8]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=7237</guid>

					<description><![CDATA[このリリースは 12.7 からの修正リリース（2021年8月12日リリース）です。 12.X からのアップデートではダンプ、リストアは不要です。 しかしながら、12.6 よりも前のバージョンから移行する場合には 12.6 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 12.7 からの修正リリース（2021年8月12日リリース）です。<br />
12.X からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、12.6 よりも前のバージョンから移行する場合には <a href="/tech-blog/pgsql/12-6">12.6 のリリース情報</a>も確認してください。</p>
<p><span id="more-7237"></span></p>
<h3>PostgreSQL 12.7 から 12.8 への変更点</h3>
<p>13.4、12.8、11.13、10.18、9.6.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>射影ステップの繰り返し適用による誤った実行計画の作成が修正されました。  (Tom Lane) (13)(12)(11)</li>
<p>
2つの ProjectionPath（射影、ターゲットリストの処理を行うパス）が互いにスタックした場合、プランナが誤った実行計画を作成する可能性がありました。これを再現させる既知の手順は並列ソートのみですが、それ以外の発生パターンもあるかもしれません。本障害によりクラッシュまたは誤った問い合わせ結果が生じます。また、障害動作を狙って起こしてサーバのメモリ内容の漏洩を狙う攻撃も可能です。(CVE-2021-3677)
</p>
<p>
以下に再現例を示します。
</p>
<pre>
db=# CREATE TABLE t1 (c1 int, c2 int);
db=# INSERT INTO t1 VALUES (1, 2), (3, 4);
db=# SET parallel_setup_cost TO 0;
db=# SET parallel_tuple_cost TO 0;
db=# SET min_parallel_table_scan_size TO 0;
db=# SET max_parallel_workers_per_gather TO 4;

db=# SELECT generate_series(1, c1), array(SELECT generate_series(1, c1)) FROM t1 ORDER BY c2;
（修正前の誤った問い合わせ結果）
 generate_series |   array
-----------------+-----------
               1 | {1,2}
               2 | {1,2}
               1 | {1,2,3,4}
               2 | {1,2,3,4}
               3 | {1,2,3,4}
               4 | {1,2,3,4}
(6 rows)

（修正後の正しい応答）
 generate_series |  array
-----------------+---------
               1 | {1}
               1 | {1,2,3}
               2 | {1,2,3}
               3 | {1,2,3}
(4 rows)

（修正前の誤ったプラン、一部で c1列と c2列が取り違えられている）
db=# EXPLAIN (VERBOSE, COSTS off)
       SELECT generate_series(1, c1), array(SELECT generate_series(1, c1)) FROM t1 ORDER BY c2;
                      QUERY PLAN
-------------------------------------------------------
 ProjectSet
   Output: generate_series(1, t1.c2), (SubPlan 1), t1.c1
   -&gt;  Gather Merge
         Output: t1.c2, t1.c1
         Workers Planned: 3
         -&gt;  Sort
               Output: t1.c2, t1.c1
               Sort Key: t1.c2
               -&gt;  Parallel Seq Scan on public.t1
                     Output: t1.c2, t1.c1
   SubPlan 1
     -&gt;  ProjectSet
           Output: generate_series(1, t1.c2)
           -&gt;  Result
(14 rows)
</pre>
<li>SSL再ネゴシエーションがより完全に禁止されました。  (Michael Paquier) (13)(12)(11)(10)(9.6)</li>
<p>
SSL再ネゴシエーションはしばらく前から無効になっていましたが、クライアイントから再ネゴシエーションの要求があれば受けつけてしまい、悪意の狙って作られた要求によりクラッシュを起こすおそれがありました（OpenSSL の脆弱性 CVE-2021-3449 を参照）。OpenSSL 1.1.0h 以降のそれが可能なバージョンについて、再ネゴシエーションが完全に無効化されました。
</p>
<li>プロシージャ内の COMMIT または ROLLBACK の後にポータルレベルのスナップショットを復元するようになりました。  (Tom Lane) (13)(12)(11)</li>
<p>
この変更により、COMMIT または ROLLBACK の直後に TOAST化された値を取得しようとし、「no known snapshots」または「missing chunk number 0 for toast value」のエラーとなる場合が修正されます。
</p>
<p>
一部の拡張はポータル外で SQL を実行するかもしれません。このような拡張は事前に外部スナップショットの存在確認をする必要があります。以前はスナップショットを存在せずとも動作する場合もありましたが、今後は「cannot execute SQL without an outer snapshot or portal」のエラーとなります。
</p>
<pre>
（修正前の障害動作例）
db=# CREATE TABLE t3 (c text);
db=# INSERT INTO t3 VALUES ((SELECT string_agg(random()::text, ':') FROM generate_series(1, 1000)));
db=# INSERT INTO t3 VALUES ((SELECT string_agg(random()::text, ':') FROM generate_series(1, 1000)));
db=# DO $$
     DECLARE
       r record;
     BEGIN
       FOR r in SELECT c FROM t3 LOOP
         INSERT INTO t3 VALUES (r.c);
         COMMIT;
       END LOOP;
     END;
     $$;
ERROR:  no known snapshots
CONTEXT:  PL/pgSQL function inline_code_block line 5 at FOR over SELECT rows
</pre>
<li>不安定なクエリを読み取るカーソルの結果を保持する際の誤った動作が修正されました。  (Tom Lane) (13)(12)(11)</li>
<p>
以前は、クエリ結果全体を常に巻き戻して再読み取りしていましたが、行を再度取り出した際に以前とは異なる結果となる可能性があり、あとで大きな問題となっていました。NO SCROLL指定のカーソルは順序どおりにしか行を取り出せないため、読み取っていない部分のみを保持することで修正されました。SCROLL指定のカーソルは問題が残ったままですが、不安定なクエリで使用するのは安全でないことがすでにマニュアルに記述されています。そこで、その記述をより強調することで対処されました。
</p>
<p>
また、PL/pgSQL のクエリ結果による FORループで使用される暗黙カーソルに NO SCROLL指定を強制し、プロシージャ内のコミットでそのようなカーソルを保持する際の同様の問題が修正されました。
</p>
<pre>
（修正前の誤った問い合わせ結果の例）
db=# CREATE TABLE t4 (c1 int, c2 text);
db=# INSERT INTO t4 VALUES (1, 'foo'), (2, 'bar'), (3, 'baz');
db=# DO $$
     DECLARE
       c CURSOR FOR SELECT c1 FROM t4 ORDER BY c1 FOR UPDATE;
     BEGIN
       FOR r IN c LOOP
         UPDATE t4 SET c2 = c2 || ' ' || c2 WHERE c1 = r.c1;
         COMMIT;
       END LOOP;
     END;
     $$;

db=# SELECT * FROM t4;
 c1 |   c2
----+---------
  2 | bar
  1 | foo foo
  3 | baz baz
(3 rows)

(修正後の正しい結果)
 c1 |   c2
----+---------
  1 | foo foo
  2 | bar bar
  3 | baz baz
(3 rows)
</pre>
<li>SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE が拒否されるようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
グループ化セットなしの GROUP BY と同様に FOR UPDATE は拒否すべきですが、以前は、空のグループ化セットを正しく処理できず、エグゼキュータでクラッシュしていました。
</p>
<pre>
（修正前のクラッシュする問い合わせ例）
db=# SELECT NULL FROM t1 GROUP BY GROUPING SETS (()) FOR UPDATE;
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

(修正後)
db=# SELECT NULL FROM t1 GROUP BY GROUPING SETS (()) FOR UPDATE;
ERROR:  FOR UPDATE is not allowed with GROUP BY clause
</pre>
<li>WITH 内のクエリが NOTIFY のみに書き換えられる場合を拒否するようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
以前はクラッシュしていました。
</p>
<pre>
（修正前のクラッシュ発生例）
db=# CREATE RULE r AS ON INSERT TO t DO INSTEAD NOTIFY n;
db=# WITH w AS (INSERT INTO t VALUES (0)) VALUES (0);
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

（修正後は以下のエラーが出ます）
ERROR:  DO INSTEAD NOTIFY rules are not supported for data-modifying statements in WITH
</pre>
<li>結果が小数点以下 16383 桁を越える乗算をした場合にエラーとせずに結果を丸めるようになりました。  (Dean Rasheed) (13)(12)(11)(10)(9.6)</li>
<pre>
（修正前の動作）
db=# SELECT (0.1 - 2e-16383) * (0.1 - 3e-16383);
ERROR:  value overflows numeric format

（修正後の応答）
                                   ?column?
-------------------------------------------------------------------------------
 0.010000000000000000000000000000000(中略)000000000000000000000000000000000000
(1 row)
</pre>
<li>非常に大きな累乗をした際のごく稀なエラーと精度の低下が修正されました。  (Dean Rasheed) (13)(12)(11)(10)(9.6)</li>
<pre>
（修正前の誤動作例：エラーになる場合）
db=# SELECT 0.9999999999 ^ 70000000000000;
ERROR:  value overflows numeric format

（修正前の誤動作例：誤った問い合わせ結果が返る場合）
db=# SELECT 0.9999999999 ^ 23300000000000;
                                   ?column?
-------------------------------------------------------------------------------
 1.000000000000000000000000000000000...中略...000000000000000000000000000000000
(1 row)
</pre>
<li>to_char() に EEEE書式で 10 ^ (-10001) 未満の値を与えた場合のゼロ除算エラーが修正されました。  (Dean Rasheed) (13)(12)(11)(10)(9.6)</li>
<pre>
（障害動作例）
db=# SELECT to_char(1.2345e-16379::numeric, '9.999EEEE');
ERROR:  division by zero

（修正後の正しい応答）
     to_char
---------------
  1.235e-16379
(1 row)
</pre>
<li>pg_size_pretty(bigint) が numeric版と同様に正の値と同じ方法で負の値を丸めるように修正されました。  (Dean Rasheed, David Rowley) (13)(12)(11)(10)(9.6)</li>
<pre>
（正の値の応答）
db=# SELECT pg_size_pretty(10485247::bigint);
 pg_size_pretty
----------------
 10239 kB
(1 row)

（負の値に対する障害動作）
db=# SELECT pg_size_pretty(-10485247::bigint);
 pg_size_pretty
----------------
 -10 MB
(1 row)

（修正後の正しい応答）
 pg_size_pretty
----------------
 -10239 kB
(1 行)
</pre>
<li>pg_filenode_relation(0, 0) がエラーを出すのではなく NULL を返すようになりました。  (Justin Pryzby) (13)(12)(11)(10)(9.6)</li>
<p>
無効なテーブル空間の OID とファイルノード番号に対しては NULL を返すべきですが、以前は 0 を与えた場合に紛らわしいエラーとなっていました。
</p>
<pre>
（修正前のエラー応答）
db=# SELECT pg_filenode_relation(0, 0);
ERROR:  unexpected duplicate for tablespace 0, relfilenode 0
</pre>
<li>ALTER EXTENSION が拡張にオブジェクトを追加または削除する際に、ロックを取得するようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
以前は ALTER EXTENSION ADD/DROP と DROP EXTENSION が同時に実行できて、その結果、システムカタログを破損する可能性がありました。
</p>
<li>ALTER SUBSCRIPTION が空文字列のスロット名を拒絶するように修正されました。  (Japin Li) (13)(12)(11)(10)</li>
<pre>
（修正後のエラーが返る動作）
db=# ALTER SUBSCRIPTION s SET (slot_name = '');
ERROR:  replication slot name "" is too short
</pre>
<li>パーティションテーブルのトリガを新たなパーティションに複製するときに、トリガの有効/無効ステータスを確実にコピーするようになりました。  (&Aacute;lvaro Herrera) (13)(12)(11)</li>
<p>
これまではパーティションテーブルのトリガのステータスが、子テーブルに伝搬しませんでした。
</p>
<li>REFRESH MATERIALIZED VIEW CONCURRENTLY むけに生成された問い合わせで、別名の衝突を回避するようになりました。  (Tom Lane, Bharath Rupireddy) (13)(12)(11)(10)(9.6)</li>
<p>
mv と newdata など、特定の名前の列を含むマテリアライズドビューでコマンドが失敗していました。「ERROR: column reference "mv" is ambiguous」といったエラーが発生しました。
</p>
<li>PREPARE TRANSACTION がセッション寿命のロックとトランザクション寿命のロックの衝突を正しく検査するように修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
同じ勧告的ロックID値に対してセッション寿命とトランザクション寿命の両方のロックを持っている場合、トラザクションは準備された状態にできません。この制限は完全には検査されておらず、PREPARE TRANSACTION 実行時に PANIC を引き起こすおそれがありました。
</p>
<li>RLS（行単位セキュリティ）のポリシーに複数回リストされているロールをターゲットにした DROP OWNED BY の誤動作が修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
そのような場合、アサート失敗や「ERROR:  tuple already updated by self」が引き起こされました。
</p>
<li>DROP OWNED BY 実行中に RLS ポリシーからロールを削除する際の不要なエラーチェックが削除されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
特に、DROP OWNED BY を使うのにスーパーユーザであることを必須とする場合について、修正されています。
</p>
<li>CREATE COLLATION にて古い形式の Windowsロケール名を許容するようになりました。  (Thomas Munro) (13)</li>
<p>
ある時点から、古い形式のロケールに対して OS がバージョン情報を提供できないためにエラーにしていましたが、そのようなロケールを再度許容するようになりました。
</p>
<pre>
（13.3 バージョンでエラーになる例）
db=# CREATE COLLATION public.ja_jp (LOCALE = 'Japanese_Japan.932');
ERROR:  could not get collation version for locale "Japanese_Japan.932":
error code 87
</pre>
<li>行全体の変数を GENERATED句で利用できなくなりました。  (Tom Lane) (13)(12)</li>
<p>
GENERATED句で行全体の変数を利用することは、生成列がそれ自体もしくは他の生成列を参照できないというルールに違反しており、そのようなケースの動作が明白に定義されていませんでした。実際の動作としては、しばしばクラッシュを引き起こしました。
</p>
<pre>
（GENERATED句に行全体の変数を使用する例）
db=# CREATE TABLE t20 
       (a int PRIMARY KEY, b int GENERATED ALWAYS AS (num_nulls(t20)) STORED);
ERROR:  cannot use whole-row variable in column generation expression
</pre>
<li>GENERATED の式における tableoid の使用について修正されました。  (Tom Lane) (13)(12)</li>
<p>
システム列 tableoid に対して 0 や誤った値が取得される場合がありました。ALTER TABLE で後から生成列を加えた場合や、生成列を持つ外部テーブルにINSERT や UPDATE を行う時に誤動作が発生します。
</p>
<li>外部テーブルに対して高速デフォルトをセットしないようになりました。  (Andrew Dunstan) (13)(12)(11)</li>
<p>
外部テーブルのようにローカルにヒープストレージが存在しない場合、高速デフォルトは役に立たず、その後の操作で混乱が生まれます。バージョン11 で高速デフォルトが追加された際に対象のテーブルが通常テーブルであるかのチェックがなかったため追加されました。
</p>
<li>インデックス状態フラグをトランザクションとして更新できるようになりました。  (Michael Paquier, Andrey Lepikhov) (13)(12)(11)(10)(9.6)</li>
<p>
これにより、インデックス述部が IMMUTABLE と宣言されているけれども実際にはそうではない場合の処理で失敗するのを回避できます。CREATE INDEX CONCURRENTLY でアサート失敗が生じるケースが報告されました。
</p>
<li>CREATE/ALTER DOMAIN がキャッシュされた実行プランにあらわれたときに、プランのキャッシュエントリが破損しないようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
プリペアドステートメントとして、これら命令を実行したときに、「ERROR:  unrecognized node type: N」(Nは数値）という予期せぬエラーが生じるケースが報告されました。
</p>
<li>pg_stat_activity にて walsender の最新のレプリケーションコマンドが表示されるようになりました。  (Tom Lane) (13)(12)(11)(10)</li>
<p>
今までは最新の SQL コマンドが表示されており、実際には表示されている SQL コマンドではなくレプリケーションコマンドが実行されている場合に紛らわしいものとなっていました。
</p>
<li>postgresql.conf から設定項目が削除された場合でもpg_settings.pending_restart　が true にセットされるようになりました。  (&Aacute;lvaro Herrera) (13)(12)(11)(10)(9.6)</li>
<p>
pending_restart は再起動が必要な設定項目が変更された際は正しく表示されていましたが、設定項目自体が削除された場合に対応できていませんでした。
</p>
<li>64 ビットの Windows で work_mem × hash_mem_multiplier が 2GB を超えることが許容されました。  (Tom Lane) (13)</li>
<p>
これにより hash_mem_multiplier を数ギガバイトを超えるような大きなハッシュ集約のディスク書き出しを防ぐ目的で利用できるようになりました。
</p>
<li>外部テーブルを継承する通常テーブルに関する問い合わせにおける、誤った実行プラン作成が修正されました。  (Amit Langote) (13)(12)</li>
<p>
SELECT FOR UPDATE や関連するコマンドで、アサート失敗、もしくは、「ERROR:  could not find junk column」が発生していました。
</p>
<li>プラン作成において、FROM 要素が LATERAL であるときの、不変の FROM句内関数結果のプルアップが修正されました。  (Tom Lane) (13)</li>
<p>
問い合わせでクラッシュやアサート失敗を起こす動作が報告されました。
</p>
<li>新しいスタンバイが新しいプライマリに追随する際に稀に発生する障害が修正されました。  (Dilip Kumar, Robert Haas) (13)(12)(11)(10)(9.6)</li>
<p>
いくつかの条件が組み合わさった際にスタンバイが間違った WALタイムラインに従おうとする可能性がありました。
</p>
<li>トランザクションアボートのレコードの WALリプレイがファイル切り捨てを引き起こすときに、最小のリカバリポイントが更新されるようになりました。  (Fujii Masao) (13)(12)(11)(10)(9.6)</li>
<p>
ファイル切り捨ては元に戻せないため、そのレコードよりも前の時点でリカバリを止めることは安全ではありません。トランザクションがコミットされた場合で該当するケースは数年前に修正されていましたが、アボートのケースは修正されていませんでした。
</p>
<li>レプリケーションスロットが無効となった後に「必要とされる最も古いWALセグメント」の境界値を適切に進めるようになりました。  (Kyotaro Horiguchi) (13)</li>
<p>
全てのレプリケーションスロットが無効となった際に境界値を再計算しておらず、最終的にサーバの WAL ストレージが溢れる可能性がありました。
</p>
<li>walreceiver で、エラー発生後にキャッシュからのカタログ検索を試みなくなりました。  (Masahiko Sawada, Bharath Rupireddy) (13)(12)(11)(10)</li>
<p>
これはエラー後において安全な方法ではありません。
</p>
<li>スタンバイサーバにシャットダウンシグナルが送信された場合、まだ起動処理中でWAL受信を待っているであっても、直ちにシャットダウンを実行するようになりました。  (Fujii Masao, Soumyadeep Chakraborty) (13)(12)(11)(10)(9.6)</li>
<li>トランザクションコミットグループへの参加に失敗した際に、共有状態が正しくクリアされるようになりました。  (Amit Kapila) (13)(12)(11)</li>
<p>
タイミングによっては、後のセッションが同じ PGPROCオブジェクトを再利用する場合にアサート失敗が発生する可能性がありました。
</p>
<li>他のプロセスからの同時書き込みに際しても不正な relmapper のデータを読み込みを回避できるように、ロックが追加されました。  (Heikki Linnakangas) (13)(12)(11)(10)(9.6)</li>
<p>
relmapper は OID とファイルノードの対応を保持するデータで、ファイル名は pg_filenode.map です。
</p>
<li>並列B-treeインデックス構築の、ソート段階に関する進捗報告が改善されました。  (Matthias van de Meent) (13)(12)</li>
<p>
パラレルワーカによるソート処理の開始前にも状態報告するようになりました。
</p>
<li>レプリケーションプロトコル違反の検査が改善されました。  (Tom Lane) (13)(12)(11)(10)</li>
<p>
ロジカルレプリケーションワーカは多くの箇所でアサートを用いて、不適切なレプリケーションコマンドの検査を行っていましたが、通常のエラー処理に変更されました。
</p>
<p>
不正な入力に対して、デバッグビルドでアサート失敗で停止することも、実運用ビルドで検査が行われないことも、望ましくありません。
</p>
<li>パーティションテーブルのロジカルレプリケーションで更新時に発生しうるクラッシュが幾つか修正されました。  (Amit Langote, Tom Lane) (13)</li>
<li>ロジカルレプリケーションワーカでパーティションテーブルのAFTERトリガが発動する時に生じる可能性のあったクラッシュが修正されました。  (Tom Lane) (13)</li>
<li>複数ロジカルレプリケーションワーカが同じテーブルを TRUNCATEしようとする際に起こるデッドロックが修正されました。  (Peter Smith, Haiying Tang) (13)(12)(11)</li>
<p>
TRUNCATE実行時にサブスクライバ側で「ERROR: deadlock detected」が発生していました。
</p>
<li>投機的挿入（speculative insertions）のロジカルデコーディングにおける幾つかの誤りが修正されました。  (Dilip Kumar) (13)(12)(11)(10)(9.6)</li>
<p>
投機的挿入は INSERT .. ON CONFLICT .. で使われる処理です。メモリリークや予期せぬエラー、アサート失敗がもたらされる可能性がありました。
</p>
<li>ロジカルレプリケーションのデコーディングによるメモリリークが修正されました。  (Amit Langote) (13)</li>
<li>エラー発生後、データ型キャッシュのハッシュテーブルに無効なレコード型のエントリが残る問題が回避されました。  (Sait Talha Nisanci) (13)(12)(11)</li>
<p>
これは後のクラッシュやメモリリークを引き起こす原因となっていました。
</p>
<li>CREATE TABLE ... AS EXECUTE構文でエラー発生する一部の場合における、プランキャッシュの参照カウントの取りこぼしが修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
結果としてメモリリークが生じる可能性がありました。
</p>
<li>パラレルワーカ間のタプル記述子を共有するコードで競合状態が修正されました。  (Thomas Munro) (13)(12)(11)</li>
<p>
場合によってはクラッシュが発生する可能性がありました。
</p>
<li>checkpointerプロセスによる使われなくなったレプリケーションスロット無効化が、そのスロットを削除や更新しようとする処理と並行して行われたときの競合状態が修正されました。  (Andres Freund, &Aacute;lvaro Herrera) (13)</li>
<li>バックグランドワーカスロット（BackgroundWorkerSlots）を解放する際の潜在的な競合状態が回避されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
Intelハードウェアでは明白にバグが修正されたという結果が観察できないかもしれませんが、メモリオーダリング制御が弱いマシン上では問題が起きる可能性がありました。
</p>
<li>ソートのコードにおける潜在的なクラッシュが修正されました。  (Ronan Dunklau) (13)(12)(11)(10)(9.6)</li>
<p>
あるコードパスで NULLポインタを解放しようとする可能性がありました。本ケースは、コアサーバのソート利用では到達できないように見えますが、拡張から引き起こされる可能性がありました。
</p>
<li>破損データに対して B-tree ポスティングリストを分割するコードが堅牢化されました。  (Peter Geoghegan) (13)</li>
<p>
既存のエントリと同一の TID を持つアイテムを挿入しようとすると、クラッシュするのではなく、エラーを投げるようになりました。 これは決して起こるべきではありませんが、インデックスがそのテーブルと矛盾している時に場合に起こることが報告されています。
</p>
<li>SP-GiST のインデックス挿入における無限ループが防止されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
INCLUDE列がリーフインデックスタプルがページに収まらないほどのスペースを占めている場合、text_ops演算子クラスはタプルを収めるために無駄に無限ループに陥ってしまいました。11以前のバージョンには INCLUDE列がありませんが、演算子クラスのバグに対する良い防御策と思われるので、このループ防止の修正が後方適用されました。
</p>
<li>SP-GiST のインデックス挿入が、クエリキャンセル要求によって終了できることが保証されました。  (Tom Lane, &Aacute;lvaro Herrera) (13)(12)(11)(10)(9.6)</li>
<li>PL/pgSQL で INTO句に STRICT が指定されていないにもかかわらず、あたかも STRICT が指定されているかのように動作する可能性がある、初期化されていない変数のバグが修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<li>libpq の出力関数（PQprint）において、メモリ不足障害が発生しても処理を中断しないようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
これまでは abort(3) でプログラムを終了させていました。
</p>
<li>ecpg で numaric型の INT_MIN（通常は -2147483648）を integer に変換できるようになりました。  (John Naylor) (13)(12)(11)(10)(9.6)</li>
<p>
以前の ecpg の範囲チェックでは INT_MIN ではなく -INT_MAX を範囲内としていたため、-2147483648 が範囲外として拒否されていました。
</p>
<li>psql やその他のクライアントプログラムで不正にエンコードされたデータを扱う際に、文字列の末尾をオーバーランしないようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
文字列の終わり近くに不適切にエンコードされたマルチバイト文字があると、様々な処理ループが文字列の最後の NUL を越えて実行される可能性があり、その結果、後続のメモリに何があるかによって、検出不能な問題からプログラムのクラッシュまで様々な問題が発生します。これは CVE-2006-2313 を想起させますが、これらの特定ケースが注意を喚起させるセキュリティ上の重要性を持つとは思われません。
</p>
<li>有効/無効（あるいは REPLICA/ALWAYS）の状態が親テーブルのトリガと異なるパーティションテーブルのトリガを正しく処理するようにpg_dump が修正されました。  (Justin Pryzby, &Aacute;lvaro Herrera) (13)(12)(11)</li>
<p>
このような場合にダンプで指定されていた状態が失われていました。
</p>
<li>異なるタイムゾーンで作成されたダンプファイルで pg_restore を実行した場合に発生する「invalid creation date in header」という警告が回避されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
新しい glibc バージョンの mktime() の移植性の問題により、異なるタイムゾーンで作成されたダンプファイルに対して pg_restore を実行した時、下記のメッセージが出ていました。
</p>
<pre>
pg_restore: warning: invalid creation date in header
pg_restore: while PROCESSING TOC:
</pre>
<li>pg_upgrade が古いインストールの「oldestXID」の値を引き継ぐようになりました。  (Bertrand Drouvot) (13)(12)(11)(10)(9.6)</li>
<p>
以前、新しいインストールの「oldestXID」は（通常）すぐに周回防止の自動バキュームが強制実行されるような古い値に設定されていました。これはパフォーマンスの観点からは望ましくありません。さらに悪いことに、大きな値の autovacuum_freeze_max_age を使用しているインストールでは、アップグレード直後に不必要な強制シャットダウンが発生する可能性がありました。
</p>
<li>アップグレードすべき拡張を検出して警告を出すように pg_upgrade が拡張されました。  (Bruce Momjian) (13)(12)(11)(10)(9.6)</li>
<p>
これからは、拡張を新PostgreSQLバージョンでデフォルトとされるバージョンにアップグレードするのに必要な ALTER EXTENSION UPDATE コマンドを含む、スクリプトファイルが作成されます。
</p>
<li>pg_receivewal を圧縮WAL格納と非圧縮WAL格納の間で切り替える際の問題が回避されました。  (Michael Paquier) (13)(12)(11)(10)</li>
<li>contrib/postgres_fdw が生成列について有効に動作するよう修正されました。  (Etsuro Fujita) (13)(12)</li>
<p>
外部テーブルの生成列が外部テーブルの生成列をあらわす場合については、適切に動作するようになりました。
</p>
<p>
postgres_fdw は IMPORT でリモートテーブルの生成列を通常の列として取り込み、外部テーブルに INSERT を行う時に「ERROR: cannot insert a non-DEFAULT value into column "..."」というエラーが出ていました。import_generated オプション（デフォルトtrue）が追加され、true なら、IMPORT FOREIGN SCHEMA は生成列を取り込むようになりました。
</p>
<li>contrib/postgres_fdw で、エラーの後にカタログ検索を試みないようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
通常はこの方法で動作しますが、カタログアクセスが機能しないエラーが発生している可能性があるため、あまり安全ではありませんでした。この修正の副作用として、データ変換エラーに関するメッセージで、外部テーブルや外部列の実際の名前ではなく、クエリのテーブルやカラムのエイリアス（使用されている場合）が言及されるようになりました。
</p>
<li>トランザクション隔離のテストの基盤が改善されました。  (Tom Lane, Michael Paquier) (13)(12)(11)(10)(9.6)</li>
<li>キャッシュ上書きの検査のオーバヘッドが軽減されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<li>PL/Python のリグレッションテストが Python 3.10 でも通るように修正されました。  (Honza Horak) (13)(12)(11)(10)(9.6)</li>
<li>PostgreSQLコード内の実装における printf("%s", NULL) がクラッシュする代わりに (null) を出力するようになりました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
これにより、ごく稀な場合でのサーバの堅牢性が向上し、printf の実装が一般的なライブラリと同様となります。
</p>
<li>ポイントインタイムリカバリが ROLLBACK PREPARED レコードで停止した際に出力する誤ったログメッセージが修正されました。  (Simon Riggs) (13)(12)(11)(10)(9.6)</li>
<p>
「recovery stopping before abort of transaction %u, time %s」と出力すべきメッセージが、これまでは、「recovery stopping before commit of transaction %u, time %s」と出力されていました。
</p>
<li>ALTER TABLEで誤ったリレーションタイプに対するエラーメッセージが改善されました。  (Kyotaro Horiguchi) (13)(12)(11)</li>
<pre>
（メッセージ改善例）
db=# CREATE VIEW v69 AS SELECT * FROM t1;
db=# ALTER TABLE v69 ALTER c SET STATISTICS 0;
ERROR:  "v69" is of the wrong type
（修正後のメッセージ）
ERROR:  "v69" is not a table, materialized view, index, partitioned index, or foreign table
</pre>
<li>エラーメッセージ内の「負でない (non-negative)」等がゼロを含むか明確な表現に置き換えられました。  (Bharath Rupireddy) (13)(12)(11)(10)(9.6)</li>
<pre>
db=# CREATE TABLE t70 (c int) PARTITION BY HASH (c);
db=# CREATE TABLE p70 PARTITION OF t70 FOR VALUES WITH (MODULUS 4, REMAINDER 0);

(修正前)
db=# SELECT satisfies_hash_partition('t70'::regclass, 0, 0, NULL);
ERROR:  modulus for hash partition must be a positive integer
db=# SELECT satisfies_hash_partition('t70'::regclass, 1, -1, NULL);
ERROR:  remainder for hash partition must be a non-negative integer

(修正後)
db=# SELECT satisfies_hash_partition('t70'::regclass, 0, 0, NULL);
ERROR:  modulus for hash partition must be an integer value greater than zero
db=# SELECT satisfies_hash_partition('t70'::regclass, 1, -1, NULL);
ERROR:  remainder for hash partition must be an integer value greater than or equal to zero
</pre>
<li>個別の libldap_rライブラリがなくなった OpenLDAP 2.5 で動作するように configure が修正されました。  (Adrian Ho, Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>libldap_rライブラリが存在しない場合は、libldapライブラリは暗黙的にスレッドセーフであると想定されます。
</p>
<li>make ターゲットに新たに world-bin および install-world-bin が追加されました。  (Andrew Dunstan) (13)(12)(11)(10)(9.6)</li>
<p>
これらは、ドキュメントをビルドまたはインストールしないことを除き、world および install-world と同じです。
</p>
<li>TAPテストの makeルール（prove_installcheck）がPGXS の使い方に沿って動作するように修正されました。  (Andrew Dunstan) (13)(12)(11)(10)(9.6)</li>
<li>JITのコードが今後の LLVM API の変更に備えて調整されました。  (Thomas Munro, Andres Freund) (13)(12)(11)</li>
<p>
LLVM 13 では、以前の JIT コンパイラではクラッシュをもたらす、互換性のない API の変更が行われています。
</p>
<li>GSSAPIライブラリから返る文字列が null終端していることを前提としないように修正されました。  (Tom Lane) (13)(12)(11)(10)(9.6)</li>
<p>
GSSAPI の仕様では文字列ポインタと長さを返すことになっています。実際には文字列は通常 null終端されているため、従来コードでもエラーは発生していませんが、AddressSanitizer から問題が報告されました。
</p>
<li>MSVC で GSSAPI を使ったビルドが可能になりました。  (Michael Paquier) (13)(12)(11)(10)(9.6)</li>
<p>
最新の Kerberosビルドとのさまざまな非互換性が修正されました。
</p>
<li>MSVC ビルドで --with-pgport が指定されている場合、pg_config が出力する configure オプションに含めるようになりました。  (Andrew Dunstan) (13)(12)(11)(10)(9.6)</li>
<li>PostgreSQL 10 を ICU 69 以降でビルドできるようになりました。  (Peter Eisentraut) (10)</li>
<li>contrib/pgcrypto で、シンボル名が OpenSSL と競合しないように修正されました。  (Tom Lane) (9.6)</li>
<p>
SHA224ハッシュを使った操作で valgrid がエラーを検知する可能性がありました。これは、アライメント用パディングバイトのメモリ破壊にすぎないため、実際には影響なさそうですが、念のため修正されました。
</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>
