<?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.2 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-12-2/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:34:59 +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.2 &#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.3 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/12-3/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Wed, 20 May 2020 02:26:27 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 12]]></category>
		<category><![CDATA[PostgreSQL 12.2]]></category>
		<category><![CDATA[PostgreSQL 12.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5913</guid>

					<description><![CDATA[このリリースは 12.2 からの修正リリース（2020年5月14日リリース）です。12.x からのアップデートではダンプ、リストアは不要です。ただし、12.2よりも前のバージョンからアップデートする場合には、12.2 の ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 12.2 からの修正リリース（2020年5月14日リリース）です。12.x からのアップデートではダンプ、リストアは不要です。ただし、12.2よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/12-2/">12.2 のリリース情報</a>を参照してください。</p>
<p><span id="more-5913"></span></p>
<h3>PostgreSQL 12.2 から 12.3 への変更点</h3>
<p>12.3、11.8、10.13、9.6.18、9.5.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<ol>
<li>生成列（GENERATED 指定された列）で起こりうるクラッシュが修正されました。  (David Rowley) (12)</li>
<p>
生成列が、テーブル内の他の列の単なるコピーで、かつ、リファレンス渡しのデータ型（文字列型など）である場合、テーブルに壊れたデータが投入されるかクラッシュを引き起こす可能性がありました。他の列を単に複製する GENERATED式という役に立たない使い方に限られればよいですが、時に入力そのものを返す関数を使っている式で本状況が生じる可能性があります。
</p>
<p>
本障害で以下のようなデータ投入時に巨大なメモリ要求によるエラーが出るケースも報告されました。
</p>
<pre>
ERROR:  XX000: invalid memory alloc request size 18446744073709551613
</pre>
<li>生成列の継承の扱いが改善されました。  (Peter Eisentraut) (12)</li>
<p>
CREATE TABLE ... INHERITS でテーブルの列が継承された場合、親の列が生成列（GENERATED）であるときに子の列で生成列であるという属性を変更することが禁止され、一方で、親の列が生成列でないときに子の列で GENERATED を指定して生成列にできるようになりました。
</p>
<p>
これらの規則が不明瞭であったことに起因して、生成列と継承の組み合わせを含むテーブル定義のダンプがリストアできない場合が報告されました。
</p>
<li>CREATE TABLE ... LIKE ... INCLUDING GENERATED で、列をまたがる参照が修正されました。  (Peter Eisentraut) (12)</li>
<p>
物理的に後ろにある列を参照する GENERATED式をコピーしようとするときに CREATE TABLE ... LIKE が以下のようなエラーを起こしました。
</p>
<pre>
（報告されたエラー発生例）
db=# CREATE TABLE t3 (
     funds float GENERATED ALWAYS AS (cast(funds_t AS double precision)) STORED,
     funds_t text,
     id bigserial not null);

db=# CREATE TABLE IF NOT EXISTS t3_temp (LIKE t3 INCLUDING GENERATED);
ERROR:  XX000: unexpected varattno 3 in expression to be mapped
</pre>
<li>ALTER TABLE ... SET STORAGE がインデックスに伝搬するようになりました。  (Peter Eisentraut) (12)(11)</li>
<p>
式でないインデックス列は作成時には常に、そのテーブル列の attstorage属性をコピーしていました。整合性を維持するように、ALTER TABLE ... SET STORAGE ... が実行されたときにインデックスに対しても属性を変更するようになりました。
</p>
<li>ALTER TABLE で書き換えられたインデックスの indisclustered属性を維持するようになりました。  (Amit Langote, Justin Pryzby) (12)(11)(10)(9.6)(9.5)</li>
<p>
indisclustered は pg_indexシステムテーブルの列で、前回テーブルを当該インデックスを使って CLUSTERコマンドを実行した場合にtrue となります。これまで、当該列を対象に ALTER TABLE を実行すると、この情報が失われていました。
</p>
<li>ALTER TABLE で書き換えられたインデックスの REPLICA IDENTITY属性が維持されるようになりました。  (Quan Zongliang, Peter Eisentraut) (12)(11)(10)(9.6)(9.5)</li>
<p>
REPLICA IDENTITY属性は、論理レプリケーション用に使われ、ALTER TABLE ... REPLICA IDENTITY USING INDEX ... コマンドで指定されます。pg_indexシステムテーブルの列名としては indisreplident です。これまで、当該列を対象に ALTER TABLE を実行すると、この情報が失われていました。
</p>
<li>REINDEX CONCURRENTLY で再構築されたインデックスの indisclustered属性が維持されるようになりました。  (Justin Pryzby) (12)</li>
<p>
これまで、このような場合に属性が失われ、REINDEX CONCURRENTLY後のCLUSTERコマンド実行が失敗する可能性がありました。
</p>
<li>DROP OWNED BY コマンドにおいて、オブジェクトをより早くロックするようになりました。  (&Aacute;lvaro Herrera) (12)(11)(10)(9.6)(9.5)</li>
<p>
これにより、他セッションがいくつかの同オブジェクトを削除している場合の競合状態によるエラーを回避します。以下のエラーが出るケースが報告されました。
</p>
<pre>
ERROR:  cache lookup failed for relation 41019
</pre>
<li>CREATE ROLE ... IN ROLE ... のエラー処理が修正されました。  (Andrew Gierth) (12)(11)(10)(9.6)(9.5)</li>
<p>
一部のエラーケースでは意図通りのメッセージの代わりに「unexpected node type」といったエラーメッセージが報告されていました。
</p>
<li>パーティションがデタッチされたときに、旧親テーブルから複製されたトリガが確実に除去されるように修正されました。  (Justin Pryzby) (12)(11)</li>
<p>
これまで、パーティションをデタッチした際にトリガが残ってしまう動作があり、そのようなトリガは、旧親テーブルとの依存関係のために以下のようなエラーが出て、削除不能となっていました。
</p>
<pre>
db=# ALTER TABLE t10p DETACH PARTITION t10c;
db=# DROP TRIGGER trig ON t10c;
ERROR:  cannot drop trigger trig on table t10c because trigger trig on table t10p requires it
</pre>
<li>パーティション境界の式で、COLLATE が照合不可能な型に適用されるとクラッシュする不具合があり、修正されました。  (Dmitry Dolgov) (12)</li>
<pre>
（該当する例: 整数型に COLLATE を指定する式を与えている）
db=# CREATE TABLE t11p (i int) PARTITION BY LIST (i);
db=# CREATE TABLE t11c1 PARTITION OF t11p FOR VALUES IN ('1' COLLATE "POSIX");
</pre>
<li>パーティショニングされたテーブル上のユニークインデックスが、パーティショニングキーの等価性セマンティクスと一致するかどうかを確認するようになりました。  (Guancheng Luo) (12)(11)</li>
<p>
これは独自の等価性演算子を持つインデックス演算子クラスだけの問題ですが、理論的には間違っていたので、確認するように修正されました。
</p>
<li>pg_read_all_statsロールのメンバが、期待通りにすべての統計情報ビューを参照できるようになりました。  (Magnus Hagander) (12)(11)(10)</li>
<p>
pg_read_all_statsロールのメンバ は pg_stat_progress_* ビューを参照できるとドキュメントに記載されていましたが、実際には参照できませんでした。
</p>
<li>information_schema.triggersビューのパフォーマンス劣化が修正されました。  (Tom Lane) (12)(11)</li>
<p>
この修正は、テーブル名を制約する外側の WHERE句がプッシュダウンされるようにビューを再定義し、計算がデータベース内の全トリガではなく、対象テーブルに属するトリガに対してのみ行われるようにします。多くのトリガを持つデータベースでは、この変更でかなりの速度差が出ます。
</p>
<p>
バージョン11より前には修正後と同様に動作していたので、これは潜在的なパフォーマンス劣化でした。
</p>
<p>
本修正は既存のデータベースクラスタには適用されませんが、明示的にビュー定義を置き換えることで修正することができます。information_schema.triggersビューを含む情報スキーマの定義はソースコードの以下パスにあります。
</p>
<pre>
src/backend/catalog/information_schema.sql
</pre>
<li>浮動小数点オーバーフローおよびアンダーフロー検出のパフォーマンス低下が修正されました。  (Emre Hasegeli) (12)</li>
<p>
以前のリファクタリングで、いくつかのホットなコードパスで isinf() を余分に呼び出すようになっていました。
</p>
<li>全文検索がフレーズ検索上の NOT を正しく処理できるように修正されました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<p>
これまで、GiST や GIN インデックス検索として実行されている場合、「!(foo &lt;-&gt; bar)」のようなクエリで、マッチする行が見つからない問題が発生していました。
</p>
<li>全文検索のフレーズ検索で、前方一致と重み限定の両方を持つ項目が含まれる場合に、マッチ漏れが発生する不具合が修正されました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<p>
以下のような場合が該当します。
</p>
<pre>
（マッチすべきところでマッチしない障害動作例）
db=# SELECT 'wa:1D wb:2A'::tsvector @@ 'w:*D &lt;-&gt; w:*A'::tsquery as "true";
 true
------
 f
(1 行)
</pre>
<li>フレーズ検索を使うときにより良い見出しが選択されるように、ts_headline() 関数が修正されました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<p>
検索条件部分が適切に強調されない動作が報告されました。
</p>
<li>gin_fuzzy_search_limit の処理の不具合が修正されました。  (Ad&eacute; Heyward, Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>
gin_fuzzy_search_limit の値が小さいと、意図せずに同じインデックスページを何度も再スキャンしてしまい、予期せず遅くなる可能性がありました。別のコードパスでは、意図したフィルタリングの適用に失敗しており、多すぎる値を返す可能性がありました。
</p>
<li>ドキュメント通りに circle型の入力として「(x,y),r」形式を受け付けるようになりました。  (David Zhang) (12)(11)(10)(9.6)(9.5)</li>
<pre>
（修正前のエラー発生例）
db=# SELECT '( 1 , 1 ) , 5'::circle;
ERROR:  invalid input syntax for type circle: "( 1 , 1 ) , 5"
</pre>
<li>get_bit() と set_bit() 関数が 256MB より長い bytea文字列に対応しました。  (Movead Li) (12)(11)(10)(9.6)(9.5)</li>
<p>
ビット数の引数が int4 のみなので、これらの関数を使用して長い bytea の最初の256MB を超えるビットにアクセスすることはできません。バージョン 13 では引数が int8 に拡張される予定ですが、それまでの間は、これらの関数が長い bytea の最初の部分文字列で動作します。
</p>
<p>
修正前は、このような場合に以下エラーが発生していました。
</p>
<pre>
ERROR:  index 0 out of valid range, 0..-1
</pre>
<li>pg_ls_waldir() とその関連関数で、ファイルが見つからないというエラーを無視するようになりました。  (Tom Lane) (12)(11)(10)</li>
<p>
これは、ディレクトリエントリが参照されてからstat() を実行しようとするまでの間にファイルが削除された場合の競合状態による失敗を防ぎます。
</p>
<li>pg_ls_dir()、pg_timezone_names()、pg_tablespace_databases()、および、関連関数で、ディレクトリの開いたファイルディスクリプタがリークする可能性があり、回避されました。  (Justin Pryzby) (12)(11)(10)(9.6)(9.5)</li>
<li>多様関数の型解決が修正されました。anyrange の入力のみを与えられた場合に、anyarray の出力が実際の型を正しく推論するようになりました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>
そのような場合に以下のエラーが出るケースが報告されました。
</p>
<pre>
db=# CREATE FUNCTION f24(x anyrange, out lu anyarray, out ul anyarray)
     LANGUAGE SQL
     AS 'SELECT array[lower(x),upper(x)], array[upper(x),lower(x)]';

db=# SELECT * FROM foo24(int4range(6,9));
ERROR:  cache lookup failed for type 0
</pre>
<li>GSSAPI対応でコンパイルされていないために GSSAPI接続が拒否され、クライアントが代わりに SSL 接続を試みる場合の、サーバの接続開始ロジックが修正されました。  (Andrew Gierth) (12)</li>
<p>
これまで、以下の FATALメッセージで失敗していました。
</p>
<pre>
FATAL:  unsupported frontend protocol 1234.5679: server supports 2.0 to 3.0
</pre>
<li>GSSAPI暗号化でのメモリリークが修正されました。  (Tom Lane) (12)</li>
<p>
これまで、GSSAPI暗号化が使用されている場合、バックエンドと libpq の両方がセッション中に送信されたデータの総量に相当するメモリリークが発生していました。
</p>
<li>クエリの FROM句で使用される集合を返す関数のメモリリークが修正されました。  (Andres Freund) (12)</li>
<p>
これにより以下のような問い合わせのメモリ使用量が巨大になっていました。
</p>
<pre>
db=# SELECT sum(f) FROM generate_series(1, 1000000) g(i),
                        generate_series(i, i+1) f;
</pre>
<li>複数回使われるハッシュ化されたサブプランのハッシュテーブルのリークが回避されました。  (Andreas Karlsson, Tom Lane) (12)(11)</li>
<p>
この誤りは、ハッシュ化されたサブプランのクエリを十分な回数再実行した時に、深刻なメモリの肥大化を引き起こす可能性がありました。
</p>
<li>プランナによる何もしないドメインに型変換する処理が改善されました。  (Tom Lane) (12)</li>
<p>
何もしないドメインへの型変換が式から完全に取り除かれない場合があり、修正されました。旧メジャーバージョンと比べて動作が遅くなっていたことが報告されていました。
</p>
<li>REINDEX が SIGTERM（セッションシャットダウン）シグナルで終了した時のクラッシュが回避されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>実際には上記の状況であっても本障害でのクラッシュ発生は稀です。</p>
<li>EXPLAIN でおそらく不正とみられるハッシュ結合テーブルの統計情報が出力されていたものが、防止されました。  (Konstantin Knizhnik, Tom Lane, Thomas Munro) (12)(11)(10)(9.6)(9.5)</li>
<p>
以下のような EXPLAIN出力（一部抜粋）が報告されていました。
</p>
<pre>
-&gt;  Hash  (cost=0.11..0.11 rows=10 width=12) (actual time=0.002..0.002 rows=1 loops=8)
      Buckets: 2139062143  Batches: 2139062143  Memory Usage: 8971876904722400kB
      -&gt;  Function Scan on unnest init_1  (cost=0.01..0.11 rows=10 width=12) (actual time=0.001..0.001 rows=1 loops=8)
</pre>
<li>VACUUM VERBOSE でのヒープ切り捨て段階の経過時間の報告が修正されました。  (Tatsuhito Kasahara) (12)(11)(10)(9.6)(9.5)</li>
<p>
これまで不正確な経過時間が報告されていました。
</p>
<li>VACUUM VERBOSE の出力で、削除された B-treeインデックスについてページ数が過小に報告されていたものが、修正されました。  (Peter Geoghegan) (12)(11)</li>
<li>B-treeインデックスで最も古い削除されたページに対する誤った記録付けが修正されました。  (Peter Geoghegan) (12)(11)</li>
<p>
これによって、VACUUM がインデックスのクリーンアップスキャンをスキップできる場合について、微妙に間違った判断をする可能性がありました。
</p>
<li>TimelineHistoryRead と TimelineHistoryWrite の待機状態が、.historyファイルを読み書きするすべてのコードパスで報告されるようになりました。  (Masahiro Ikeda) (12)(11)(10)</li>
<li>プロセスの PS状態で「waiting」が重複して表示されないように修正されました。  (Masahiko Sawada) (12)(11)(10)(9.6)(9.5)</li>
<pre>
（誤った psコマンドの出力行の例）
46510   ??  Ss     0:00.05 postgres: startup   recovering 000000010000000000000003 waiting waiting
</pre>
<li>拡張統計データのカタログタプルを ANALYZE で置き換えた場合の競合状態が回避されました。  (Dean Rasheed) (12)</li>
<p>
VACUUM FULL などの操作が同時に行われた場合に、ANALYZE が間違ったタプルを置換してしまう可能性がありました。
</p>
<li>「冗長な」周回防止バキュームの不用意なスキップが回避されました。  (Michael Paquier) (12)</li>
<p>
これにより、自動バキュームが何度もトライしては同じバキュームジョブをスキップすることを繰り返すというまれなケースが回避されます。
</p>
<li>B-tree のピボットタプルから INCLUDEされたカラムが常に削除されるようになりました。  (Peter Geoghegan) (12)</li>
<p>
この誤りはまれにスペースを無駄にしましたが、それ以外は無害です。
</p>
<li>REINDEX CONCURRENTLY に失敗した後に残る可能性のある無効な TOASTインデックスを適切に扱うようになりました。  (Julien Rouhaud) (12)</li>
<p>
REINDEX CONCURRENTLY に失敗した後に REINDEX TABLE を行った場合に、使用できず、削除もできない重複したインデックスが作成されてしまう問題が生じていました。
</p>
<li>REINDEX CONCURRENTLY が失敗した後でも、有効なインデックスの依存関係が維持されるように対応されました。  (Michael Paquier) (12)</li>
<p>
以前は pg_depend のリンクがまったくない古いインデックスを残すことがありえたため、例えば親テーブルが削除されてもインデックスは削除されずに残ってしまいました。
</p>
<li>autovacuum がドロップされたばかりの一時スキーマにアクセスしようとした場合にクラッシュする障害が回避されました。  (Tom Lane) (12)(11)</li>
<p>
この障害はスーパーユーザが一時スキーマを手動で削除した場合にのみ発生します。これは一般的な状況ではありませんが、この場合も動作すべきでした。
</p>
<li>クラッシュリカバリ中の WALセグメントの早すぎるリサイクルが回避されました。  (Jehan-Guillaume de Rorthais) (12)(11)(10)(9.6)(9.5)</li>
<p>
クラッシュリカバリの間にアーカイブされる準備が整った WALセグメントがアーカイブされずにリサイクルされる可能性がありました。
</p>
<li>アーカイブリカバリ中に無関係なタイムラインがスキャンされないようになりました。  (Kyotaro Horiguchi) (12)(11)(10)(9.6)(9.5)</li>
<p>
これにより、アーカイブストレージから存在しない WAL ファイルをフェッチしようとする多くの試みを排除することが可能となり、アーカイブへのアクセスが遅い場合に役立ちます。
</p>
<li>論理デコーディングでの「subtransaction logged without previous top-level txn record」 というエラーの検査が削除されました。  (Arseny Sher, Amit Kapila) (12)(11)(10)(9.6)(9.5)</li>
<p>
この条件は様々なシナリオで正当に到達可能なため取り除かれました。
</p>
<li>レプリケーションスロットのコピー後に障害が発生する可能性があり、回避されました。  (Masahiko Sawada, Arseny Sher) (12)</li>
<p>
WALデータが適切に取りおかれず、早くに削除されてしまう可能性がありました。
</p>
<li>レプリケーションスロットの「io_in_progress_lock」がエラー時のコードパスで確実に解放されるようになりました。  (Pavan Deolasee) (12)(11)(10)(9.6)(9.5)</li>
<p>
本障害のため walsender が後でロックを待機したまま動けなくなる可能性がありました。
</p>
<li>論理レプリケーションによって発行された更新のときに、生成列が正しく確実に処理されるようになりました。  (Peter Eisentraut) (12)</li>
<p> これまで、このような場合に生成列が更新されませんでした。
</p>
<li>同期スタンバイ管理での競合状態が修正されました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<p>
synchronous_standby_names の設定を変更している間、同期コミットを待っているトランザクションをリリースしてもよいかどうかについて、誤った判断を下す可能性がありました。 また、walsenderプロセスが終了してすぐにプロセスが再起動された場合にも、同様に誤った判断を下す危険性がありました。
</p>
<li>いくつかのエラー報告に欠落していた SQLSTATE値が追加されました。  (Sawada Masahiko) (12)(11)(10)(9.6)(9.5)</li>
<li>イベントトリガ関数の通常関数としての実行を確実に拒否するようにPL/pgSQL が修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>
そのような関数実行でクラッシュが発生していました。
</p>
<li>「sslmode=verify-full」を使用した時の libpq でのメモリリークが修正されました。  (Roman Peshkurov) (12)(11)(10)(9.6)(9.5)</li>
<p>
接続開始時の証明書の検証は、いくらかのメモリリークの可能性があり、クライアントプロセスの起動中にデータベース接続を多数オープンした場合に問題となる可能性がありました。
</p>
<li>すべてのプラットフォームで「-」引数を「標準入力からの読み込み」を意味するものとして扱うように ecpg が修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>
AIX で動作しないケースが報告されていました。
</p>
<li>psql で失敗した接続を復旧しようとした時に発生するクラッシュが修正されました。  (Michael Paquier) (12)</li>
<li>psql の \gx コマンドが引数（ファイル名）のタブ補完できるようになりました。  (Vik Fearing) (12)(11)(10)</li>
<p>
\gx コマンドは直前の SQL 実行結果を拡張出力モードで引数に指定したファイルへ書き込みます。
</p>
<li>pg_dump で ALTER ... DEPENDS ON EXTENSION がサポートされました。  (&Aacute;lvaro Herrera) (12)(11)(10)(9.6)</li>
<p>
以前の pg_dump はこの依存関係を無視してしまい、ダンプ/リストアや pg_upgrade時にそれらが反映されませんでした。
</p>
<li>pg_dump が RLSポリシーオブジェクトのコメントをダンプするように修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<li>pg_dump がイベントトリガのリストアを最後に行なうようになりました。  (Fabr&iacute;zio de Royes Mello, Hamid Akhtar, Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<p>
これにより、イベントトリガが他のオブジェクトの復元に干渉するリスクを最小限に抑えることができます。
</p>
<li>pg_basebackup が有効な tarファイルを確実に生成するようになりました。  (Robert Haas) (12)</li>
<p>
ファイルの末尾にゼロ埋めされたブロックが追加されることがありました。これは一般的なバージョンの tar では問題ないようですが、POSIXファイル形式の仕様としては問題がありました。
</p>
<li>pg_checksums および pg_verify_checksums がメジャーバージョンの異なるテーブル空間のサブディレクトリをスキップするようになりました。  (Michael Banck, Bernd Helmle) (12) (11)</li>
<p>
このようなサブディレクトリは実際にはデータベースクラスタには属していないので、処理してはいけませんでした。
</p>
<li>pg_checksums および pg_verify_checksums と関連プログラムで、pg_internal.init の一時的なコピーを無視するようになりました。  (Michael Paquier) (12) (11)</li>
<li>createdb の --encoding、--lc-ctype、--lc-collate の値のクォート処理が修正されました。  (Michael Paquier) (12)(11)(10)(9.6)(9.5)</li>
<p>
以下の通り、正しくクォートされた文字列を認識できるようになりました。
</p>
<pre>
（PostgreSQL 12.2 の createdb コマンド）
$ createdb --lc-collate "foo'; SELECT '1" 'foobar2'
createdb: error: database creation failed: ERROR:  CREATE DATABASE cannot run inside a transaction block

（PostgreSQL 12.3 の createdb コマンド）
$ createdb --lc-collate "foo'; SELECT '1" 'foobar2'
createdb: error: database creation failed: ERROR:  invalid locale name: "foo'; SELECT '1"
</pre>
<li>contrib/lo の lo_manage()関数が、トリガとしてではなく直接呼ばれた場合でもクラッシュしなくなりました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)</li>
<li>contrib/ltree で、ltree と lquery のフィールド長がオーバーフローしないようになりました。  (Nikita Glukhov) (12)(11)(10)(9.6)(9.5)</li>
<p>
これまではフィールド長が 65535 を超えると 0 になっていましたが、本修正によって ERROR が返るようになりました。
</p>
<pre>
（修正前の動作）
db=# SELECT nlevel(('1' || repeat('.1', 65534))::ltree);
 nlevel
--------
  65535
(1 row)

db=# SELECT nlevel(('1' || repeat('.1', 65535))::ltree);
 nlevel
--------
      0
(1 row)


（修正後の動作）
db=# SELECT nlevel(('1' || repeat('.1', 65535))::ltree);
ERROR:  number of ltree levels (65536) exceeds the maximum allowed (65535)
</pre>
<li>oldest_xact値が 2^31-1 を超えても contrib/pageinspect の bt_metap() 関数が失敗しなくなりました。  (Peter Geoghegan) (12)(11)</li>
<p>
このような XID は負の整数として報告されるようになりました。これはワークアラウンドですが、エラーを投げるよりは良いと判断されました。これまで、以下のようなエラーが発生していました。
</p>
<pre>
db=# SELECT * FROM bt_metap('index');
ERROR: value "2180413846" is out of range for type integer
</pre>
<li>contrib/sepgsql で誤った「WARNING: cache reference leak」メッセージが出力されなくなりました。  (Michael Luo) (12)(11)(10)(9.6)(9.5)</li>
<li>Windows で pg_ctl start 時の早すぎるログファイル作成を回避するようになりました。  (Alexander Lakhin) (12)</li>
<p>
Windows の pg_ctl で、-l で指定したログファイルがまだ存在せず、pg_ctl が Administrator権限で実行されている場合、postmaster から書き込みできないパーミッションでログファイルが作成されて、権限不足のエラーが生じる可能性がありました。
</p>
<li>Windows で Unixスタイルのロケール名を扱う際に失敗しないようになりました。  (Juan Jos&eacute; Santamar&iacute;a Flecha) (12)(11)(10)(9.6)(9.5)</li>
<p>
Unixスタイルのロケール文字列（たとえば "et_EE.UTF-8"）の場合、ドットの後にあるのはエンコーディング名です。これを Windows のコードページ番号として扱って、以下のエラーが生じていました。
</p>
<pre>
&gt; initdb.exe --locale et_EE.UTF-8 -D C:\data
initdb: ERROR:  invalid locale name "et_EE.UTF-8"
</pre>
<p>
そのため、ドットの後の文字がすべて数字であるかどうかを確認し、そうでない場合はコードページ番号ではなくエンコーディング名として扱うようになりました。
</p>
<li>Windows で、PG_COLOR のカラー化をサポートするプログラムでコンソールの VT100 互換モードを設定するようになりました。  (Juan Jos&eacute; Santamar&iacute;a Flecha) (12)</li>
<p>
これを設定していないと、カラー化オプションが実際には動作しませんでした。
</p>
<li>ereport() の呼び出しで余分な括弧が要求されなくなりました。  (Andres Freund, Tom Lane) (12)</li>
<p>
これはソースコード内のインターフェースに関連する修正です。
</p>
<li>configure で libxml2 の位置を確認するために、利用可能な場合は pkg-config を使用するようになりました。  (Hugh McMaster, Tom Lane, Peter Eisentraut) (12)(11)(10)</li>
<p>
pkg-config が存在しないか、libxml2 に関する情報がない場合は、これまで通りxml2-config に問い合わせます。
</p>
<p>
この変更により、PostgreSQL がデフォルトではないバージョンの libxml2 を使用する場合、そのバージョンの xml2-config を PATH に設定すると、ビルドプロセスが中断される可能性があります。代わりに、XML2_CONFIG にデフォルトではない xml2-config を設定してください。この方法は、古いバージョンの PostgreSQL でも新しいバージョンの PostgreSQL でも動作します。
</p>
<li>libpq と ecpg の、Makefile の依存関係を修正しました。  (Dagfinn Ilmari Mannsaker) (12)</li>
<li>MSVCビルドで Python のパス名のスペースに対処するようになりました。  (Victor Wagner) (12)(11)(10)(9.6)(9.5)</li>
<li>Visual Studio のバージョン検出が修正され、MSVC ビルドがより多くの言語設定で動作するようになりました。  (Andrew Dunstan) (12)(11)(10)(9.6)(9.5)</li>
<li>Windows 以外のビルドではすでにそうなっているように、MSVC ビルドでも、3.0 より新しいバージョンの bison では "-Wno-deprecated" を使用するようになりました。  (Andrew Dunstan) (12)(11)(10)(9.6)(9.5)</li>
<li>タイムゾーンデータファイルが tzdata release 2020a に更新されました。モロッコとカナダのユーコンの DST法の変更と上海の歴史的な修正が含まれます。   (12)(11)(10)(9.6)(9.5)</li>
<p>
America/Godthabゾーンは、現在の英語の使用法を反映するために America/Nuuk に名称変更されました。変更前の名前も互換性のために利用可能なままです。
</p>
<p>
また、initdb の既知の Windowsタイムゾーン名のリストが最近追加されたものを含むように更新され、そのプラットフォーム上のシステムのタイムゾーン設定が正しく翻訳される可能性が高まりました。
</p>
<li>パーティショニングされたテーブルで、制約違反エラーが発生した後に低頻度で発生するクラッシュが修正されました。  (Andres Freund) (11)(10)</li>
<li>nextXid がスタンバイサーバ上で後戻りしないようになりました。  (Eka Palamadai) (11)(10)(9.6)(9.5)</li>
<p>
この競合状態により、誤ったホットスタンバイフィードバックメッセージがプライマリサーバに送り返される可能性があり、VACUUM がプライマリ上ですぐに実行されてしまう可能性がありました。
</p>
<li>共有ライブラリのビルドする時に CXXFLAGS に CFLAGS_SL を含めるようになりました。  (Oleksii Kliukin) (10)</li>
<p>
これにより、必要に応じて "-fPIC" を追加するなど、C++ のソースファイルが正しくコンパイルされるようになります。11.x以降バージョンでは既にそのようになっています。
</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.2 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/12-2/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 28 Feb 2020 05:17:21 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 12]]></category>
		<category><![CDATA[PostgreSQL 12.1]]></category>
		<category><![CDATA[PostgreSQL 12.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=5717</guid>

					<description><![CDATA[このリリースは 12.1 からの修正リリース（2020年2月13日リリース）です。12.x からのアップデートではダンプ、リストアは不要です。ただし、パーティションテーブルに対する制約については、バージョンアップ後のデー ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 12.1 からの修正リリース（2020年2月13日リリース）です。12.x からのアップデートではダンプ、リストアは不要です。ただし、パーティションテーブルに対する制約については、バージョンアップ後のデータ補正が必要です。2番、3番の項目を確認してください。</p>
<p><span id="more-5717"></span></p>
<h3>PostgreSQL 12.1 から 12.2 への変更点</h3>
<p>12.2、11.7、10.12、9.6.17、9.5.21、9.4.26 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>欠けていた ALTER ... DEPENDS ON EXTENSION 文の権限検査が追加されました。(CVE-2020-1720)  (&Aacute;lvaro Herrera) (12)(11)(10)(9.6)</li>
<p>
関数、プロシージャ、トリガ、マテリアライズドビュー、インデックスに対する本SQL文について修正が行われました。本SQL文はデータベースオブジェクトが拡張に依存していると印付けするものです。依存関係があると、拡張を DROPする際にそのデータベースオブジェクトも削除されます。
</p>
<p>
本SQLの実行際して何ら権限チェックが行われていませんでした。そのため、拡張を削除できるユーザは権限の無いオブジェクトを削除可能でした。また、管理者が拡張を削除する際に権限の無いオブジェクトを削除させるように仕組むことができました。
</p>
<p>
本SQLの実行には対象オブジェクトの所有者であることが要求されるように修正されました。
</p>
<li>TRUNCATE ... CASCADE が関連する全てのパーティションを確実に空にするように修正されました。  (Jehan-Guillaume de Rorthais) (12)</li>
<p>
パーティションテーブルのパーティションが CASCADEオプション付きでTRUNCATEされた場合で、かつ、パーティションテーブルが他テーブルからの外部キー参照を持っていた場合、参照しているテーブルも空にされるべきです（通常のテーブルもそのように動作します）。参照しているテーブルがパーティションテーブルである場合に検査に取りこぼしがあり、外部キー制約違反の行が残る可能性がありました。
</p>
<p>
このため、データベースにパーティションテーブル間の外部キー制約があり、これまでに被参照テーブルにパーティション単位で TRUNCATE を行っていたなら、外部キー違反が無いかを確認することを推奨します。
</p>
<p>
最も簡単な確認方法は新たに同定義の外部キー制約を加えることです（確認用なので追加に成功したら、削除します）。ロック取得の観点から、これが実施しにくい場合には、SELECT文で制約違反の行を探してください。
</p>
<li>外部キー制約が追加した副パーティションに付加されない障害が修正されました。  (Jehan-Guillaume de Rorthais) (12)</li>
<p>
複数階層パーティションテーブルの第二階層以下にパーティションをアタッチするとき、そのパーティションテーブルを参照する外部キー制約が新たなパーティションに複製されず、その結果、後で制約違反を引き起こす可能性がありました。
</p>
<p>
簡単な修復方法は、そのパーティションをデタッチしてアタッチすることです。修復すべきパーティションが大量にある場合には、新たに同定義の外部キー制約を追加する方法が良いでしょう。
</p>
<li>パーティションテーブルまたは継承ツリーで同時更新中にクラッシュが生じる可能性があり、修正されました。  (Tom Lane) (12)</li>
<li>パーティションテーブルの行トリガが適時に正しく副パーティションに複製されるように修正されました。  (&Aacute;lvaro Herrera) (12)(11)</li>
<p>
（外部キー制約やユニーク制約のトリガではなく）ユーザ定義トリガについて、パーティションの作成やアタッチをするときに取りこぼしが生じるおそれがありました。
</p>
<li>ロジカルレプリケーションのサブスクライバ側のコードが、適時に列ごとの UPDATEトリガを実行するように修正されました。  (Peter Eisentraut) (12)(11)(10)</li>
<p>
このようなトリガが実行されないことがありました。
</p>
<li>大きいトランザクションを多数の分割された一時ファイルに書き出ししなければならないときの、ロジカルデコーディングでのエラーが回避されました。  (Amit Khandekar) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
ファイル識別子を使いすぎて、以下のようなエラーが出るケースが報告されていました。
</p>
<pre>
ERROR:  exceeded maxAllocatedDescs (492) while trying to open file "pg_replslot/logical/xid-2362-lsn-0-24000000.spill"
</pre>
<li>ロジカルレプリケーションのサブスクライバが行更新を処理するときに、クラッシュやデータ破損の可能性があり、修正されました。  (Tom Lane, Tomas Vondra) (12)(11)(10)</li>
<p>
本障害は、サブスクライバのテーブルがパブリッシャからコピーされていないリファレンス渡しのデータ型の列を含む場合に限って、顕在化した問題を発生させます。
</p>
<p>
text や numeric など格納サイズが大きいデータ型はリファレンス渡しです。ビルドオプションによっては int8 や float8 もリファレンス渡しになります。
</p>
<li>ロジカルレプリケーションのサブスクライバのクラッシュが修正されました。サブスクライブしているテーブルで DDL変更（ALTER TABLE）をした後にクラッシュが発生しました。  (Jehan-Guillaume de Rorthais, Vignesh C) (12)(11)(10)</li>
<li>ロジカルレプリケーションのパブリッシャにおける、データベースがクラッシュ終了して再起動した後に起きるアサートエラーが修正されました。  (Vignesh C) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>物理レプリケーションスロットにおいて pg_replication_slot_advance() の効果が再起動後も維持されるようになりました。  (Alexey Kondratov, Michael Paquier) (12)(11)</li>
<li>REPLICA IDENTITY FULL を用いたロジカルレプリケーションの効率が改善されました。  (Konstantin Knizhnik) (12)(11)(10)</li>
<p>
更新や削除の操作に際して、既存タプルを探すときに最初に一致したタプルを返すようになりました。これまでは全てを調べる動作になっていました。
</p>
<li>ベースバックアップが INT32_MAX より大きいデータベースの OID を扱えるように修正されました。  (Peter Eisentraut) (12)</li>
<p>
大きい OID値を持つデータベースがあるときに、以下のようなエラーが報告されていました。
</p>
<pre>
pg_basebackup: error: could not get write-ahead log end position from server: ERROR:  value "3000000000" is out of range for type integer
</pre>
<li>常に適切なタイミングでパラレルプランノードが終了(shutdown)されるようになりました。   (Kyotaro Horiguchi) (12)(11)</li>
<p>
この障害は、複数バッチの（即ち、件数が多くてメモリに載らない場合の）パラレルハッシュ結合の際に、以下のような予期せぬ警告を発生させました。
</p>
<pre>
WARNING:  temporary file leak: File 15 still referenced
</pre>
<li>Limitノードの下の Gather または GatherMerge プランノードの早すぎる終了(shutdown) が防止されました。  (Amit Kapila) (12)(11)(10)(9.6)</li>
<p>
これにより、入れ子ループの内側にある等、このようなプランノードを複数回スキャンする必要がある場合の障害を回避します。本障害でクラッシュする動作が報告されました。
</p>
<li>多コアCPU でのパラレルハッシュ結合の効率が改善されました。  (Gang Deng, Thomas Munro) (12)(11)</li>
<p>
無駄な処理を削って、それによる CPUキャッシュ間の同期処理の発生を回避します。
</p>
<li>パラレル CREATE INDEX での動的共有メモリスロットの空きが無いときのクラッシュが回避されました。  (Thomas Munro) (12)(11)</li>
<p>
そのような場合には非パラレルのインデックス作成が行われるようになります。
</p>
<li>動的共有メモリスロットが無いときのメモリリークが修正されました。  (Thomas Munro) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
以下のエラーが発生する場合にリークが発生しました。
</p>
<pre>
ERROR: too many dynamic shared memory segments
</pre>
<li>一時テーブルに対するインデックス作成、削除、再構築時にCONCURRENTLYオプションを無視するようになりました。  (Michael Paquier, Heikki Linnakangas, Andres Freund) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これにより一時テーブルが ON COMMITアクションを持っていた場合の奇妙なエラーを回避します。以下のような発生ケースが報告されました。
</p>
<pre>
=# CREATE TEMP TABLE t0(c1 INT PRIMARY KEY) ON COMMIT DELETE ROWS;
=# REINDEX TABLE CONCURRENTLY t0;
ERROR:  index "t0_pkey_ccnew" already contains data
</pre>
<p>
他のセッションは一時テーブルにアクセスできないため、一時テーブルに対するインデックス作成で CONCURRENTLY を使う利点はありません。
</p>
<li>ON COMMIT DELETE ROWS を伴う一時テーブルに対する式インデックスをコミット時にリセットするときに起こりうる誤動作が修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>box型、範囲型、inet型に対する BRINインデックスの操作でクラッシュの可能性があり、修正されました。  (Heikki Linnakangas) (12)(11)(10)(9.6)(9.5)</li>
<li>GiSTインデックス作成での再帰的なページ分割中に起きるクラッシュが修正されました。  (Heikki Linnakangas) (12)</li>
<li>GINインデックスで削除済みページの処理が修正されました。  (Alexander Korotkov) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
本障害ではデッドロックや、削除済みページの誤った状態更新、最近に削除されたページを辿る動作の失敗、を起こす可能性があり、これらが回避されました。
</p>
<li>複数行の VALUESリスト内の SubPlan（副SELECT）でクラッシュの可能性があり、修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
一例として、以下のような形状の問い合わせが該当します。
</p>
<pre>
SELECT * FROM (
 SELECT * FROM (
  VALUES ('A'::text NOT IN (
   SELECT 'E'::text AS col_1 FROM (
    VALUES (NULL), (NULL), (NULL), (NULL)) AS tab_1 (col_2)
     WHERE false),
   NULL, 'B'::text, 3::int),
  (false, 4::int, 'B'::text, 0::int)) AS tab_3 (col_4, col_5, col_6, col_7)
 WHERE tab_3.col_4) AS tab_8 ORDER BY 1, 2, 3, 4;
</pre>
<li>ALTER TABLE で、GENERATED句の式で参照されている列が、同じ ALTER文中の手前で追加されたり型変更されている場合のエラーが修正されました。  (Tom Lane) (12)</li>
<p>
例えば以下のような操作でエラーが発生していました。
</p>
<pre>
db=# CREATE TABLE t25 (a int, b int, c int, x int);
db=# INSERT INTO t25 VALUES (1, 1, 1, 1), (2, 2, 2, 2);
db=# ALTER TABLE t25
       DROP COLUMN x,
       ALTER COLUMN a TYPE bigint,
       ALTER COLUMN b TYPE bigint,
       ADD COLUMN x bigint GENERATED ALWAYS AS ((a + b) * 2) STORED;
ERROR:  attribute 1 of type t25 has wrong type
DETAIL:  Table has type integer, but query expects bigint.
</pre>
<li>タプル変換時に、失った属性に対するデフォルト値の挿入に失敗していたものが修正されました。  (Vik Fearing, Andrew Gierth) (12)(11)</li>
<p>
この障害で、定数デフォルトを伴う ALTER TABLE .. ADD COLUMN で追加された列の値が誤って NULL と読み取られる可能性がありました。
</p>
<p>
タプル変換とは行データをレコード型に代入するときなどに必要となる内部処理です。
</p>
<li>チェックポイント処理にて、削除されているかもしれないリレーションのセグメントを開くことで、稀に PANIC になる可能性があり、修正されました。  (Thomas Munro) (12)</li>
<li>FileClose() 失敗後におきるクラッシュが修正されました。  (Noah Misch) (12)(11)(10)</li>
<p>
この問題は data_sync_retry = on の場合のみ該当します。off の場合には FileClose() 失敗は（仕様通りに）PANIC になるはずです。
</p>
<li>外部テーブルに対する複数の AFTER ROW トリガの処理が修正されました。  (Etsuro Fujita) (12)</li>
<p>
トリガを駆動されたときにアサートエラーが生じる動作が報告されました。
</p>
<li>リファレンス渡しのデータ型の集約関数の遷移状態でクラッシュの可能性があり、修正されました。  (Andres Freund, Teodor Sigaev) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
PL/pgSQL関数を使ってユーザ定義した集約関数を実行したときにアサートエラーが生じるケースが報告されました。
</p>
<li>to_date() と to_timestamp() のエラー報告が改善されました。  (Tom Lane, &Aacute;lvaro Herrera) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
入力文字列中の誤った月や曜日に関するエラー報告が、誤った部分を示すときマルチバイト文字の途中で切り出すことがあり、続くエラーの元になる不適切なエンコードのエラーメッセージをもたらしました。
</p>
<p>
これを回避するため、次の空白文字までを切り出し範囲とするようになりました。
</p>
<li>紀元前の日付に対する EXTRACT(ISOYEAR FROM timestamp) に一年ずれた結果を返す誤動作があり、修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<pre>
（障害動作例: B.C. 7年について -7 を返すのが正しい動作）
db=# SELECT EXTRACT(ISOYEAR FROM 'Feb 03 04:05:06 0007 PST BC'::timestamp);
 date_part
-----------
        -6
(1 row)
</pre>
<li>char型に対する &lt;&gt; 演算子があいまいな照合順序のエラーを適切に報告するようになりました。  (Tom Lane) (12)</li>
<p>
以下のように、どの照合順序を使って処理すべきか判別できない場合に、予期せぬエラーメッセージや、アサートエラーが出ていました。
</p>
<pre>
db=# CREATE TABLE t33 (c0 char(2) COLLATE "C", c1 char(2) COLLATE "POSIX");
db=# INSERT INTO t33 VALUES ('', '');

db=# SELECT * FROM t33 WHERE c1 &lt;&gt; c0;
ERROR:  cache lookup failed for collation 0
（予期せぬエラー出力）

db=# SELECT * FROM t33 WHERE c1 = c0;
ERROR:  could not determine which collation to use for string comparison
HINT:  Use the COLLATE clause to set the collation explicitly.
（こちらは望ましいエラー出力）
</pre>
<li>TIDスキャンがシーケンシャルスキャンとして処理されないように修正されました。  (Tatsuhito Kasahara) (12)</li>
<p>
リファクタリングの誤りで、TIDスキャン（ctid列による選択）が実行時統計情報ビューでシーケンシャルスキャンとして数えられており、さらに、シーケンシャルスキャンのようにテーブル全体の術部ロックを取りました。後者の動作は SERIALIZABLE トランザクションモードで不要な直列化失敗エラーを引き起こす可能性がありました。
</p>
<li>システムカタログに自己参照ビューがあるときの information_schemaビューでのスタックオーバフローが回避されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
リレーションが更新可能かを調べる内部実装関数が、自己参照ビューに対して無限再帰を起こすため、そのような場合に処理を打ち切るように修正されました。
</p>
<li>walsenderプロセスが pg_stat_activity のトランザクション開始時刻に常に NULL を見せるようになりました。  (&Aacute;lvaro Herrera) (12)(11)(10)</li>
<p>
これまでは xact_start 列にプロセス開始時刻があらわれることがありました。
</p>
<li>ハッシュ結合で、内側リレーションが巨大な場合の性能が改善されました。  (Thomas Munro) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>多数の稼働中 walsenderプロセスがあるときの、スピンロック競合が軽減されました。  (Pierre Ducroquet) (12)</li>
<li>EXPLAIN の出力で "Subplans Removed" フィールドの配置が修正されました。  (Daniel Gustafsson, Tom Lane) (12)(11)</li>
<p>
テキスト以外の出力形式では、このフィールドは Plans 副グループの内側に出力されて、構文的に不正な出力になっていました。
</p>
<p>
JSON形式であれば以下のような形の不正な出力があり得ました。
</p>
<pre>
    "Plans": [
        { ..サブプラン.. },
        "Subplans Removed": 5,
        { ..サブプラン.. }
    ]
</pre>
<p>
"Subplans Removed" は親の Append や MergeAppend プランノードに付けるように修正されました。
</p>
<p>
この変更はテキスト形式にも反映されます。これまで InitPlan の下にあった Subplans Removed は、InitPlan よりも手前に現れるようになります。
</p>
<li>EXPLAIN の SETTINGS オプションが非テキストの出力フォーマットで空で出力されるように修正されました。  (Tom Lane) (12)</li>
<p>
非テキストの出力フォーマットでは、たとえ値が空やゼロであっても、各フィールドが存在することが期待されます。
</p>
<li>ユーザが問い合わせに明示的に現れるテーブルの対応する列を読める場合には、プランナが潜在的に漏洩のあるテストを子テーブル（パーティション）の統計情報に適用できるようにしました。  (Dilip Kumar, Amit Langote) (12)(11)</li>
<p>
この変更は、CVE-2017-7484 セキュリティ障害の修正で生じた、パーティションテーブルの性能問題を修正します。先のセキュリティ修正では、現在ユーザが直接には読むことのが許可されない列の統計情報に、漏洩のある演算子を適用できないようにしました。
</p>
<p>
一方で、親のパーティションテーブルのみに参照権限があって、個々のパーティションには権限が無いというのは、ごく一般的な状態です。ユーザは親のパーティションテーブルを通して、子パーティションの列を参照できます。このような場合に、先のセキュリティ修正のためにプランナの見積もりが必要以上に劣化していました。
</p>
<li>単一行副問い合わせの結合に対する積極的すぎる組み換えによって引き起こされるプランナのエラーが修正されました。  (Tom Lane) (12)</li>
<p>
この誤りは、以下のような予期せぬエラーをもたらしました。また、アサートエラーになる可能性もありました。
</p>
<pre>
（本エラーを発生させる問い合わせ例）
db=# SELECT FROM (
      SELECT FROM pg_stat_bgwriter AS r0
       LEFT JOIN pg_stat_bgwriter AS r1 ON (true), LATERAL (
        SELECT FROM pg_publication AS r2, LATERAL (
         SELECT FROM pg_class WHERE r1.buffers_alloc IS NOT NULL
         ) AS sq0 LIMIT 1) AS sq1) AS sq2;
ERROR:  failed to construct the join relation
</pre>
<li>「no = operator for opfamily NNNN」というプランナのエラーが修正されました。  (Tom Lane) (12)</li>
<p>
LIKE や正規表現のパターンマッチ演算子をバイナリ互換のインデックス演算子クラスでマッチさせようとするときに発生しました。
</p>
<pre>
（発生例: text型とバイナリ互換の char型に対応した bpchar_ops を使用しています）
db=# CREATE TABLE t43 (c text);
db=# CREATE INDEX i43 ON t43 (c bpchar_ops);
db=# SELECT * FROM t43 WHERE t43.c LIKE '';
ERROR:  no = operator for opfamily 426
</pre>
<li>範囲型に対する &lt;@ および @&gt; 演算子に対する選択度の計算で、境界ケースでのクラッシュ、または、誤った見積もりが、修正されました。  (Michael Paquier, Andrey Borodin, Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
列のプランナ統計情報と比較条件の値とが特定条件に合致する場合に問題が発生します。
</p>
<li>MVC（最頻値）の拡張統計情報を使っているときの、OR句に対するプランナの不正確な見積もりが修正されました。  (Tomas Vondra) (12)</li>
<p>
拡張統計情報が a と b の間に作られているところで、以下のような問い合わせを実行するとき、アサートエラーが出る動作が報告されました。アサート無効のときにはプランナの見積もりが不正確になります。
</p>
<pre>
SELECT * FROM t45 WHERE (a = 1) OR (b = 1) OR (c = 1)
</pre>
<li>MCV（最頻値）拡張統計情報を適用するときに、システム列を無視するようになりました。  (Tomas Vondra) (12)(11)(10)</li>
<p>
これにより以下のように、システム列を参照する問い合わせで予期せぬエラーが発生するのを防止します。
</p>
<pre>
db=# CREATE TABLE t46 (id int, c1 int, c2 int);
db=# INSERT INTO t46 SELECT g, g, g FROM generate_series(1, 1000) as g;
db=# CREATE STATISTICS s46 ON id, c1 FROM t46 ;
db=# ANALYZE t46;
db=# SELECT (ctid::text::point)[0] blkno, count(*) cn FROM t46
       GROUP BY blkno ORDER BY cn DESC LIMIT 10;
ERROR:  negative bitmapset member not allowed
</pre>
<li>BRINインデックスのロジックが、仮定の BRINインデックスに対応するように修正されました。  (Julien Rouhaud, Heikki Linnakangas) (12)(11)(10)</li>
<p>
これまでは、何らかインデックスアドバイザ拡張が仮定の BRINインデックスを伴うプランを生成させようとすると、BRINコスト見積もりコードが常にインデックスのメタページに物理的にアクセスしようするため、失敗しました。
</p>
<li>条件付き INSTEADルールを伴うビューの自動更新を使おうとするときのエラー報告が改善されました。  (Dean Rasheed) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これはサポートされていないものですが、これまでは、そのことを示すエラーがエグゼキュータによる実行時にしか出ませんでした。そのため、不明瞭なプランナのエラーで原因が隠されてしまうおそれがありました。
</p>
<p>
リライタの段階で以下のようなエラーメッセージが出るようになりました。
</p>
<pre>
db=# CREATE TABLE t48 (a int PRIMARY KEY, b text);
db=# INSERT INTO t48 VALUES (2, '2');
db=# CREATE VIEW v48 AS SELECT a, b, a AS aa FROM t48;
db=# CREATE RULE v48_upd_rule AS ON UPDATE TO v48
       WHERE OLD.a &gt; 0 DO INSTEAD UPDATE t48 SET b=NEW.b WHERE a=OLD.a;
db=# UPDATE v48 SET b = 'ROW 2' WHERE a = 2;
ERROR:  cannot update view "v48"
DETAIL:  Views with conditional DO INSTEAD rules are not automatically updatable.
HINT:  To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule.

（以下は修正前バージョン 12.1 でのエラーメッセージ）
ERROR:  no relation entry for relid 2
</pre>
<li>複合型が範囲型を通して間接的に自身に含まれることを防止しました。  (Tom Lane, Julien Rouhaud) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
元々自分自身を含む複合型は作成できない仕様でした。本修正で以下の操作がエラーになります。
</p>
<pre>
db=# CREATE TYPE two_ints AS (a int, b int);
db=# CREATE TYPE two_ints_range AS RANGE (subtype = two_ints);
db=# ALTER TYPE two_ints ADD ATTRIBUTE c two_ints_range;
ERROR:  composite type two_ints cannot be made a member of itself drop type two_ints cascade;
NOTICE:  drop cascades to type two_ints_range
（上記は修正後の動作、修正前はエラーにならない）
</pre>
<li>record のような疑似データ型を返すパーティションキーの式が禁止されました。  (Tom Lane) (12)(11)(10)</li>
<p>
そのようなパーティションテーブルに対する問い合わせで、何らかエラーやスタックオーバーフロー（ERROR:  stack depth limit exceeded）が起きる動作が報告されました。定義時点でエラーが出るようになります。
</p>
<li>インデックスを作成できないデータ型を返す式に対するインデックスの作成時のエラーメッセージが修正されました。  (Amit Langote) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
空の列名でなく自動生成した列名が出力されるようになります。
</p>
<pre>
(修正前)
=# CREATE INDEX ON t ((ROW(c)));
ERROR:  column "" has pseudo-type record

(修正後)
=# CREATE INDEX ON t ((ROW(c)));
ERROR:  column "row" has pseudo-type record
</pre>
<li>VALUESリストのみからなるマテリアライズドビューのダンプ時に、指定した列名を出力するように修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<pre>
=# CREATE MATERIALIZED VIEW mv (c) AS VALUES (1);
CREATE MATERIALIZED VIEW

(修正前のpg_dump出力)
CREATE MATERIALIZED VIEW public.mv AS
 VALUES (1)
  WITH NO DATA;

(修正後のpg_dump出力)
CREATE MATERIALIZED VIEW public.mv AS
 SELECT "*VALUES*".column1 AS c
   FROM (VALUES (1)) "*VALUES*"
  WITH NO DATA;
</pre>
<li>ビューまたはルールの依存関係の計算時に xmltable関数で参照されているデータ型と照合順序を考慮するように修正されました。  (Tom Lane) (12)(11)(10)</li>
<p>
修正前は、xmltable関数で参照されているデータ型や照合順序を削除することで、ビューやルールを壊すことができました。この修正は新たに作成したビューとルールに適用され、既存のものには適用されません。
</p>
<pre>
=# CREATE EXTENSION seg;
=# CREATE TABLE t53 AS SELECT '&lt;s&gt;1 .. 2&lt;/s&gt;'::xml AS c;
=# CREATE VIEW v53 AS SELECT s::text FROM t53, xmltable('//s' PASSING c COLUMNS s seg);

(修正前)
=# DROP EXTENSION seg;
DROP EXTENSION
=# SELECT * FROM v53;
ERROR:  cache lookup failed for type 16499

(修正後)
=# DROP EXTENSION seg;
ERROR:  cannot drop extension seg because other objects depend on it
DETAIL:  view xmlview depends on type seg
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
</pre>
<li>RADIUS認証のオプションのパラメータ値に対して、小文字への変換と63バイトへの切り詰めを行わないように修正されました。  (Marcos David) (12)(11)(10)</li>
<p>
修正前はパラメータ値を誤って SQL識別子として処理していました。
</p>
<li>受信した NOTIFYメッセージを ReadyForQuery 送信後でなく送信前にクライアントに送信するように修正されました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<p>
この修正により、libpq のようなクライアントライブラリでは、トランザクション内で受信した通知をクライアントがトランザクション完了と判断するまで受信可能になります。実際には通知を非同期で受信する必要があるため、動作の違いはおそらくありません。ただ、セッションをまたがる通知のテストケースを作成するのに便利です。
</p>
<li>GSSAPI暗号化使用時のノンブロッキングI/O処理のバグが修正されました。  (Tom Lane) (12)</li>
<p>
この誤りにより、データが損失したり、それに伴って接続が切断したり、データを残して送信が完了したと判断してスリープ状態となったりする可能性があります。さらに、libpq では接続ごとに暗号化状態を管理できなかったため、複数の暗号化接続を使用する場合にエラーが発生する可能性があります。
</p>
<li>ビルド時に GSSAPI が無効の場合にも libpq が GSS 関連の接続パラメータを解析するように修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
この修正により、SSL と同様に機能が無効の場合でも、関連するすべてのパラメータを常に受けつけるようになります。
</p>
<li>ECPG の PGTYPEStimestamp_fmt_asc() 関数で、%b、%B 書式指定時の誤った処理が修正されました。  (Tomas Vondra) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
%b、%B は月の略称、名称に置換されますが、修正前は、1 始まりの月数を 0始まりの月名の配列の添字に使用しており、11月までは翌月の月名に置換され、12月はクラッシュする可能性がありました。
</p>
<li>ecpglib でメモリ不足によるエラー発生後にクラッシュが発生しないように修正されました。  (Tom Lane) (12)</li>
<li>並列の pg_dump や pg_restore でワーカプロセスの作成に失敗した場合にクラッシュや無限ループが発生しないように修正されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>pg_dump や pg_restore の並列実行をシグナルを介して終了しようとしたときに、クラッシュまたはハングアップが発生する可能性があり、防止されました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>pg_upgrade で、テーブル内のアップグレードできないデータ型を調べるときに、配列と範囲のベースとなるデータ型を調べるようになりました。  (Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
複合型やドメインには対応していましたが、これらについて見逃されていました。
</p>
<li>createuser の --connection-limit オプションの引数に、より厳格な構文チェックを適用するようになりました。  (&Aacute;lvaro Herrera) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<li>より多くの場合で、PL/pgSQL の複合型変数によって参照される指定型の変更に対応できるになりました。  (Ashutosh Sharma, Tom Lane) (12)(11)</li>
<p>
PL/pgSQL の変数によって参照される複合型やテーブルを削除して再作成したとき、以下のようなエラーが生じることがありました。
</p>
<pre>
ERROR:  could not open relation with OID 34567
</pre>
<li>postgres_fdw で「UPDATE remote_tab SET (x, y) = (SELECT ...) 」などのコマンドをリモートサーバに送信しようとするときに、クラッシュしないようになりました。  (Tom Lane) (12)(11)(10)(9.6)</li>
<li>contrib/dict_int で、1 未満の maxlen 設定を拒否するようになりました。  (Tomas Vondra) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これにより、そのパラメータの無意味な設定によるクラッシュを防止します。
</p>
<li>contrib/tablefunc の crosstab() 関数で NULL のカテゴリ値を許可しないようになりました。  (Joe Conway) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
このケースは役に立たず、一部のプラットフォームではクラッシュしました。
</p>
<li>OpenSSL の SSL_clear_options() 関数に対する configure の調査を修正して、1.1.0 より前の OpenSSLバージョンで動作するようになりました。  (Michael Paquier, Daniel Gustafsson) (12)(11)</li>
<p>
この問題により、PostgreSQL が古いバージョンの OpenSSL で構築されている場合、SSL圧縮オプションを必要に応じて設定できなくなる可能性がありました。
</p>
<li>いくつかのタイムアウトおよび統計情報収集の設定パラメータの変数をPGDLLIMPORT としてマークし、拡張機能が Windows でそれらにアクセスできるようになりました。  (Pascal Legrand) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これは、idle_in_transaction_session_timeout、lock_timeout、statement_timeout、track_activities、track_counts、およびtrack_functions に適用されます。
</p>
<li>slabメモリコンテキストの健全性チェックでメモリリークを回避するようになりました。  (Tomas Vondra) (12)(11)(10)</li>
<p>
プロダクションビルドでは通常、メモリコンテキストチェックが有効にならないため、これは問題ではありません。ただし、デバッグビルド（--enable-cassert や-DUSE_VALGRIND）ではリークが非常に深刻になる可能性があります。
</p>
<li>LWLock 統計情報メカニズムによって報告された複数の統計情報エントリが修正されました。  (Fujii Masao) (12)(11)(10)</li>
<p>
LWLock 統計情報のコード (デフォルトではビルドされません。-DLWLOCK_STATSを使用してコンパイルする必要があります) は、ハッシュテーブルキーの作成が失敗した結果、同じ LWLock およびバックエンドプロセスの複数のエントリを報告する可能性がありました。
</p>
<li>Windows でプロセス間シグナルの配信が遅延する原因となった競合状態が修正されました。  (Amit Kapila) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これは、NOTIFY で目に見えるタイミングの異常を引き起こし、おそらく他の誤動作も引き起こしました。
</p>
<li>Windows の ReadFile() 関数からのまれなエラー結果の処理が修正されました。  (Thomas Munro, Juan Jos&eacute; Santamar&iacute;a Flecha) (12)</li>
<p>
知られている限り、この見落としは、実際のクエリの誤動作ではなく、不要な情報を含む以下のようなログメッセージをもたらしました。
</p>
<pre>
LOG:  unrecognized win32 error code: ...
</pre>
<li>Windows で、ERROR_ACCESS_DENIED でファイルアクセスの失敗後に数回再試行するようになりました。  (Alexander Lakhin, Tom Lane) (12)(11)(10)(9.6)(9.5)(9.4)</li>
<p>
これは、対象ファイルに削除のフラグが設定されているが、実際には削除されていないためにファイルを開くことができない場合の対処に役立ちます。例えば、pg_ctl は、postmaster がすでに停止しているかどうかを調べるときに、以下ようなエラーでしばしば失敗しました。
</p>
<pre>
pg_ctl: could not open PID file "c:/pgsql/data/postmaster.pid": Permission denied
</pre>
<li>Windows で、例えば pg_ctl restart によって停止された直後にpostmaster を起動する場合に、postmaster のログファイルの共有違反を回避するようになりました。  (Alexander Lakhin) (12)</li>
</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>
