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

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>PostgreSQL 9.6.14 &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQL 9.6.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-6-15/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 22 Aug 2019 01:02:01 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.6]]></category>
		<category><![CDATA[PostgreSQL 9.6.14]]></category>
		<category><![CDATA[PostgreSQL 9.6.15]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=3771</guid>

					<description><![CDATA[このリリースは 9.6.14 からの修正リリース（2019年8月8日リリース）です。 9.6.x からのアップデートではダンプ、リストアは不要です。 9.6.9 より前のバージョンからのアップデートの場合には 9.6.9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.6.14 からの修正リリース（2019年8月8日リリース）です。</p>
<p>9.6.x からのアップデートではダンプ、リストアは不要です。<br />
9.6.9 より前のバージョンからのアップデートの場合には <a href="/tech-blog/pgsql/9-6-9/">9.6.9 のリリース情報</a>も確認してください。</p>
<p><span id="more-3771"></span></p>
<h3>PostgreSQL 9.6.14 から 9.6.15 への変更点</h3>
<p>11.5、10.10、9.6.15、9.5.19、9.4.24 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>関数風のキャスト構文を使うとき、一時データ型へのキャストではスキーマ修飾を必須とするようになりました。(CVE-2019-10208) (Noah Misch) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
一時関数の発効には長らく、pg_temp.func_name(args) という明示的な一時スキーマの指定が必要でした。これは、pg_temp.type_name(arg) と関数風の構文を使って一時データ型にキャストする場合も同様に必要です。そうでないと一時オブジェクトを使って関数呼び出しを横取りすることができて、8.2.4バージョンで防止された CVE-2007-2138 の脆弱性と同様の方法で、権限拡大を狙うことが可能でした。
</p>
<p>
一時スキーマとは一時オブジェクトのためのスキーマです。pg_temp_1 など番号を伴う名前が自動付与されますが、指定する場合には pg_temp という名前で代表させることができます。また、search_path に明示的な pg_temp の指定が無いと一時スキーマは優先して選択されます。
</p>
<p>
本修正後は、以下例の最初の型キャストは使用できず、型キャストのための処理に進む前にエラーになります（後者の 2つもエラーですが、これらは型キャスト処理が働いた結果のエラーです）。
</p>
<pre>db=# CREATE DOMAIN pg_temp.nonempty AS text CHECK (VALUE &lt;&gt; '');

db=# SELECT nonempty('');
ERROR:  function nonempty(unknown) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

db=# SELECT pg_temp.nonempty('');
ERROR:  value for domain nonempty violates check constraint "nonempty_check"

db=# SELECT ''::nonempty;
ERROR:  value for domain nonempty violates check constraint "nonempty_check"
</pre>
<li>型を跨る比較を要するハッシュ化された副プランの実行が修正されました。(CVE-2019-10209) (Tom Lane, Andreas Seltenreich) (11)</li>
<p>
ハッシュ化された副プランは、ハッシュ要素を比較するために外側の問い合わせの元の比較演算子を使用していました。その演算子が型を跨る場合は、全てのハッシュ要素が副問い合わせの出力型になるので、これは誤りでした。PostgreSQL本体に含まれるハッシュ可能な型を跨る演算子に対して、64bitマシンでは、この誤りはほぼ無害です。しかし、32bitマシンでは、クラッシュやサーバメモリの不当なデータ露出になる可能性があります。
</p>
<p>
以下の問い合わせは = 演算子が text型と副問い合わせからの name型（外側と異なるデータ型）との間で適用され、副問い合わせ結果が「hashed SubPlan 1」として扱われるので、問い合わせの形状としては本問題に該当します。
</p>
<pre>explain (verbose)
  SELECT 'foo'::text IN (SELECT 'bar'::name UNION ALL SELECT 'bar'::name);
</pre>
<p>
拡張モジュールが、より大きなリスクをもたらすハッシュ可能な型を跨る演算子を提供しているかもしれません。
</p>
<li>複数列の型を1つのコマンドで変更するとき、ALTER TABLE ... ALTER COLUMN TYPE が失敗する動作が修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これは一つ前のマイナーリリースで混入した障害です。変更された列のインデックスが適切に処理されていませんでした。
</p>
<p>
インデックスを持つ列をいくつかデータ型変更する ALTER TABLE に対して、以下のエラーになる動作が報告されました。
</p>
<pre>ERROR:  relation "《インデックス名》" already exists
</pre>
<li>子パーティションに保留中のトリガイベントがある場合には、パーティションテーブルのトリガを削除できないようになりました。 (Álvaro Herrera) (11)</li>
<p>
特にトリガで実現されている外部キー制約で該当します。
</p>
<p>
本修正前には、トランザクションのコミット時に処理すべきトリガが削除されてしまったことで COMMIT時にエラーが生じる可能性がありました。
</p>
<pre>（例）
db=# CREATE TABLE t4_1(f1 int primary key);
db=# CREATE TABLE t4_2(f1 int REFERENCES t4_1 DEFERRABLE INITIALLY DEFERRED)
       PARTITION BY RANGE (f1);
db=# CREATE TABLE t4_2_p1 PARTITION OF t4_2 FOR VALUES FROM (0) TO (10);
db=# INSERT INTO t4_1 VALUES (1);
db=# BEGIN;
db=# INSERT INTO t4_2 VALUES (1);
db=# ALTER TABLE t4_2 DROP CONSTRAINT t4_2_f1_fkey;
（修正後はここで以下のようなエラーが生じる）
ERROR:  cannot ALTER TABLE "t4_2" because it has pending trigger events
db=# COMMIT;
（修正前はここで以下のようなエラーが生じる）
ERROR:  relation 16123 has no triggers
</pre>
<li>パーティションテーブルから属するパーティションにトリガ定義をコピーする際に、ユーザ指定のトリガ引数が含まれるようになりました。 (Patrick McHardy) (11)</li>
<p>
本修正前は「CREATE TRIGGER ... EXECUTE FUNCTION my_trigger_func('my params', 123);」などとして付与した引数が欠落してコピーされていました。
</p>
<li>パーティションのキー列の削除を防止する依存性が導入されました。 (Tom Lane) (11)(10)</li>
<p>
ALTER TABLE ... DROP COLUMN はパーティションキーである列の削除を拒絶します。しかしながら、間接的な削除（キー列のデータ型をカスケード削除する場合など）では、このようなチェックが働かず、キー列の削除を許していました。この結果、パーティションテーブルが壊れて、アクセスも削除もできなくなるおそれがありました。
</p>
<p>
本修正は、キー列の削除を要するカスケード削除の際にはパーティションテーブル全体を削除するという要素を pg_depend に追加します。これはパーティションテーブルが作られるときに追加されます。したがって、バージョンアップ前に作られた既存パーティションテーブルでは、キー列のみ削除されてしまうリスクが残ります。
</p>
<p>
この問題は組み込みのデータ型のパーティションキー列では発生しません。したがって、大部分のユーザには無害であると考えられます。
</p>
<li>パーティションテーブルとそのデフォルトパーティションの間で列番号が確実に正しく対応付けされるようにしました。 (Amit Langote) (11)</li>
<p>
デフォルトパーティションでのみ一部の列を削除してあるなど、列が1対1対応でない場合に誤動作することがありました。
</p>
<p>
その後の有効なパーティションテーブルに対する操作（パーティション追加など）で、以下のようなエラーが生じる可能性がありました。
</p>
<pre>ERROR:  attribute 4 of type t7_partition_1 has been dropped
</pre>
<li>インデックスをパーティションテーブル全体に作成するときに、外部テーブルである所属パーティションを無視するようになりました。 (Álvaro Herrera) (11)</li>
<p>
これまではインデックスを作成しようとしたり、インデックスのあるパーティションテーブルに外部テーブルをアタッチするときに、以下のようなエラーが発生していました。
</p>
<pre>ERROR: cannot create index on foreign table "t8_parted"
</pre>
<p>
これからは外部テーブルのパーティションについては単にインデックスが作られない動作になります。ただし、ユニークインデックスである場合には例えば以下のようなエラーになります。
</p>
<pre>ERROR: cannot create unique index on partitioned table "t8_parted"
</pre>
<li>より多くの場合にパーティションテーブルのデフォルトパーティションが検索時にスキャン対象から除外できるようになりました。 (Yuzuko Hosoya) (11)</li>
<li>RANGEパーティションで boolean型の複数パーティションキー列があるときに検索でのパーティション除外に失敗する可能性があり、修正されました。 (David Rowley) (11)</li>
<li>対象のテーブルが継承親テーブルであるときには、GROUP BY列を最適化で消し去らないようになりました。 (David Rowley) (11)(10)(9.6)</li>
<p>
通常、テーブルの主キー列が GROUP BY に含まれる場合は他のグループ化列を安全に除去することができます。主キー列でグループを特定できるからです。しかし、継承テーブルを読む場合には、親子テーブル間、子テーブル間をまたがるユニーク性は保証されないため、この最適化は使えません。
</p>
<p>
以下の誤動作が報告されました。最後の SELECT は 2行が返るのが正しい動作です。実行プランで c1列がグループ化対象から外れてしまっていました。
</p>
<pre>db1=# CREATE TABLE t11  (c0 INT PRIMARY KEY, c1 INT);
db1=# CREATE TABLE t11c (c0 INT) INHERITS (t11);
db1=# INSERT INTO t11  (c0, c1) VALUES (0, 0);
db1=# INSERT INTO t11c (c0, c1) VALUES (0, 1);
db1=# SELECT c0, c1 FROM t11 GROUP BY c0, c1;
 c0 | c1
----+----
  0 |  0
(1 row)
</pre>
<li>semi-join問い合わせに対する並列ハッシュの誤使用が回避されました。 (Thomas Munro) (11)</li>
<p>
この障害により、一部の EXISTS問い合わせからの結果行が重複し、誤った結果が返ります。
</p>
<li>GROUPING SETSを伴う一部の問い合わせに対して、不要なソート処理の使用が回避されました。 (Andrew Gierth, Richard Guo) (11)(10)(9.6)(9.5)</li>
<p>
修正前も、処理が非効率にはなりますが、問い合わせ結果は正しいです。
</p>
<li>プランナがインデックス端点を調べるのに失敗する可能性があり、修正されました。 (Tom Lane) (11)</li>
<p>
PostgreSQLのプランナはインデックスを使って値の最大値、最小値を調べる動作をすることがあります。
</p>
<p>
プランナが列の最小値や最大値を知るために最近に作られたインデックスを使うとき、最近に無効になった実際には端点値を含まないタプルを誤って選択してしまう可能性がありました。
</p>
<p>
誤選択したタプルには NULL が入っているかもしれず、最悪の場合は、以下のエラーになります。
</p>
<pre>ERROR: found unexpected null value in index ...
</pre>
<p>本障害でよくある挙動は、誤った値が使われてプラン作成におけるデータ推測の品質が劣化することです。</p>
<li>EvalPlanQual の再チェックにおいて、トリガの遷移テーブルにアクセスするのに失敗していたものが修正されました。 (Alex Aktsipetrov) (11)(10)</li>
<p>
遷移テーブルを使った処理で以下のエラーが出るケースが報告されました。</p>
<pre>ERROR:  executor could not find named tuplestore "《NEW遷移テーブル》"
</pre>
<p>
EvalPlanQual処理は、READ COMMITTEDトランザクション隔離モードでの行の更新で使われる内部的な仕組みです。
</p>
<li>外部キー制約を再構築するときの複数列の外部キーの誤った処理が修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
外部キーの全列が同じデータ型でない場合に、ALTER TABLEが外部キーの再検証が必要かどうかの判断を誤る可能性がありました。この判断の誤りは常に保守的な方向で、再検証が不要なものを必要と判断すると見られます。したがって、不要な処理による性能上のバグと言えます。
</p>
<li>継承ツリーに対して拡張統計情報を作らないようになりました。 (Tomas Vondra) (11)(10)</li>
<p>
これにより、ANALYZE の際に以下のエラーが出るのを回避します。
</p>
<pre>ERROR:  tuple already updated by self
</pre>
<li>タプルロックを格上げする際の偽性のデッドロックエラーが回避されました。 (Oleksii Kliukin) (11)(10)(9.6)</li>
<p>
複数のトランザクションがトランザクションT1 が行ロックを解放するのを待っていて、T1 がそのロックレベルを格上げするとき、T1終了時に待っているトランザクションの間で偽性の（実際にはデッドロックではない）デッドロックが報告されました。
</p>
<p>
ここでのロックレベルの格上げとは、「SELECT ... FOR KEY SHARE」 の行ロックを取得している行に対して、次に「UPDATE ...」を行う場合などを指します。
</p>
<li>複数のパラレルワーカプロセスに関わるデッドロック解決の失敗が修正されました。 (Rui Hai Jiang) (11)(10)(9.6)</li>
<p>
本障害に該当した場合、デッドロック状態がデッドロックエラーにならず、問い合わせがキャンセルされるまで処理がブロックされてしまいます。
</p>
<p>
本障害が人工的な問い合わせ以外で発生するのかは明らかではありません。通常パラレルワーカがリーダプロセスで取得済みのロック以外を必要とすることは無いため、実際には問題はほぼ起きないと考えられます。
</p>
<li>端点に infinity や -infinity を持つ日付範囲の誤った標準化が防止されました。 (Laurenz Albe) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
範囲データ型は、ある値以上である値より小さいという半開区間になるように境界値を標準化させます。これを誤って無限値（infinity、-infinity）に対しても同様に試みていました。無限値の場合には干渉しないようになりました。
</p>
<p>
修正前は以下のような奇妙な振る舞いが生じていました。
</p>
<pre>db1=# SELECT '[-infinity,infinity]'::daterange @&gt; '-infinity'::date "include?";
 include?
----------
 t
(1 row)

db1=# SELECT '[-infinity,infinity]'::daterange @&gt; 'infinity'::date "include?";
 include?
----------
 f
(1 row)

db1=# SELECT '[-infinity,infinity]'::daterange;
      daterange
----------------------
 [-infinity,infinity)
(1 row)
</pre>
<li>大きい money型の値を numeric型に変換するときの端数の損失が修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
money型の最大値（あるいは負の最小値）に近い値で以下のように不正確な変換が生じる可能性がありました。
</p>
<pre>db=# select '-92233720368547758.07'::money, '-92233720368547758.07'::money::numeric(30,2);
           money            |       numeric
----------------------------+----------------------
 $92,233,720,368,547,758.07 | 92233720368547758.00
(1 row)
</pre>
<li>BTREE_META_CLEANUP の WALレコードの表示が修正されました。 (Michael Paquier) (11)</li>
<p>
これは pg_waldump のクラッシュをひき起こしました。
</p>
<li>version-2 の Btreeメタページに対する誤った処理によるアサート失敗が防止されました。 (Peter Geoghegan) (11)</li>
<p>
10以前のバージョンで作った Btreeインデックスがあって、それを pg_upgrade でバージョンアップした後のアクセスで問題が生じました。11 でも修正されていますが、実際にアサート失敗が起きるのは 12 の betaバージョンです。
</p>
<li>MIPS r6 で動作するように、MIPS CPUむけのスピンロックのアセンブラコードが修正されました。 (YunQiang Su) (11)(10)(9.6)(9.5)(9.4)</li>
<li>PL/pgSQL関数から返されるレコードまたは ROW値が複合型として型付けされるようになりました。 (Tom Lane) (11)</li>
<p>
これによって結果がテーブルに直接格納された場合の問題が回避されます。これまでは以下の処理でエラーが発生していました。
</p>
<pre>db=# CREATE TYPE two_int8s AS (q1 int8, q2 int8);
db=# CREATE FUNCTION compresult(int8) RETURNS two_int8s LANGUAGE plpgsql AS
       $$ DECLARE r record; BEGIN r := ROW($1,$1); RETURN r; END $$;
db=# CREATE TABLE two_int8s_tab (f1 two_int8s);
db=# INSERT INTO two_int8s_tab VALUES (compresult(42));
db=# SELECT f1 FROM two_int8s_tab;
   f1
---------
 (42,42)
(1 row)

(再接続後に実行)
db=# SELECT f1 FROM two_int8s_tab;
ERROR:  record type has not been registered
</pre>
<li>libpqライブラリで接続サービスファイル内の復帰コード(<br />
)が無視されるようになりました。 (Tom Lane, Michael Paquier) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
ごくまれな場合に、Windows形式の改行コードを含むサービスファイルが誤って解析され、接続エラーになっていました。
</p>
<li>psqlコマンドで、SET variable = の後について、variable が既知のパラメータ名でない場合にはタブ補完を行わないようになりました。 (Tom Lane) (11)(10)(9.6)</li>
<li>psql の d コマンドの軽微なメモリリークが修正されました。 (Tom Lane) (11)(10)</li>
<li>pg_dump コマンドが修正され、カスタム演算子クラスが正しい順序でダンプされるようになりました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
ユーザ定義 opclass がユーザ定義範囲型のサブタイプ opclass である場合、関連するオブジェクトが誤った順序でダンプされ、リストアできないダンプが生成されていました。
</p>
<p>
opclass の依存関係を処理する潜在的なエラーはほかのケースでも発生する可能性がありますが、これは唯一知られているケースです。
</p>
<li>-Rオプションの使用時に発生しうる pgbenchコマンドのハングアップが修正されました。 (Fabien Coelho) (11)(10)</li>
<li>contrib/amcheck のインデックス検証の信頼性が改善されました。 (Peter Geoghegan) (11)</li>
<li>contrib/jsonb_plperl で Perl の undef値の処理が修正されました。 (Ivan Panchenko) (11)</li>
<p>
NULL を Perl の undef値として扱わせて、それを jsonb に変換する場合に以下エラーが出るケースが報告されました。
</p>
<pre>ERROR:  cannot transform this Perl type to jsonb
</pre>
<li>contrib/passwordcheck が修正され、check_password_hook がほかのユーザと共存できるようになりました。 (Michael Paquier) (11)(10)(9.6)(9.5)(9.4)</li>
<li>contrib/sepgsql のテストが修正され、最近の SELinuxリリースでも動作するようになりました。 (Mike Palmiotto) (11)(10)(9.6)(9.5)(9.4)</li>
<li>src/test/kerberos および src/test/ldap のリグレッションテストの安定性が改善されました。 (Thomas Munro, Tom Lane) (11)</li>
<li>src/test/recovery のリグレッションテストの安定性が改善されました。 (Michael Paquier) (11)(10)(9.6)</li>
<li>pg_upgradeコマンドのテストスクリプトからの標準エラーへの出力が削減されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<li>pgbenchコマンドのリグレッションテストがWindows でも動作するように修正されました。 (Fabien Coelho) (11)</li>
<li>ビルドディレクトリがルート以外の msysマウントポイントにある場合でも、TAP テストが msys の Perl で動作するように修正されました。 (Noah Misch) (11)(10)(9.6)</li>
<li>Microsoft Visual Studio 2019 でのビルドに対応しました。 (Haribabu Kommi) (11)(10)(9.6)(9.5)(9.4)</li>
<li>Visual Studioビルドでは、環境変数 WindowsSDKVersion が設定されている場合、それを優先するようになりました。 (Peifeng Qiu) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これにより、VS 2017 と SDK v10 の組み合わせでビルドする際にSDK v8.1 が無いとビルドに失敗する問題が回避されます。
</p>
<li>Visual Studio ビルドで OpenSSL 1.1.0 以降に対応しました。 (Juan José Santamaría Flecha, Michael Paquier) (11)(10)(9.6)(9.5)(9.4)</li>
<li>GNU 以外の makeコマンドが最上位のディレクトリで呼び出されたときにmakeコマンドのオプションが gmakeコマンドに渡されるようになりました。 (Thomas Munro) (11)(10)(9.6)(9.5)</li>
<li>initdbコマンドの実行中に TimeZoneパラメータとして localtime または posixrules が選択されないようになりました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
場合によっては initdbコマンドは実際のゾーン名より優先して、これらの人工的なゾーン名のいずれかを選択していました。
</p>
<p>
これらの 2 つよりも C ライブラリのタイムゾーンの動作に一致するほうが優先されるようになります。
</p>
<li>pg_timezone_namesビューが調整され、短い省略形をもつ場合に限って Factoryタイムゾーンを表示するようなりました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
歴史的に IANA では、この人工的なゾーンに「Local time zone must be set--see zic manual page」のような省略形を設定します。tzdbデータベースの最新バージョンでは代わりに -00 が表示されますが、一部のプラットフォームでは何らか歴史的なフレーズを表示するためにデータを変更します。
</p>
<p>
最新の省略形が使用される場合に限ってこのタイムゾーンを表示することで、非常に長い文字列が abbrev列に出力されるのが防止されました。
</p>
<li>タイムゾーンライブラリのコピーが IANA の tzcode release 2019b と同期されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これによって zicコマンドに新しい -b slim オプションが追加され、インストールされたゾーンファイルのサイズを削減できます。現在は使用されていませんが、将来的には有効になる可能性があります。
</p>
<li>タイムゾーンデータファイルが tzdata release 2019b に更新されて、ブラジルでの夏時間規則の変更に加えて、香港、イタリア、およびパレスチナの歴史的な修正が適用されました。 (11)(10)(9.6)(9.5)(9.4)</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>
		<item>
		<title>PostgreSQL 9.6.14 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-6-14/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 04 Jul 2019 01:02:31 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.6]]></category>
		<category><![CDATA[PostgreSQL 9.6.13]]></category>
		<category><![CDATA[PostgreSQL 9.6.14]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2945</guid>

					<description><![CDATA[このリリースは 9.6.13 からの修正リリース（2019年6月20日リリース）です。 9.6.x からのアップデートではダンプ、リストアは不要です。 9.6.9より前のバージョンからのアップデートの場合には 9.6.6 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.6.13 からの修正リリース（2019年6月20日リリース）です。</p>
<p>9.6.x からのアップデートではダンプ、リストアは不要です。<br />
9.6.9より前のバージョンからのアップデートの場合には <a href="/tech-blog/pgsql/9-6-6/">9.6.6 のリリース情報</a>も確認してください。</p>
<p><span id="more-2945"></span></p>
<h3>PostgreSQL 9.6.13 から 9.6.14 への変更点</h3>
<p>11.4、10.9、9.6.14、9.5.18、9.4.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>SCRAM検証のパース処理におけるバッファオーバフロー障害が修正されました。  (Jonathan Katz, Heikki Linnakangas, Michael Paquier) (11)(10)</li>
<p>
認証を受けるユーザは誰でも、パスワードを意図的に作りこんだ値に変更することで、スタックのバッファオーバフローを起こすことができました。さらに PostgreSQLサーバをクラッシュさせることもできました。これにより PostgreSQLを実行するOSユーザで任意コードを実行できる可能性がありました。
</p>
<p>
類似のオーバフロー障害が libpq にもあり、これはよからぬサーバがクライアントをクラッシュさせたり、クライアント側OSユーザで任意コードを実行させたりできる可能性がありました。(CVE-2019-10164)
</p>
<li>実行時パーティション除外のロジックで、いくつかの誤りが修正されました。  (Tom Lane, Amit Langote, David Rowley) (11)</li>
<p>
除外に使われる比較値が（プリペアドステートメントのパラメータで）動的に決定される場合や、複数のレンジパーティション列が除外の判断に関わる場合、あるいは、STABLEな（IMMUTABLE でない）比較演算子が関わる場合に、本障害がパーティションテーブルに対する問い合わせに誤った結果をもたらすおそれがありました。
</p>
<pre>
（上記の内「複数レンジパーティション列が関与する」ときの障害動作例）
db=# CREATE TABLE t2p (a int, b int, c int) PARTITION BY RANGE (a, abs(b), c);
db=# CREATE TABLE t2p0 PARTITION OF t2p
       FOR VALUES FROM (0, 0, 0) to (0, maxvalue, maxvalue);
db=# CREATE TABLE t2p1 PARTITION OF t2p
       FOR VALUES FROM (1, 1, 1) TO (2, minvalue, minvalue);
db=# CREATE TABLE t2p2 PARTITION OF t2p
       FOR VALUES FROM (2, minvalue, minvalue) TO (3, maxvalue, maxvalue);
db=# INSERT INTO t2p VALUES (0, 1, 1), (1, 1, 1), (2, 1, 1);

（以下は 3行返るのが正しい）
db=# SELECT * FROM t2p WHERE a &lt; 3 AND abs(b) = 1;
 a | b | c
---+---+---
 1 | 1 | 1
(1 row)
</pre>
<li>新たなパーティションにトリガ定義をコピーするときにクラッシュする可能性があり、修正されました。  (Tom Lane) (11)</li>
<p>
パーティションテーブルにトリガが定義されている状態で、属するパーティションを新たに追加したときにクラッシュする動作が報告されました。
</p>
<li>テーブルが部分的な排他制約を持つ場合に、ALTER TABLE ... ALTER COLUMN TYPE ... がエラーになる動作が修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<pre>
（以下のエラー発生パターンが報告されました）
db=# CREATE TABLE t4 (id int);
db=# ALTER TABLE t4 ADD EXCLUDE USING btree (id WITH =) WHERE (id IS NOT NULL);
db=# ALTER TABLE t4 ALTER COLUMN id TYPE bigint;
ERROR:  relation "t4_id_excl" already exists
</pre>
<p>
発生するエラーは以下のようにバージョンによって様々です。「ERROR: could not open relation with OID 123456」「ERROR: cache lookup failed for relation 654321」「ERROR: relation "t4_id_excl" already exists」
</p>
<li>ドメインの制約に対するコメントでCOMMENTコマンドがエラーになる動作が修正されました。  (Daniel Gustafsson, Michael Paquier) (11)(10)(9.6)(9.5)</li>
<p>
一般ユーザで実行時に以下のような奇妙なエラーが報告されました。
</p>
<pre>
db=&gt; CREATE DOMAIN ddd AS text CONSTRAINT ccc CHECK (TRUE);
db=&gt; COMMENT ON CONSTRAINT ccc ON DOMAIN ddd IS 'test';
ERROR:  type with OID 16413 does not exist
</pre>
<li>ハッシュ集約のハッシュキーのリストに重複する列があるとき、不適切なメモリ上書きの可能性があり、防止されました。  (Andrew Gierth) (11)(10)</li>
<p>
例えば、以下の形状の問い合わせで HashAggregate が生じた場合に該当する可能性があります。
</p>
<pre>
db=# CREATE TABLE t6a (v text);
db=# CREATE TABLE t6b (v1 text, v2 text);
db=# SELECT * FROM t6b WHERE (v1, v2) IN (SELECT v, v FROM t6a);
</pre>
<li>ゼロ個または複数個の引数を伴う集約関数の部分集約における、引数の誤ったNULL検査が修正されました。  (David Rowley, Kyotaro Horiguchi, Andres Freund) (11)</li>
<p>
部分集約(Partial Aggregate)は集約をパラレル実行するときに生じるプラン要素です。パラレル実行時に単一引数でない集約関数に不正な結果が返る動作が報告されました。
</p>
<li>Merge Appendプランの誤った生成が修正されました。  (Tom Lane) (11)(10)(9.6)</li>
<p>
以下のエラーが発生する可能性があります。
</p>
<pre>
ERROR:  could not find pathkey item to sort
</pre>
<p>
SELECT DISTINCT ... FROM (SELECT ... UNION ALL SELECT ...) という形状の問い合わせで発生が報告されました。
</p>
<li>重複する結合名を伴う問い合わせの誤った出力が修正されました。  (Philip Dub&eacute;) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
この誤りで、このような問い合わせを含むビューのダンプ/リストア失敗が生じます。同様に psql の d+ コマンドでも誤った出力が生じます。
</p>
<p>
以下例の「same」が重複する結合名で、このビューは正しくダンプされません。
</p>
<pre>
CREATE TABLE t9_1 (c1 int);
CREATE TABLE t9_2 (c2 int);
CREATE TABLE t9_3 (c3 int);
CREATE TABLE t9_4 (c4 int);
CREATE VIEW v9 AS
  SELECT * FROM (
    SELECT * FROM (t9_1 CROSS JOIN t9_2) same) ss,
      (t9_3 CROSS JOIN t9_4) same;
</pre>
<li>json_to_record() と json_populate_record() で、JSON文字列リテラルからJSON型出力列への変換を修正しました。  (Tom Lane) (11)(10)</li>
<p>
エスケープを要する文字を含むリテラルで誤動作が生じていました。jsonb型むけ同様の関数では正しく動作していました。
</p>
<pre>
（エラーが発生する誤動作の例）
db=# SELECT * FROM json_to_record('{"out": "{"key": 1}"}') as x(out json);
ERROR:  invalid input syntax for type json

（正しくは以下の出力）
      out       
----------------
 "{"key": 1}"
(1 row)
</pre>
<li>正規表現で {1,1} 量指定子の誤った最適化が修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
このような量指定子は何もしないものとして最適化で無きものとされていました。しかし、{1,1}? と最短マッチ指定が付いた場合には、この最適化は不適切です。誤動作は副式が取り込み括弧を含むか後方参照を含む場合のみ発生します。
</p>
<pre>
（誤動作例: 最初の取り込み括弧が最短マッチであることが反映されていない）
db=# SELECT regexp_matches('AAbbbccc', '^(A*){1,1}?(.*)(c*)$');
 regexp_matches
----------------
 {AA,bbbccc,""}
(1 row)

（修正後の正しい応答）
  regexp_matches  
------------------
 {"",AAbbbccc,""}
(1 row)
</pre>
<li>ページ分割の際にINCLUDEされた列を処理して失敗するという稀な場合に、無効な空のBtreeインデックスページを書き出す動作が回避されました。  (Peter Geoghegan) (11)</li>
<p>
この無効なページは通常のインデックス操作では動作に影響ありませんが、後の VACUUM でエラーを起こす可能性があります。インデックス再構築（REINDEX）を行って復旧することができます。
</p>
<li>新たなプロセスの pg_stat_activity むけデータを初期化する際に失敗することがあり、回避されました。  (Tom Lane) (11)(10)(9.6)(9.5)</li>
<p>
SSL証明書から取り出した文字列をデータベースエンコーディングに変換する等の場合に失敗する可能性がありました。これはクリティカルセクション内で実行されるため、共有の pg_stat_activityデータに対するアクセス手順を妨げ、データベース全体のハングアップをひき起こしました。
</p>
<li>既存の共有メモリセグメントが別のpostmasterから未だ使用中かどうかを検査する際の競合状態が修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
実行タイミングによっては検査をすり抜けて他のpostmasterが使用中の共有メモリを削除してしまうことがあり得ました。
</p>
<li>walreceiverのシグナルハンドラにおける安全でないコーディングが修正されました。  (Tom Lane) (11)(10)</li>
<p>
これにより、walreceiverプロセスが終了シグナル(SIGTERM)を受けたときにクラッシュまたはデッドロックするという、稀に起こりうる問題を回避します。
</p>
<li>特定データベースに接続していないプロセス(walsender等)がパラメータ検査のためにデータベースアクセスを試みる動作が回避されました。  (Vignesh C, Andres Freund) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
この誤りは「FATAL:  cannot read pg_class without having selected a database」のようなエラーをもたらしました。
</p>
<li>SSL を使っていて OpenSSL のデータバッファにちょうど 256×N バイトが含まれる場合の libpq でのハングアップが回避されました。  (David Binderman) (11)(10)(9.6)(9.5)</li>
<li>initdb でシステムタイムゾーンに対する複数の等価な名前の扱いが改善されました。  (Tom Lane, Andrew Gierth) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
initdb は /etc/localtime シンボリックリンクを調べて、シンボリックリンクが存在するなら、システムタイムゾーンに対して等価な名前の中から、それを選ぶようになりました。
</p>
<p>
これにより initdb は同一タイムゾーンが複数存在する場合にユーザーが予期するタイムゾーン名を選択します。 /etc/localtime がゾーンデータファイルへのシンボリックリンクでない場合や、タイムゾーンが TZ環境変数から決定される場合の振る舞いは変更ありません。
</p>
<p>
これとは別に、TZ も /etc/localtime もヒントとして提供されていない時、そのタイムゾーンの他のスペルよりも UTC を優先するようになりました。これにより tzdata 2019a によってもたらされた煩わしい変更を修正します。それは UCT と UTC のゾーン名を同等にするための変更で、initdb は UCT を好むようになりましたが、ほとんど誰も望んでいません。
</p>
<li>pg_dump と pg_dumpall によって発行されたデータベースとテーブルスペースに対するGRANTコマンドの順序が修正されました。  (Nathan Bossart, Michael Paquier) (11)(10)(9.6)</li>
<p>
カスケードしている GRANT が発行されている場合、それらの相互依存性に考慮しない順序で GRANTコマンドが並んでいるために、リストアが失敗する可能性がありました。
</p>
<li>pg_dump がテーブルパーティションを再作成する際、作成コマンドにCREATE TABLE ... PARTITION OF ... ではなく、CREATE TABLE の後に ALTER TABLE ... ATTACH PARTITION をするように変更されました。  (&Aacute;lvaro Herrera, David Rowley) (11)(10)</li>
<p>
これによりパーティションの列の順序が親の列から変更されている可能性があるという問題を回避します。また、親テーブルがまだリストアされていなくても、パーティションは（スタンドアロンテーブルとして）ダンプからリストア可能となりました。 ATTACH は失敗しますが、それは無視することができます。
</p>
<li>reindexdb でのエラー時に誤解を招く余計なエラー報告が修正されました。  (Julien Rouhaud) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
インデックスやスキーマを指定して実行して失敗した場合に、以下のようなデータベースに対する reindexdb に失敗したというメッセージが出力されることがありました。
</p>
<pre>
reindexdb: reindexing of database "db" failed: ....
</pre>
<li>vaccumdb で並列ジョブ実行中にエラーが発生した場合、正しい終了ステータスを確実に返すようになりました。  (Julien Rouhaud) (11)(10)(9.6)(9.5)</li>
<p>
これまで、-j を付与して並列実行させている場合、エラーが起きていてもコマンドが正常終了(0)を返すことがありました。
</p>
<li>auto_explain でパラレルクエリの時に問題が発生しないように修正されました。  (Tom Lane) (11)(10)(9.6)</li>
<p>
以前は、auto_explain で親のクエリがログに記録されていない場合であっても、パラレルワーカーが自分自身のクエリをログに記録しようとしていました。これは時々動作することもありますが紛らわしいですし、時には「ERROR:  could not find key 3 in shm TOC at 0x7f45a0334000」のようなエラーを発生させる原因となっていました。
</p>
<p>
また、サンプリングレートが 1.0 に設定されている場合ですら、必ずしもすべてのクエリーが記録されるとも限らないという、off-by-oneバグも修正されました。
</p>
<li>postgres_fdw で BEFORE ROW UPDATEトリガーによるデータ変更がある可能性を新たに考慮するようになりました。  (Shohei Mochizuki) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これまでは不必要なデータ転送を避けるために UPDATE処理で明示的に対象となったデータだけが転送対象でした。しかし外部テーブルに BEFORE ROW UPDATEトリガーが存在している場合、トリガーは対象となっていない列も変更する可能性があり、そのような場合はそれらの列の変更された値を送り損ねてしまいます。今回の変更で BEFORE ROW UPDATEトリガーが存在するときはすべての列を送信するようにします。
</p>
<li>Windows上でデータベースエンコーディングが SQL_ASCII に設定されている時にASCII 以外の文字列を記録する試みが失敗しないようになりました。  (Noah Misch) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これまでの実装では記録する文字列が必ず UTF-8 である前提となっていて、妥当なエンコードではないように見える時はエラーを投げていました。これからは変換していないバイト列を単純にログに送信します。
</p>
<p>
該当の関数は pgwin32_message_to_UTF16() で、新しい挙動は pg_do_encoding_conversion() と整合性があります。
</p>
<li>PL/pgSQLのヘッダファイル等の変数名が C++の予約語と衝突しないように変更されました。  (George Tarasov) (11)(10)(9.6)(9.5)(9.4)</li>
<p>
これまで PL/pgSQL のヘッダファイルや Cソースファイルの変数名が（new、typeid、typemod など）C++の予約語と衝突していました。
</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>
