<?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.2 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-9-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>Thu, 22 Oct 2026 07:34:24 +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.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 9.2.24 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-24/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 24 Nov 2017 01:00:07 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=504</guid>

					<description><![CDATA[このリリースは 9.2.23 からの修正リリース(リリース日 2017/11/9)です。 9.2.x からのアップデートではダンプ、リストアは不要です。 ただし、項目4番に該当する場合は追加の対処が必要です。 最終更新： ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.23 からの修正リリース(リリース日 2017/11/9)です。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目4番に該当する場合は追加の対処が必要です。</p>
<p>最終更新：2018/2/27</p>
<p><span id="more-504"></span></p>
<h3>PostgreSQL 9.2.23 から 9.2.24 への変更点</h3>
<p>10.1、9.6.6、9.5.10、9.4.15、9.3.20、9.2.24 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>INSERT ... ON CONFLICT DO UPDATE がすべての場合にテーブルのアクセス許可とRLS（行単位セキュリティ）ポリシーをチェックするようになりました。  (Dean Rasheed) (10)(9.6)(9.5)</li>
<p>
INSERT ... ON CONFLICT DO UPDATE の更新パスは、競合インデックスの列に対してSELECT のアクセス許可を必要としますが、制約名で指定された競合の場合はアクセス許可をチェックできませんでした。
</p>
<pre>
（以下のようなテーブルに対して）
db1=# CREATE TABLE t1a (a int PRIMARY KEY);
db1=# GRANT UPDATE ON t1a TO foo ;
db1=# GRANT INSERT ON t1a TO foo ;

（これまでfooユーザで以下のSQLがエラーになりませんでした）
db1=&gt; INSERT INTO t1a VALUES (1) ON CONFLICT
        ON CONSTRAINT t1a_pkey DO NOTHING;
ERROR:  permission denied for relation t1a
</pre>
<p>
また、行単位セキュリティが有効なテーブルでは、(競合インデックスの指定方法に関係なく) テーブルの SELECT ポリシーに対して更新された行をチェックできませんでした。(CVE-2017-15099)
</p>
<li>json_populate_recordset()、jsonb_populate_recordset() の行型の不一致によるクラッシュが修正されました。  (Michael Paquier, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これらの関数は、FROM ... AS 句で指定された結果の行型を、指定されたタプル値の実際の行型と一致するかどうかをチェックせずに使用していました。チェックしなければクラッシュすることになりますが、サーバのメモリ内容が露出してしまう可能性もありました。(CVE-2017-15098)
</p>
<pre>
（以下は第一引数の行型とASで指定する型が一致しません）
db1=# SELECT * FROM json_populate_recordset(ROW(NULL::int,NULL::int), '[{"b":"2"},{"a":"3"}]') AS q (a text, b text);
ERROR:  invalid memory alloc request size 18446744073709551613
（クラッシュまたは奇妙なエラーが発生します）
</pre>
<li>$PGLOG を開く前に $PGUSER になるように、サンプルのサーバ起動スクリプトが修正されました。  (Noah Misch) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
以前は、root として実行中に postmaster ログファイルが開かれました。したがって、データベースの所有者は、$PGLOG をほかのファイルへのシンボリックリンクにすることで、ログメッセージが追加されて壊れ、別のシステムユーザに対して攻撃をしかけることができます。
</p>
<p>
デフォルトでは、これらのスクリプトはどこにもインストールされません。それらのスクリプトを使用しているユーザは、手動で再コピーするか、変更されたバージョンに同じ変更を適用する必要があります。既存の $PGLOG<br />
 ファイルが root 所有の場合は、修正されたスクリプトでサーバを再起動する前に、そのファイルを削除するか名前を変更する必要があります。(CVE-2017-12172)
</p>
<li>同時実行のテーブル拡張を正しく処理するようにBRINインデックスのサマリ処理が修正されました。  (&Aacute;lvaro Herrera) (10)(9.6)(9.5)</li>
<p>
以前は競合状態により、インデックスから一部のテーブル行が漏れる可能性がありました。この問題が過去に発生した状態から回復するには、既存の BRINインデックスを再構築する必要があります。
</p>
<li>BRINインデックスの同時更新中で発生する可能性のある障害が修正されました。  (Tom Lane) (10)(9.6)(9.5)</li>
<p>
これらの競合状態は「ERROR:  invalid index offnum: NN」や「ERROR:  corrupted BRIN index: inconsistent range map」のようなエラーにつながる可能性があります。
</p>
<li>ロジカルレプリケーションで、UPDATEを伝播するのに対象外の列をNULL に設定しないようになりました。  (Petr Jelinek) (10)</li>
<p>
これまで発行元テーブルが購読先テーブルよりも少ない列しか持たない場合、UPDATEをレプリケーションすると不足している列をNULLにしていました。これからは元の値を残すようになります。
</p>
<li>期待されたときにBEFORE ROW DELETEトリガを駆動するようにロジカルレプリケーションが修正されました。  (Masahiko Sawada) (10)</li>
<p>
以前はテーブルにBEFORE ROW UPDATEトリガとBEFORE ROW DELETEトリガの両方がないと駆動されませんでした。
</p>
<li>SPI を使用する関数、とくに手続き言語で記述された関数から、ロジカルデコーディングが呼び出されたときのクラッシュが修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)</li>
<p>
以下のようなロジカルデコーディングの関数を呼び出すだけの PL/pgSQL のユーザ定義関数を実行してクラッシュする例が報告されました。
</p>
<pre>
CREATE FUNCTION logical_replication_slot_lsn_delta(slot text)
  RETURNS pg_lsn AS $$
    BEGIN
      RETURN location FROM pg_logical_slot_peek_changes(slot,null,1) ;
    END
$$ LANGUAGE plpgsql;
</pre>
<li>INSERT、UPDATE、DELETE の対象テーブルを調べるときに、CTE を無視するようになりました。また、スキーマ修飾された対象テーブル名とトリガ遷移テーブル名が一致するのを防止するようになりました。  (Thomas Munro) (10)</li>
<p>
これにより、DMLコマンドに付加されたCTEに対するバージョン10より前の動作が、復元されます。
</p>
<pre>
（10.0では以下がエラーになっていました）
db1=# CREATE TABLE t9 (i int);
CREATE TABLE
db1=# WITH test AS (SELECT 123) INSERT INTO t9 VALUES (1);
ERROR:  relation "t9" cannot be the target of a modifying statement
</pre>
<li>FILTERテストが失敗した行で、集約関数の引数式を評価しなくなりました。  (Tom Lane) (10)</li>
<p>
これにより、バージョン10より前 (およびSQL標準) の動作が復元されます。
</p>
<pre>
（10.0では以下がエラーになっていました）
db1=# CREATE TABLE t10 AS SELECT generate_series(0, 10)::real AS r;
SELECT 11
db1=# SELECT sum(1/r) FILTER (WHERE r &gt; 0) FROM t10;
ERROR:  division by zero
</pre>
<li>複数の GROUPING SETS列に同じ単純変数が含まれているときの、誤った問い合わせ結果が修正されました。  (Tom Lane) (10)(9.6)</li>
<pre>
（このようなデータに対して）
db1=# CREATE TABLE t11 (i1 int, i2 int);
db1=# INSERT INTO t11 VALUES (1,100),(2,201),(2,202),(3,301),(3,302),(3,303);

（以下のように応答すべきところが）
db1=# SELECT i1, i1 AS a1, count(i2) FROM t11 GROUP BY i1, ROLLUP (a1);
 i1 | a1 | count
----+----+-------
  1 |  1 |     1
  3 |  3 |     3
  2 |  2 |     2
  2 |    |     2
  3 |    |     3
  1 |    |     1
(6 rows)

（修正前バージョンでは以下のようになっていました）
db1=# SELECT i1, i1 AS a1, count(i2) FROM t11 GROUP BY i1, ROLLUP (a1);
 i1 | a1 | count
----+----+-------
  1 |  1 |     1
  3 |  3 |     3
  2 |  2 |     2
  2 |  2 |     2
  3 |  3 |     3
  1 |  1 |     1
(6 rows)
</pre>
<li>SELECT の対象リスト内の集合を返す関数を評価している間の、問い合わせ処理内限定のメモリリークが修正されました。  (Tom Lane) (10)</li>
<li>汎用的な計画をもつプリペアド文の並列実行ができるようになりました。  (Amit Kapila, Kuntal Ghosh) (10)</li>
<li>ネストされた問い合わせの誤った並列化の判断が修正されました。  (Amit Kapila, Kuntal Ghosh) (10)(9.6)</li>
<li>最近使用されたロールが削除されたときに、パラレルクエリ処理が失敗しないように修正されました。  (Amit Kapila) (10)(9.6)</li>
<li>BitmapOrノードの下に BitmapAndノードをもつビットマップスキャンを並列実行するとクラッシュする問題が修正されました。  (Dilip Kumar) (10)</li>
<li>明示的な VARIADIC引数を正しく処理するようにjson_build_array()、json_build_object()、およびそれらの jsonb に相当する関数が修正されました。  (Michael Paquier) (10)(9.6)(9.5)(9.4)</li>
<pre>
（明示的な VARIADIC引数とは以下のような呼び出し方で、以下は誤った応答です）
db=# SELECT jsonb_build_array(VARIADIC '{a,b,c,d}'::text[]);
   jsonb_build_array
------------------------
 [["a", "b", "c", "d"]]
(1 row)

（以下の呼び出し方であれば該当しません）
SELECT jsonb_build_array('a','b','c','d');
  jsonb_build_array
----------------------
 ["a", "b", "c", "d"]
(1 row)
</pre>
<li>クラッシュや作業項目の気づかぬうちの消失を防ぐために autovacuum の作業項目ロジックが修正されました。  (&Aacute;lvaro Herrera) (10)</li>
<li>ビューの最後に列が追加されたときの、めったに発生しないクラッシュが修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
ここでのビューに列を追加するとは、既存のビューをCREATE OR REPLACE VIEWコマンドでより列が多い定義に上書きすることを指します。
</p>
<li>ビューまたはルールに FieldSelect または FieldStore 式ノードが含まれている場合に、適切な依存関係を記録するようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これらの依存関係がないと、失敗させる必要があるときに列またはデータ型の DROP を通過させることができ、あとでビューまたはルールを使用してエラーが発生する可能性があります。このパッチは、既存のビュー/ルールを保護するためのものではなく、今後作成されるもののみを保護します。
</p>
<p>
FieldSelect と FieldStore は実装上の要素名です。本障害により、TYPE定義を含むデータベースオブジェクトのCASCADE付きDROPで「ERROR:  could not open relation with OID 34567」などの奇妙なエラーが報告されました。
</p>
<li>範囲データ型がハッシュできるかを正しく検出するようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
プランナは、誤って範囲型がハッシュ結合またはハッシュ集約で使用するためにハッシュできると仮定していましたが、実際には範囲の派生元型にハッシュサポートがあるかどうかをチェックする必要があります。いずれにしても、すべての組み込みの範囲型はハッシュ可能なので、それらには影響しません。
</p>
<li>関数従属性の統計を調べるときに、RelabelType式ノードを正しく無視するようになりました。  (David Rowley) (10)</li>
<p>
これにより、たとえば、varchar列の拡張統計を適切に使用することができます。
</p>
<li>順序集合集約間の遷移状態の共有を防ぐようになりました。  (David Rowley) (10)(9.6)</li>
<p>
これにより、組み込みの順序集合集約でクラッシュし、おそらくユーザ記述の集約でもクラッシュします。バージョン 11 以降では、このようなケースを安全に処理するための規定が含まれる予定ですが、リリースされたブランチでは最適化を無効にするだけです。
</p>
<li>statement_timeout が先に発生した場合に、idle_in_transaction_session_timeout が無視されないようになりました。  (Lukas Fittl) (10)(9.6)</li>
<li>XID周回に起因する NOTIFYメッセージの確率の低い損失が修正されました。  (Marko Tiikkaja, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
セッションが問い合わせを実行せず、単に通知を聞いた場合、20億回を超えるトランザクションでは、同時にコミットするトランザクションからいくつかの通知が欠落していきました。
</p>
<li>特に新たな APFSファイルシステムを使用したときの、macOS のパフォーマンス上の問題を回避するため、バルクファイルコピー中のデータフラッシュ要求の頻度が減らされました。  (Tom Lane) (10)(9.6)</li>
<li>トランザクション分離レベルが REPEATABLE READ 以上の場合に、 COPY の FREEZE オプションが機能するようになりました。  (Noah Misch) (10)(9.6)(9.5)(9.4)</li>
<p>
このケースは、以前のバグ修正（9.6.2、9.5.6、9.4.11で適用されたもの）によって意図せずに壊れていました。
</p>
<li>遷移計算がマージされている集約の最終関数に正しい <structname>Aggref</structname> ノードを返すように、<function>AggGetAggref()</function> が修正されました。(Tom Lane) (10)(9.6) </li>
<p>
これは集約関数のための内部実装関数です。
</p>
<li>pg_dump と psql の新しい問い合わせで、不十分なスキーマ修飾が修正されました。  (Vitaly Burovoy, Tom Lane, Noah Misch) (10)</li>
<p>
pg_dump がエラーで終わるケースが報告されました。
</p>
<li>psql の d の問い合わせで @&gt; 演算子を使用しないようになりました。  (Tom Lane) (10)</li>
<p>
これにより、parray_gin 拡張がインストールされているときに、競合する演算子が定義されたときの、問題を回避できます。
</p>
<li>テーブル空間パスを比較する前に両方のパスを正規化するように、pg_basebackup のマッチングが修正されました。  (Michael Paquier) (10)(9.6)(9.5)</li>
<p>
これは Windows でとくに役立ちます。
</p>
<li>libpq がユーザのホームディレクトリを必要としないように修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
バージョン10.0では、~/.pgpass を読み込もうとしてホームディレクトリが見つからなかった場合、誤って致命的なエラーとして扱っていました。
</p>
<p>
~/.pg_service.conf を読むとき、バージョン10.0 と以前のリリースのブランチは同様の誤りを犯していましたが、サービス名が指定されていなければ、そのファイルが探し出されないので気づきませんでした。
</p>
<li>ecpglib で、standard_conforming_strings が設定されているかどうかに応じて、文字列リテラルのバックスラッシュを正しく処理するようになりました。  (Tsunakawa Takayuki) (10)(9.6)(9.5)(9.4)</li>
<li>ecpglib の Informix互換モードが、整数入力文字列の小数点部分を無視するようになりました。  (Gao Zengqi, Michael Meskes) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>check のような Make ターゲットに欠落している temp-install の前提条件が修正されました。  (Noah Misch) (10)(9.6)(9.5)</li>
<p>
make check のように動作することを意図したデフォルト以外のテスト手順では、一時的なインストールが最新であることを確認できませんでした。
</p>
<li>アラスカ、アピア、ビルマ、カルカッタ、デトロイト、アイルランド、ナミビア、パゴパゴの歴史的修正に加え、フィジー、ナミビア、北キプロス、スーダン、トンガ、タークス・カイコス諸島の DST 法の変更を含む tzdata リリース 2017c にタイムゾーンデータファイルが更新されました。   (10)(9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ドキュメントで、HTML アンカーが大文字の文字列に戻されました。  (Peter Eisentraut) (10)</li>
<p>
ツールチェーンが変更されたため、10.0 のユーザマニュアルにはイントラページアンカーに小文字の文字列が含まれていたため、Web サイトのドキュメントの外部リンクが壊れていました。前の大文字の文字列の使用法に戻ります。
</p>
<li>無限の浮動小数点値を numeric 型に変換しようとする試みを適切に拒否するようになりました。  (Tom Lane, KaiGai Kohei) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
以前は、この動作はプラットフォームに依存していました。
</p>
<li>プランナで、リレーションの明確性を決定する際に、RelabelType 式ノードを正しく無視するようになりました。  (David Rowley) (9.6)(9.5)</li>
<p>
これにより、副問い合わせに varchar 型の結果列がある場合に、意図した最適化が行われます。
</p>
<li>
DSM (動的共有メモリ）のメモリ要求が tmpfs で使用可能なスペースを超えたとき、Linux上での SIGBUSクラッシュを回避するようになりました。(Thomas Munro) (9.6)(9.5)(9.4)
</li>
<li>ネストされたトリガの起動時に発生する可能性の低いクラッシュが防止されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>COPY または lo_export() でファイル作成が失敗した場合、umask設定が正しく復元されるようになりました。  (Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ANALYZE で列名が重複しているとき、よりよいエラーメッセージが表示されるようになりました。  (Nathan Bossart) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>log_statement が ddl に設定されているときに特定の SQLコマンドが使用されたときのエラーを防止するため、GetCommandLogLevel() で不足しているケースが追加されました。  (Michael Paquier) (9.6)</li>
<p>
改行で終わらない pg_hba.conf ファイルの最後の行の誤った解析が修正されました。
</p>
<li>正しい順序で GRANT コマンドを発行するように pg_dump が修正されました。  (Stephen Frost) (9.6)</li>
<li>PGresult の行数の整数オーバーフローを防ぐために libpq が修正されました。  (Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ポインタまたは配列変数による ecpg のスコープ外のカーソル宣言の処理が修正されました。  (Michael Meskes) (9.6)(9.5)(9.4)(9.3)</li>
<li>ecpg のリグレッションテストが Windows上で確実に動作するように修正されました。  (Christian Ullrich, Michael Meskes) (9.6)</li>
<li>時間帯ライブラリのコピーが IANA のリリース tzcode2017c と同期されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これにより、さまざまな問題が修正されました。唯一、ユーザに見える可能性が高いのは、POSIX スタイルのゾーン名のデフォルトの DST ルールは、時間帯データディレクトリに posixrules ファイルが存在しない場合、数十年前のではなく、現在の米国の法律と一致していることです。
</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 9.2.23 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-23/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 05 Sep 2017 09:21:50 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=584</guid>

					<description><![CDATA[このリリースは 9.2.22 からの修正リリース(リリース日 2017/8/31)です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.22 より前のバージョンからアップデートを行う場合は ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.22 からの修正リリース(リリース日 2017/8/31)です。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。<br />
また、9.2.22 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-22/">9.2.22 に関する技術情報</a>を参照してください。</p>
<p><span id="more-584"></span></p>
<h3>PostgreSQL 9.2.22 から 9.2.23 への変更点</h3>
<p>9.6.5、9.5.9、9.4.14、9.3.19、9.2.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>information_schema.table_privileges ビューに外部テーブルも含めるようになりました。 (Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
他の関連する information_schemaビューでは外部テーブルを含めていますが、このビューだけ外部テーブルを無視していました。
</p>
<p>
このビュー定義はinitdbで導入されるため、単にアップグレードするだけでは修正されません。既存のデータベースクラスタを修正するには、以下をスーパーユーザとして psqlで各データベースに対して実行してください。
</p>
<pre>
BEGIN;
DROP SCHEMA information_schema CASCADE;
i SHAREDIR/information_schema.sql
COMMIT;
</pre>
<p>
SHAREDIR の部分は pg_config --sharedir コマンドで出力されるディレクトリで置換してください。
</p>
<li>失敗したトランザクションの ROLLBACK を実行しようとしている間に発生するFATAL終了（たとえば SIGTERM による終了）のクリーンアップ処理を行うようになりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この状況はアサート失敗に陥るかもしれませんでした。アサート無しのビルドでも、このような終了は起きますが、その場合「ERROR: cannot drop active portal ...」といった予期せぬメッセージがログ出力<br />
されていました。
</p>
<li>FATAL終了中に生じるかもしれないアサートが削除されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>検索対象の、複合型またはドメイン型に対する、範囲型またはドメイン型の列を正しく認識するように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
複合型またはドメイン型の定義を変えるいくつかのALTERコマンドは、それらデータ型の値が何らかデータベースに格納されている場合に、これらの値を更新または検査するのに必要な基盤が欠けているため、失敗すると考えられます。
</p>
<p>
これまでは、これらの検査は関連する内側の範囲型またはドメイン型でラップされた値を見逃すおそれがあり、データ不整合を許す可能性がありました。
</p>
<p>
ドメイン型のドメイン型、複合型のドメイン型、ドメイン型の範囲型、といった組み合わせが本障害に該当するデータ型となります。
</p>
<li>固定長リファレンス渡しのデータ型をパラレルワーカープロセスに渡すときのクラッシュが防止されました。 (Tom Lane) (9.6)</li>
<li>パラレルモード（-j、--jobs オプション）で、リストアする要素の選択にリストファイルを使っている場合（-L、--use-list オプション）のpg_restore のクラッシュが修正されました。 (Fabrízio de Royes Mello) (9.6)(9.5)(9.4)(9.3)</li>
<li>
付随する C変数無しの RETURNING句が扱えるように ecpg のパーサが変更されました。 (Michael Meskes) (9.6)(9.5)(9.4)(9.3)(9.2)
</li>
<p>
これにより ecpgプログラムは、RETURNING句をクライアントに返される値を定義するためでなく、内部（例えば CTE内など）に使う SQL構文を含むことができます。
</p>
<li>
Cプリプロセッサ制御行のバックスラッシュ継続を認識するようにecpg のパーサが変更されました。 (Michael Meskes) (9.6)
</li>
<li>
Windows における PL/Perl むけコンパイラフラグの選択が改善されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)
</li>
<p>
この修正により、time_t値の幅についての矛盾する仮定に基づく PL/Perl のクラッシュが回避されます。
</p>
<p>
拡張モジュール開発者には気になるかもしれない副作用は、PostgreSQLのWindowsビルドにおいて、これからは _USE_32BIT_TIME_T がグローバルに定義されなくなることです。time_t型は PostgreSQL API定義では用いられていないため、このことが問題を起こすとは考えられません。
</p>
<li>
GNU make 以外の make から実行されても正しく動作するようにmake check が修正されました。 (Thomas Munro) (9.6)(9.5)
</li>
<li>
walsenderプロセスのシャットダウンシグナルに対する応答での障害が修正されました。 (Marco Nenciarini) (9.4)
</li>
<p>
フラグ更新を取りこぼしていたため、シャットダウンシグナルを受けても接続しているスタンバイサーバがいる限り walsenderが稼動を続けていて、immediateモード以外のプライマリサーバのシャットダウンを妨げました。
</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 9.2.22 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-22/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 21 Aug 2017 05:16:07 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=661</guid>

					<description><![CDATA[このリリースは 9.2.21 からの修正リリース(リリース日 2017/8/10)です。 9.2.x からのアップデートではダンプ、リストアは不要です。 ただし、項目1番には追加の対処が必要です。 また、9.2.20 よ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.21 からの修正リリース(リリース日 2017/8/10)です。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目1番には追加の対処が必要です。</p>
<p>また、9.2.20 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-20/">9.2.20 に関する技術情報</a>を参照してください。</p>
<p><span id="more-661"></span></p>
<h3>PostgreSQL 9.2.21 から 9.2.22 への変更点</h3>
<p>9.6.4、9.5.8、9.4.13、9.3.18、9.2.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>ユーザマッピングオプションとして格納されたパスワードを保護するため、システムテーブル pg_user_mappings の umoptions列の可視性が厳格化されました。</li>
<p>
これまで、ユーザは関連する外部サーバに USAGE権限を持たなくとも、自身のユーザマッピングのオプションを参照できました。このようなオプションにはユーザ自身ではなく管理者によって設定されたパスワードが含まれているかもしれません。
</p>
<p>
本バージョンアップは新たに initdb でデータベースクラスタを作るときの振る舞いを修正するだけです。既存のデータベースクラスタを修正するには、以下の手順を実行する必要があります。
</p>
<p>postgresql.conf で以下設定を与えて PostgreSQLサービスを再起動します。ALTER SYSTEM コマンドが利用可能なら、それを使っても良いです。
</p>
<p>
allow_system_table_mods = true
</p>
<p>
データベースクラスタ内の各データベースでスーパーユーザにて以下を実行します。
</p>
<pre>
SET search_path = pg_catalog;
CREATE OR REPLACE VIEW pg_user_mappings AS
    SELECT
        U.oid       AS umid,
        S.oid       AS srvid,
        S.srvname   AS srvname,
        U.umuser    AS umuser,
        CASE WHEN U.umuser = 0 THEN
            'public'
        ELSE
            A.rolname
        END AS usename,
        CASE WHEN (U.umuser &lt;&gt; 0 AND A.rolname = current_user
                     AND (pg_has_role(S.srvowner, 'USAGE')
                          OR has_server_privilege(S.oid, 'USAGE')))
                    OR (U.umuser = 0 AND pg_has_role(S.srvowner, 'USAGE'))
                    OR (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
                    THEN U.umoptions
                 ELSE NULL END AS umoptions
    FROM pg_user_mapping U
         LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN
        pg_foreign_server S ON (U.umserver = S.oid);
</pre>
<p>
このとき、template0 と template1 についても実行してください。さもなくば、新たにデータベースを作る度にその新たなデータベースに上記手順を実行してください。
</p>
<p>
template0データベースに書き込みするには、接続可能ないずれかのデータベース上で以下のSQLを実行します。
</p>
<pre>
(9.5以降の場合)
書き込み可能にする:
 ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
書き込み不能に戻す:
 ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;

(9.4以前の場合)
書き込み可能にする:
 UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
書き込み不能に戻す:
 UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';

最後に allow_system_table_mods 設定を削除して、PostgreSQLサービスを再起動します。
</pre>
<li>全てのパスワードによる認証方式で空パスワードがサーバ側で禁止されました。 (Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
libpq は md5 などのパスワードを使う認証方式について、空パスワード指定の場合には、これをサーバに送りません。そのため、ユーザのパスワードが空に設定されていた場合、psql や、その他の libpqベースのクライアントからパスワード認証で接続できません。これにより、管理者はユーザのパスワードを空にすることはパスワードを使った認証での接続を禁止するのに等しいと認識しているかもしれません。しかしながら、改造されているクライアントや libpqベースでないクライアントでは空パスワードでのログインは可能でした。
</p>
<p>
本修正では、全ての場合で空パスワードをサーバが拒絶するように変更されました。(CVE-2017-7546)
</p>
<li>lo_put() 関数が対象ラージオブジェクトの UPDATE権限を検査するように修正されました。 (Tom Lane, Michael Paquier) (9.6)(9.5)(9.4)</li>
<p>
ラージオブジェクトに書き込みを行う SQL関数 lo_put() は、クライアントインタフェース向け関数 lowrite() と同様の権限が必要でしたが、検査が欠落していて、任意のユーザでラージオブジェクトのデータ変更が可能となっていました。(CVE-2017-7548)
</p>
<li>pg_upgrade でスタンバイサーバをアップグレードする手順についてドキュメントが修正されました。 (Bruce Momjian) (9.6)(9.5)</li>
<p>
これまでは、pg_upgrade を実行した後、スタンバイサーバをデータ同期する前に、wal_level設定を変更するためにプライマリサーバを起動停止するように記述していました。この手順は安全ではありません。
</p>
<li>タプル更新チェーンの同時ロックが修正されました (Álvaro Herrera) (9.6)(9.5)(9.4)(9.3)</li>
<p>
いくつかのセッションが同時にタプル更新チェーンを競合しないモードで古いスナップショットを使ってロックして成功した場合、結果として有効行が無い状態となるので、稀な状況においてエラーを起こすことがありました。
</p>
<p>
その結果、参照先テーブルの該当行が同時更新されている場合に、該当行は在るにもかかわらず、それを参照する外部キー制約違反のエラーが発生しました。
</p>
<li>XMAXフィールドが未だ有効なメンバーを1つだけ持つ multixact として使われているタプルをフリーズするときにデータ破損の可能性があり、修正されました。 (Teodor Sigaev) (9.6)(9.5)(9.4)(9.3)</li>
<li>メモリ内で 10億個以上のタプルをソートする際に、整数のオーバーフローやその後のクラッシュがあり、修正されました。 (Sergey Koposov) (9.6)(9.5)(9.4)</li>
<li>Windows では、新しいプロセスで共有メモリのアドレス範囲を確保できない場合、プロセスの作成を再試行するようになりました。 (Tom Lane, Amit Kapila) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
おそらくアンチウイルス製品により稀におきていた子プロセスの起動失敗が、これにより修正されると考えられます。
</p>
<li>Windowsビルドにおける、低い発生確率で生じる共有述語ロックハッシュテーブルの破損が修正されました。 (Thomas Munro, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>SSL接続を正常にクローズしたときに 非SSL接続と同様に特にログ出力しないように修正されました。 (Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>SSLセッションチケットをクライアントに送信しないように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この修正により、チケットを認識するクライアント側の SSLコードによる再接続の失敗を防止します。
</p>
<li>Solaris上の tcp_keepalives_idle設定に向けてコード修正が行われ、本設定が利用可能になりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>サービス(postmaster)のシャットダウンと即時再起動の直後に発行された問い合わせメッセージを無視しないように統計コレクタが修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
シャットダウン後 0.5秒以内に発行された統計情報の問い合わせは、事実上無視されていました。
</p>
<li>統計コレクタの受信バッファサイズが 100KB 以上になりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これによりデフォルトの受信バッファサイズがこれよりも小さい古いプラットフォームで、統計情報データを取りこぼすリスクを軽減できます。
</p>
<li>「XLOG_SWITCH」WALレコードを処理した直後にスタンバイが昇格したときに、無効な WALセグメントを作成しないように修正されました。 (Andres Freund) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>クライアントがシャットダウンをリクエストしたときにすぐに終了するように、walsender が修正されました。 (Tom Lane) (9.6)(9.5)(9.4)</li>
<li>walsenderプロセスの SIGHUP と SIGUSR1 の処理が修正されました。 (Petr Jelinek, Andres Freund) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>シャットダウンに伴うチェックポイント処理の間にwalsenderがパニックをひき起こすのが防止されました。 (Andres Freund, Michael Paquier) (9.6)(9.5)(9.4)</li>
<li>マスタプロセス(postmaster)での競合状態による walreceiver の不必要に遅い再起動が修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ロジカルデコーディングの際にディスクにあふれ出す小さなサブトランザクションのリークが修正されました。 (Andres Freund) (9.6)(9.5)(9.4)</li>
<p>
結果として一時ファイルでディスク領域が過度に消費されていました。
</p>
<li>ロジカルデコーディングスロットの作成中にスナップショットを作成するために必要な作業が削減されました。 (Andres Freund, Petr Jelinek) (9.6)(9.5)(9.4)</li>
<p>
以前のアルゴリズムはオープンしているトランザクションが多いサーバ上では実行不能なほど高コストでした。
</p>
<li>ロジカルデコーディングスロット作成を遅延させる可能性のある競合状態が修正されました。 (Andres Freund, Petr Jelinek) (9.6)(9.5)(9.4)</li>
<li>syscache無効化イベントの処理におけるオーバーヘッドが軽減されました。 (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
これは特に、頻繁にキャッシュ無効化を起こすロジカルデコーディングに有益です。
</p>
<li>一部の場合に使われた外部キー制約の存在に基づいて結合の選択率を推定する誤ったヒューリスティックが削除されました。 (David Rowley) (9.6)</li>
<p>
複数列の外部キー制約が存在していて、しかし、クエリの結合構造と完全に一致しない場合、プランナは全く役に立たないヒューリスティック推定を使用していました。このような場合に、9.6 より前の推定方法に戻されました。
</p>
<li>INSERT または UPDATE が、ドメイン型配列の複数の要素に値を割り当てる場合の問題が修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<pre>
エラー発生例：
db1=# CREATE DOMAIN d25 int[];
db1=# CREATE TABLE t25 (c1 d25);
db1=# INSERT INTO t25 (c1[1], c1[2]) VALUES (100, 200);
ERROR:  multiple assignments to same column "c1"

単なる配列型であれば実行できる：
db1=# CREATE TABLE t25_2 (c1 int[]);
db1=# INSERT INTO t25_2 (c1[1], c1[2]) VALUES (100, 200);
db1=# SELECT * FROM t25_2;
    c1
-----------
 {100,200}
(1 row)
</pre>
<li>集約関数の引数内にある sub-SELECT でウィンドウ関数を使用できるようになりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
以下のような形の SQL がエラーになっていましたが本来制限されるものではありませんでした。
</p>
<pre>
db1=# SELECT sum((SELECT row_number() OVER () FROM t1 )) FROM t1;
ERROR:  aggregate function calls cannot contain window function calls

</pre>
<li>元テーブルが外部テーブルの場合にビューの CHECK OPTIONS句が適切に実行されるようになりました。 (Etsuro Fujita) (9.6)</li>
<p>
以前は、ビュー条件を確認する必要がある場合でも、確認せずに、更新を完全に外部サーバにプッシュしてしまう可能性がありました。
</p>
<li>ALTER ... RENAME実行時に、自動生成された配列型の列名を退避するようになりました。 (Vik Fearing) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
以前の修正では、CREATE実行時に競合する自動生成された配列型の名前を変更していました。本修正は以前の修正を名前変更操作に拡張したものです。
</p>
<li>テーブルの制約にコメントがある場合について、ALTER TABLEのダングリングポインタ障害が修正されました。 (David Rowley) (9.6)(9.5)</li>
<p>
再作成した制約にコメントを再適用すると、奇妙なエラーメッセージ（現れ方は様々です）が表示されたり、クラッシュすることがありました。
</p>
<li>ALTER ROLE ... SET で実行できるすべての構文が ALTER USER ... SET でも実行できるようになりました。 (Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>外部テーブルの CHECK制約を NOT VALID で初期化できるようになりました。 (Amit Langote) (9.6)</li>
<p>
CREATE TABLE は暗黙に CHECK制約に対する NOT VALID 指定を外します。作った時点ではテーブルは空なので制約は即座に検証済にできるからです。しかし、これは外部テーブルにはあてはまりません。
</p>
<li>データ型 I/O 関数の引数または戻り値の型を opaque から正しい型に変更するときに、依存関係情報が適切に更新されるようになりました。 (Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
CREATE TYPE は以前から使われていないこのスタイルで宣言された I/O 関数を更新しますが、型に依存関係を記録することを忘れ、後続の DROP TYPE が関数定義を壊れたままにしていました。
</p>
<li>COPY がクエリの結果をコピーするときに、クエリプランが並列処理を許可するようになりました。 (Andres Freund) (9.6)</li>
<li>ANALYZE が tsvector列を処理するときのメモリ使用量が削減されました。 (Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>money型の値を整数または浮動小数点型の数で乗じたり除算したりするときに不必要な精度損失やいいかげんな丸めがあり、修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本修正を適用した結果、money型の値の演算結果（多くは末尾桁部分）が変わる可能性があります。
</p>
<li>regprocedurein() などの識別子を解析する関数の空白のチェックが厳格化されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
広く使われているものを含め、ロケールによっては、これらの関数がマルチバイト文字の断片を空白として誤って解釈する可能性がありました。マルチバイトの識別子（テーブル名等）を使っている場合の問題となります。
</p>
<li>PL/Perlをコンパイルする際に、Perl由来の適切な #define シンボルを使用するようになりました。 (Ashutosh Sharma, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これによって移植性の問題が回避されます。典型的には、最近の Perlバージョンで作業する場合、ライブラリの読み込み中にハンドシェイク不一致が表示されていました。
</p>
<li>libpq で接続に失敗した後に GSS/SASL と SSPI の認証状態が正しくリセットされるようになりました。 (Michael Paquier) (9.6)(9.5)(9.4)(9.3)</li>
<p>
これを行わないと、SSL から non-SSL 接続へのフォールバック時に、SSL試行における GSS/SASLの失敗により常に非SSLの試行の失敗をひき起こしました。SSPIは失敗しませんでしたが、メモリがリークしました。</p>
<li>キーボードの EOF 信号で COPY FROM STDIN が終了した後に、別の COPY FROM STDIN が試行されたときに発生する psql のエラーが修正されました。 (Thomas Munro) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この誤動作は、BSD プラットフォーム (macOS を含む) で観測されましたが、他のほとんどのプラットフォームでは検出されませんでした。
</p>
<li>pg_dump と pg_restore が REFRESH MATERIALIZED コマンドを最後に出力するように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
権限を与える命令よりも後ろにすることで、マテリアライズドビューが他ユーザが所有するテーブルを参照しているときの、ダンプ/リストアでのエラーを防ぎます。
</p>
<li>pg_dump/pg_restore の zlib に由来するエラー状況の報告が改善されました。 (Vladimir Kunschikov, Álvaro Herrera) (9.6)(9.5)(9.4)</li>
<li>pg_dump の --clean オプションが期待されるイベントトリガを削除するように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
また、イベントトリガの所有者を適切に割り当てるようになりました。これまではリストアスクリプトを実行したスーパーユーザが所有者になっていました。
</p>
<li>pg_dump の --clean オプションが修正されました。 (Stephen Frost) (9.6)</li>
<p>
publicスキーマが無い場合に失敗しないようになりました。
</p>
<li>pg_dump が空のオペレータクラスに対して無効な SQLを出力しないように修正されました。 (Daniel Gustafsson) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>Windows での pg_dump の標準出力への出力が修正されました。 (Kuntal Ghosh) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
ファイルディスクリプタをバイナリモードにしそこなっていたため、標準出力に書き出されたダンプに壊れたデータが含まれていました。圧縮されたプレーンテキスト（-Z -Fp オプション）を標準出力に書き出す（すなわち -f オプションではない）場合に該当します。
</p>
<li>SQL関数 pg_get_ruledef() が、後から名前変更された列を含むビューのON SELECT ルールを正しく出力するように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
一部の限られたケースで pg_dump がビューをダンプするのにpg_get_ruledef() 関数に依存することがありました。その場合、誤ったダンプ出力が生じて、リストア時に失敗してしまいます。
</p>
<li>結合条件の記述を持たない外部結合のダンプが修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
共通列を持たない NATURAL LEFT JOIN で ON句を持たない定義になっていました。これは文法違反でエラーになります。
</p>
<pre>
誤動作例：
db1=# CREATE TABLE t47_1 (id1 int, c1 int);
db1=# CREATE TABLE t47_2 (id2 int, c2 int);
db1=# CREATE VIEW v47 AS SELECT * FROM t47_1 NATURAL LEFT JOIN t47_2;
db1=# q

$ pg_dump -d db1 -t v47
  (出力中略)
CREATE VIEW v47 AS
 SELECT t47_1.id1,
    t47_1.c1,
    t47_2.id2,
    t47_2.c2
   FROM (t47_1
     LEFT JOIN t47_2);
</pre>
<li>FROM句の関数式のダンプが修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
関数呼び出しと似た形の式が正しく復元できませんでした。
</p>
<pre>
(例: FROM句の4つの式はいずれも正しくダンプできませんでした)
CREATE VIEW v48 as
  SELECT * FROM
    COALESCE(1,2) AS c,
    COLLATION FOR ( 'x'::text ) col,
    CURRENT_DATE AS d,
    CAST( 1 + 2 as int ) AS i4;
</pre>
<li>Windows で pg_basebackup の 標準出力への出力が修正されました。 (Haribabu Kommi) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
ファイルディスクリプタをバイナリモードにしそこなっていたため、標準出力に書き出されたバックアップに壊れたデータが含まれていました。
</p>
<li>2GB 以上のファイルを正しく扱えるように pg_rewind が修正されました。 (Kuntal Ghosh, Michael Paquier) (9.6)(9.5)</li>
<p>
通常は PostgreSQLのデータディレクトリにこのようなファイルは現れませんが、一部の場合に存在する可能性があります。
</p>
<li>末尾のWALレコードが wal_level = minimum にならないことを保証するように、pg_upgrade が修正されました。 (Bruce Momjian) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これはアップグレードされたスタンバイサーバが再接続するのを防ぎます。
</p>
<li>pg_xlogdump のWALレコード長の計算が修正されました。 (Andres Freund) (9.6)(9.5)</li>
<p>
報告されるレコード長が誤っていました。
</p>
<li>postgres_fdw で ALTER SERVER および ALTER USER MAPPING コマンドの後にリモートサーバへの接続を再確立するようになりました。 (Kyotaro Horiguchi) (9.6)(9.5)(9.4)(9.3)</li>
<p>
これにより接続パラメータに影響するオプション変更が即座に反映されることを保証します。
</p>
<li>postgres_fdw で、リモートのトランザクション制御コマンドのキャンセルが可能になりました。 (Robert Haas, Rafia Sabih) (9.6)(9.5)(9.4)(9.3)</li>
<p>
従来よりもより多くのケースで、応答しないリモートサーバの待機から迅速に抜け出すことができるようになります。
</p>
<li>拡張モジュール向けにより多くの空間を提供するため、実装内の定数 MAX_SYSCACHE_CALLBACKS が 32 から 64 に変更されました。 (Tom Lane) (9.6)(9.5)(9.4)</p>
<li>gcc で共有ライブラリをビルドするときに、常に -fpic ではなく -fPIC を使用するようになりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本変更は大きい拡張ライブラリのビルドを助けます。一部のプラットフォームで -fpic では大きい共有ライブラリにおいて失敗していました。
</p>
<li>MSVCビルドで opensslライブラリが VCサブディレクトリ内に無い場合を扱えるようになりました。 (Andrew Dunstan) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>MSVCビルドで libxml2 ヘッダファイル向けの適切なインクルードパスが追加されました。 (Andrew Dunstan) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本修正により、MSVCビルドで標準の libxml2 インストールの状態からファイルを移動する必要がなくなります。
</p>
<li>MSVCビルドで tcl86.lib という名前の Tclライブラリを認識するようになりました。 (Noah Misch) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>MSVCビルドで vcregress.pl のコマンドラインでPROVE_FLAGS設定を尊重するようになりました。 (Andrew Dunstan) (9.6)(9.5)(9.4)</li>
<li>Microsoft MSVC 向けのビルドスクリプトでエスケープされていないブレース（{、}）を出しているのが修正されました。 (Andrew Dunstan) (9.5)(9.4)(9.3)(9.2)</li>
<p>
これにより最近の Perlバージョンで警告やエラーが発生するのを回避します。
</p>
<li>非常に幅が広いタプルでのロジカルデコーディングの障害が修正されました。 (Andres Freund) (9.4)</li>
<p>
圧縮後、インラインデータで 64KB 以上のタプルにおいて、ロジカルデコーディングがクラッシュしていました。これは REPLICA IDENTITY FULL が有効なテーブルでのみ発生します。
</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 9.2.21 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-21/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 26 May 2017 04:41:41 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=727</guid>

					<description><![CDATA[このリリースは 9.2.20 からの修正リリースです。 9.2.x からのアップデートではダンプ、リストアは不要です。 ただし、項目1番、4番、23番に該当する場合、追加の対処が必要です。 また、9.2.20 より前のバ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.20 からの修正リリースです。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目1番、4番、23番に該当する場合、追加の対処が必要です。</p>
<p>また、9.2.20 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-20/">9.2.20 に関する技術情報</a>を参照してください。</p>
<p><span id="more-727"></span></p>
<h3>PostgreSQL 9.2.20 から 9.2.21 への変更点</h3>
<p>9.6.3、9.5.7、9.4.12、9.3.17、9.2.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>ユーザマッピングオプションとして格納されたパスワードを保護するため、pg_user_mappings.umoptions の可視性が厳格化されました。  (Michael Paquier, Feike Steenbergen) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでの実装では、外部サーバオブジェクト所有者やサーバの USAGE 権限を付与されたユーザが、そのサーバに関連する全ユーザマッピングのオプションを見ることができました。これには他ユーザのパスワードもしっかり含まれているかもしれません。
</p>
<p>
そこで、information_schema.user_mapping_options と振る舞いが一致するように pg_user_mappings ビューの定義が修正されました。すなわち、マップされているユーザであるか、PUBLIC へのマッピングで現在ユーザがサーバの所有者である、あるいは、現在ユーザがスーパーユーザのときに、ユーザマッピングオプションが見えるようになります。(CVE-2017-7486)
</p>
<p>
本パッチでは、新たに initdb で作成されたデータベースクラスタについてのみ振る舞いを変更します。既存データベースクラスタに対して変更を適用するには、以下の手順を実施する必要があります。
</p>
<p>
(1)
</p>
<p>
postgresql.conf に「allow_system_table_mods = true」を加えた後、PostgreSQL サービス (postmaster) を再起動します (ALTER SYSTEM をサポートするバージョンであれば、それを使うこともできますが、いずれにせよ再起動は必要です)。
</p>
<p>
データベースクラスタ内の各データベースで以下のコマンドをスーパーユーザで実行します。
</p>
<pre>
SET search_path = pg_catalog;
CREATE OR REPLACE VIEW pg_user_mappings AS
    SELECT
        U.oid       AS umid,
        S.oid       AS srvid,
        S.srvname   AS srvname,
        U.umuser    AS umuser,
        CASE WHEN U.umuser = 0 THEN
            'public'
        ELSE
            A.rolname
        END AS usename,
        CASE WHEN (U.umuser &lt;&gt; 0 AND A.rolname = current_user)
                    OR (U.umuser = 0 AND pg_has_role(S.srvowner, 'USAGE'))
                    OR (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
                    THEN U.umoptions
                 ELSE NULL END AS umoptions
    FROM pg_user_mapping U
         LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN
        pg_foreign_server S ON (U.umserver = S.oid);
</pre>
<p>
(2)
</p>
<p>
template0 と template1 に対しても対処が必要です。さもなくば後に新たに作ったデータベースには脆弱性が依然として存在することになります。template0 を修正するには、一時的に template0 を接続可能にする必要があります。
</p>
<p>
PostgreSQL 9.5 以降では以下のコマンドが利用できます。
</p>
<pre>
template0 を接続可能にする：
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;

template0 を接続不能に戻す：
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
</pre>
<p>
より古いバージョンでは代替に以下コマンドを使います。
</p>
<pre>
template0 を接続可能にする：
UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';

template0 を接続不能に戻す：
UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
</pre>
<p>
(3)
</p>
<p>
最後に allow_system_table_mods 設定を除去して、PostgreSQL サービス (postmaster) をもう一度再起動します。
</p>
<li>情報を漏らす演算子を介した統計情報の露出を防止するようになりました。  (Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
いくつかのプランナの選択率見積り関数は、最頻値やヒストグラムの登録値など、pg_statistic から得られる値に対してユーザ定義演算子を適用します。この動作はテーブル権限が検査される前に生じるので、悪意のユーザが本来参照が許されていないテーブル列の値を取得するために、この振る舞いを悪用するおそれがありました。この対策として、演算子の実装関数が情報を漏らさないことが確実（LEAKPROOF属性が真）でなく、呼び出しているユーザが統計情報を必要とするテーブル列の読み取り権限を持っていない場合には、デフォルトの見積で代用するようになりました。実用上たいていのケースで、これら基準のうち少なくとも一つを満たします。(CVE-2017-7484)
</p>
<li>libpq で PGREQUIRESSL 環境変数を認識するように復旧されました。  (Daniel Gustafsson) (9.6)(9.5)(9.4)(9.3)</li>
<p>
この環境変数の処理が PostgreSQL 9.3 で意図せず欠落していましたが、ドキュメントには残っていました。ユーザが SSL 暗号化接続を強制させるために、機能しなくなっていた本環境変数を頼っているかもしれないため、セキュリティ上の危険が生じます。
</p>
<p>
PGREQUIRESSL 環境変数の処理が復旧されました。しかし、9.3 以降で正しく動作していた設定を壊さないようにするため、PGSSLMODE よりも低い優先順位で扱われます。(CVE-2017-7485)
</p>
<li>ロジカルデコーディング中の無効であるかもしれない初期スナップショットについて修正されました。  (Petr Jelinek, Andres Freund) (9.6)(9.5)(9.4)</li>
<p>
ロジカルデコーディングのレプリケーションスロットむけに作られた初期スナップショットは不正なものである可能性がありました。これは、ロジカルデコーディングを使うサードパーティツールが不完全あるいは一貫性に欠ける初期データをコピーする原因となります。スロットを作るときにソースサーバが忙しい場合や、他のロジカルスロットが既に在った場合に発生しやすい動作です。
</p>
<p>
ロジカルデコーディングに依存したレプリケーションツールを使っていて、それがレプリケーション開始時に空でないデータセットをコピーするのであれば、本アップデート導入後にレプリカを再作成するか、ソースサーバと比較してデータ検証することを推奨します。
</p>
<li>UNLOGGED インデックスの初期フォークが破損する可能性があり、修正されました。  (Robert Haas, Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
クラッシュと再起動の後に、無効な状態にセットされている UNLOGGED インデックスがもたらされる恐れがありました。この問題はインデックスを削除して再作成するまで持続します。
</p>
<li>スタンバイサーバが準備されたがコミットされていない 2 相トランザクションをリプレイしたときの pg_subtrans 項目の不正な再構築が修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
たいていの場合、これは目に見える悪影響を及ぼしませんが、稀な場合に pg_subtrans の循環参照をもたらし、2 相トランザクションにより変更された行を検査する問い合わせで無限ループをひき起こす可能性があります。
</p>
<li>文字列バッファの初期化失敗により、wal sender にてクラッシュする可能性が回避されました。  (Stas Kelvich, Fujii Masao) (9.6)(9.5)(9.4)</li>
<li>GiST インデックスで index-only の最近傍検索を再スキャンする時にクラッシュする可能性があり、修正されました。  (Tom Lane) (9.6)(9.5)</li>
<li>マスタプロセス (postmaster) による複数パラレルワーカプロセスの起動の遅延を防止するようになりました。  (Tom Lane) (9.6)</li>
<p>
2 つ以上のワーカープロセスに向けた問い合わせの要求を満たす前に、あるいは複数問い合わせが同時にワーカーへ要求されたときに、著しい遅延(数十秒)が生じる可能性がありました。本現象は多くのプラットフォームでは不運なタイミングでのみ発生しますが、一部プラットフォームではよくあるケースです。
</p>
<li>マスタプロセス (postmaster) におけるバックグラウンドワーカプロセスに対する fork() 失敗時の処理が修正されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
これまでは、プロセスが正常に起動されたかのようにワーカ状態の一部を更新していて、その後に混乱をひき起こしていました。
</p>
<li>入れ子の集合演算のプラン作成で「ERROR:  no relation entry for relid 0」が生じる可能性があり、修正されました。  (Tom Lane) (9.6)</li>
<pre>
(障害が発生する SQL の例)
db1=# (SELECT 1,2,3 UNION SELECT 4,5,6 ORDER BY 1,2) INTERSECT SELECT 4,5,6;
ERROR:  no relation entry for relid 0
</pre>
<li>パラレル問い合わせのプラン作成の各種の小さな問題が修正されました。  (Robert Haas) (9.6)</li>
<p>
プラン選択が不適切になる場合がありえました。
</p>
<li>カスタムスキャンに対して物理ターゲットリスト最適化の適用を回避するようになりました。  (Dmitry Ivanov, Tom Lane) (9.6)(9.5)</li>
<p>
この最適化はタプルの全ての列を取得するのが低コストでできることを想定しています。通常タプルにおいてはこれは真ですが、カスタムスキャンプロバイダーに対してはそうでないかもしれません。
</p>
<li>CREATE POLICY で「FOR ALL ...」を適用するとき、正しい副式を使うようになりました。  (Stephen Frost) (9.6)(9.5)</li>
<p>
一部ケースで USING 制約がより適切であるときに WITH CHECK 制約が適用されました。
</p>
<p>
修正前ではポリシーに反する値への更新、および更新後の値の返却が可能でした。以下例は修正後はエラーとなります。
</p>
<pre>
(誤動作例)
db1=# CREATE POLICY alice_policy ON t TO alice
        USING (value &gt; 0) WITH CHECK (true);
db1=# SET session authorization alice;
db1=# SELECT * FROM t;
 value
-------
    1
(1 rows)

db1=# UPDATE t SET value = value * -1 WHERE value = 1 RETURNING *;
 value
-------
   -1
(1 row)

UPDATE 1
</pre>
<li>拡張モジュールのスクリプトでの問い合わせパース処理において、直前の DDL 命令の結果を確実に把握するように修正されました。  (Julien Rouhaud, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
拡張モジュールのスクリプトファイルのコマンド間では、キャッシュを更新する手順が欠けているので、ALTER TABLE ... RENAME ... などの DDLコマンドに続くDMLコマンドは直前の定義変更に気づかないかもしれませんでした。
</p>
<pre>
(例：以下のスクリプトで最後の UPDATE が失敗する可能性がありました)

CREATE TABLE xxx_ext_table (col_old INT);
ALTER TABLE xxx_ext_table RENAME col_old TO col_new;
UPDATE xxx_ext_table SET col_new = 0;
</pre>
<li>ALTER TABLE ... ALTER COLUMN TYPE で既存インデックスを再構築する場合に、テーブルスペース権限チェックを省略するようになりました。  (Noah Misch) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本コマンドは、実行ユーザがその時点でインデックスが置かれているテーブルスペースに CREATE 権限を持っていないと失敗していました。この振る舞いは役に立たないと考えられ、検査を省略し、この場合にはインデックスを再構築できるようにしました。
</p>
<li>制約が NO INHERIT であるときには、ALTER TABLE ... VALIDATE CONSTRAINT が子テーブルにまで再帰処理しないように修正されました。  (Amit Langote) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この修正は、子テーブルに一致する制約が存在しないときに望まれない「ERROR:  constraint does not exist」が生じるのを防ぎます。
</p>
<li>ソーステーブルの行単位セキュリティが有効のときに「COPY ... TO ...」でダングリングポインタを回避するように修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
通常は無害ですが、ときどき予期せぬエラーやクラッシュをひき起こしていました。
</p>
<li>CLUSTER および VACUUM FULL で、既に閉じたシステムキャッシュ (relcache) 項目へのアクセスを回避するように修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
運が悪いとき、本障害は対象テーブルのインデックスの誤った永続性設定 (UNLOGGEDか、TEMPORARYか、等) での再構築をひき起こす可能性がありました。
</p>
<li>ページピン (PIN) の競合によりスキャンできないページについて適切に計算するように VACUUM が修正されました。  (Andrew Gierth) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この障害により、テーブルタプル数の過小見積が生じがちでした。競合の多い小さいテーブルという最悪ケースでは、VACUUM がテーブルは0行であると誤って報告する可能性があり、非常に悪いプラン選択をもたらしました。
</p>
<li>ハッシュ結合の中での大量タプル転送のループ処理が問い合わせキャンセル要求で割り込み可能であることが保証されました。  (Tom Lane, Thomas Munro) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
ハッシュ結合でキャンセルがすぐには効かない挙動が報告されていました。
</p>
<li>SP-GiST インデックスで、ある種の box 型への演算子における誤った対応が修正されました。  (Nikita Glukhov) (9.6)</li>
<p>
&amp;&lt;、&amp;&gt;、&amp;&lt;|、および、|&amp;&gt; 演算子を使う SP-GiST インデックススキャンは、誤った応答をもたらしていました。要素が接している場合の判定に影響があります。
</p>
<li>interval 型の比較における整数オーバーフロー問題が修正されました。  (Kyotaro Horiguchi, Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
およそ 296000 年以上の時間間隔の場合に interval 型の比較演算子が誤った応答を返すおそれがありました。このような大きい値が含むカラムのインデックスは、インデックス内容が不正であるかもしれないので、バージョンアップ後にインデックス再作成すべきです。
</p>
<p>
64bit 整数の日付時刻を使う方式(デフォルト)でビルドした場合に該当します。
</p>
<li>tableforest 引数が false のときに妥当な出力をするように cursor_to_xml() 関数が修正されました。  (Thomas Munro, Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは、&lt;table&gt; 要素で括られず、&lt;row&gt; 要素の並びだけが出力されていました。
</p>
<pre>
(誤った出力例)
db1=# DECLARE c CURSOR WITH HOLD FOR SELECT * FROM t1;
db1=# SELECT cursor_to_xml('c'::refcursor, 2, true, true, '');
                        cursor_to_xml
-------------------------------------------------------------
 &lt;row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;+
   &lt;id&gt;1&lt;/id&gt;                                               +
   &lt;v&gt;c4ca4238a0b923820dcc509a6f75849b&lt;/v&gt;                  +
 &lt;/row&gt;                                                     +
                                                            +
 &lt;row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;+
   &lt;id&gt;2&lt;/id&gt;                                               +
   &lt;v&gt;c81e728d9d4c2f636f067f89cc14862c&lt;/v&gt;                  +
 &lt;/row&gt;                                                     +
                                                            +
</pre>
<li>float8_timestamptz() および make_interval() 関数における端数丸めの問題が修正されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
これら関数は、浮動小数点の値から整数のマイクロ秒に変換するときに、丸めでなく、切り捨てを行っていました。これにより予期せぬ境界条件エラーをひき起こすおそれがありました。
</p>
<p>
切捨てでなく C 言語関数 rint (最も近い整数値への丸め) を使うように実装が修正されました。
</p>
<li>pg_get_object_address() 関数が正しく演算子族のメンバーを処理するように修正されました。  (&Aacute;lvaro Herrera) (9.6)(9.5)</li>
<li>非排他バックアップを停止しようとしたときの pg_stop_backup() 関数のキャンセルについて修正されました。  (Michael Paquier, David Steele) (9.6)</li>
<p>
非排他バックアップが終了するのを待つ間に pg_stop_backup() 関数がキャンセルされた場合、関連する状態が不整合状態になり、新たな非排他バックアップを開始できない可能性がありました。また、その他の細かな問題もありました。
</p>
<li>pg_timezone_names ビューの性能が改善されました。  (Tom Lane, David Rowley) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>メモリコンテキストに多数の大きいブロックが含まれる場合に、メモリ管理のオーバーヘッドが軽減されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<li>lseek() と close() の稀な場合に生じるエラーに対する処理がより厳格に修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
どちらも通常ではあまり失敗しないシステムコールですが、失敗した場合にはかなり混乱するおそれがありました。
</p>
<li>マスタプロセス (postmaster) が Windows サービスとして実行されているかの検査が誤っており、修正されました。  (Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本障害はアクセス不能であるときにイベントログに書き出しを試みて、全くログが書かれない結果をひき起こしました。
</p>
<li>ecpg が COMMIT PREPARED と ROLLBACK PREPARED に対応するように修正されました。  (Masahiko Sawada) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ecpg で $ でクォートされた文字列リテラルを処理する際の二重解放エラーが修正されました。  (Michael Meskes) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
起こりうるのは ecpg コマンドのクラッシュです。
</p>
<li>pgbench が --connect オプションと --rate オプションの組み合わせを正しく処理するように修正されました。  (Fabien Coelho) (9.6)</li>
<li>pgbench がドキュメント記載されている --builtin という長い形式のオプションを無視しないように修正されました。  (Tom Lane) (9.6)</li>
<li>pg_dump/pg_restore が --clean オプションを使ったときに public スキーマの権限を正しく処理するように修正されました。  (Stephen Frost) (9.6)</li>
<p>
他のスキーマは権限が与えられない状態から始まりますが、public スキーマはそうではありません。--clean オプションのために削除とリストアを行うときには特別な対応が必要でした。
</p>
<li>pg_dump でコメントとセキュリティラベルに対する誤ったラベル付けが修正されました。  (Giuseppe Broccolo, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
単純な使い方の場合には悪影響はありませんが、スキーマを指定したリストアで含まれるべきコメントが無視される可能性がありました。これはダンプ時にそれらが関連するオブジェクトのスキーマに属するという印付けがされなかったためです。
</p>
<li>pg_dump の手続き言語の初期権限のための問い合わせのタイプミスが修正されました。  (Peter Eisentraut) (9.6)</li>
<p>
本障害により pg_dump は常に手続き言語は初期権限を持たないとみなしていました。ほとんどの手続き言語は実際のところそうであるため、本障害による悪影響はおそらく稀です。
</p>
<li>pg_restore -l で SQL オブジェクト名に改行が含まれるときに、無効なリストファイルが出力されるのを回避するように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>pg_upgrade がラージオブジェクトに付けられたコメントとセキュリティラベルを移行するように修正されました。  (Stephen Frost) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでもラージオブジェクトは新データベースに正しく移行されていましたが、付加されたコメントとセキュリティラベルが失われていました。
</p>
<li>contrib/adminpack の pg_file_write() 関数のエラー処理が改善されました。  (Noah Misch) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
特に fclose() で報告されたエラーを検知できていませんでした。
</p>
<li>contrib/dblink で、新たな無名接続を確立するときの前の無名接続のリークが回避されました。  (Joe Conway) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>contrib/pg_trgm の正規表現からのトリグラム展開が修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
一部のケースで何にもマッチできない壊れたデータ構造が生み出され、トリグラムインデックスを使う GIN または GiST のインデックススキャンが正規表現へのマッチを何も見つけられない結果（誤った応答）になります。
</p>
<pre>
(誤動作例：pg_trgm インデックスを使うと結果が 0 件になってしまう)
db1=# CREATE TABLE ttrig (id int primary key, txt text);
db1=# INSERT INTO ttrig SELECT g, md5(g::text) FROM generate_series(1, 10000) g;
db1=# SELECT count(*) FROM ttrig WHERE txt ~ '[ab]{2}-?[ab]{2}';
 count
-------
    55
(1 row)

db1=# CREATE INDEX trgm_idx ON ttrig USING gist (txt gist_trgm_ops);
db1=# SELECT count(*) FROM ttrig WHERE txt ~ '[ab]{2}-?[ab]{2}';
 count
-------
     0
(1 row)
</pre>
<li>contrib/postgres_fdw で送出可能な拡張モジュールで提供される関数を含む結合条件をリモートサーバ側で実行させる (プッシュする) ことが可能になりました。  (David Rowley, Ashutosh Bapat) (9.6)</li>
<li>(Windows の) MSVC ビルドで Tcl 8.6 がサポートされました。  (&Aacute;lvaro Herrera) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>タイムゾーンライブラリが IANA release tzcode2017b に更新されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
2038 年 1 月の夏時間の遷移に影響を及ぼすバグが修正されています。
</p>
<li>タイムゾーンデータファイルが tzdata release 2017b に更新されました。   (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
チリ、ハイチ、モンゴルの夏時間法の変更、エクアドル、カザフスタン、リベリア、スペインの歴史的修正が含まれます。南米、太平洋、インド洋、および、一部アジア・中東の国々における多数のタイムゾーンが、数字による省略形に切り替えられました。
</p>
<p>
IANA タイムゾーンデータベースはこれまで文字による省略形を全てのタイムゾーンに提供していて、ときに地元住民の間でほとんどあるいは全く使われない省略形を作成していました。IANA は英語の省略形が現実に使われている形跡がないゾーンにおいては UTC オフセット数値を使うことを選ぶという方針に転換しようとしてるところです。少なくともしばらくの間、PostgreSQL はタイムスタンプの入力に、このような削除された省略形を引き続き受け入れます。しかし、それらは pg_timezone_names ビューには現れず、出力にも使用されなくなります。
</p>
<li>(Windows の) MSVC ビルドにおいて、POSIX 形式のタイムゾーン名に対して正しい夏時間規則を使うようになりました。  (David Rowley) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
Microsoft の MSVC ビルドスクリプトは posixrules ファイルをタイムゾーンディレクトリツリーにインストールするのを怠っていました。この結果、POSIX 形式のタイムゾーン名に対し想定される夏時間の振る舞いについて、タイムゾーンコードがビルトインの規則に戻ってしまっていました。
</p>
<p>
歴史的な理由により、その組み込み規則は、米国が2007年より前に使っていた夏時間規則（すなわち、4月最初の日曜日と 10月最終の日曜日の変更）に引き続き対応しています。この修正にともない、POSIX 形式のゾーン名は US/Eastern ゾーンの現在および歴史的夏時間遷移日を使います。そのようにしたくない場合には、posixrules ファイルを削除するか、他のゾーンファイルのコピーで置き換えてください。変更を反映させるにはサーバ (サービス) の再起動が必要です。
</p>
<li>GROUPING SET 列のデータ型がハッシュ可能だけれどソート不能であるときのクラッシュまたは誤った応答が修正されました。  (Pavan Deolasee) (9.5)</li>
<p>
たとえば xid 型がハッシュ可能でソート不能です。
</p>
<li>contrib/postgres_fdw で、リモートサーバに問い合わせキャンセル要求を送出するようになりました。  (Michael Paquier, Etsuro Fujita) (9.5)(9.4)(9.3)</li>
<p>
これまではローカルでの問い合わせキャンセル要求が、既に送ったリモート問い合わせを早く終わらせることはありませんでした。これは 9.6 で修正された内容のバックポートです。
</p>
<li>OpenSSL 1.1.0 に対応しました。  (Heikki Linnakangas, Andreas Karlsson, Tom Lane) (9.4)(9.3)(9.2)</li>
<p>
9.5 以降のバージョン系列で既に対応している内容のバックポートです。多数のプラットフォームが新たな OpenSSL バージョンを取り込みつつあるので、必要となりました。
</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 9.2.20 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-20/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 06:40:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=765</guid>

					<description><![CDATA[このリリースは 9.2.19 からの修正リリースです。 9.2.x からのアップデートではダンプ、リストアは不要です。 ただし、下記の 1 番目を確認してください。追加でインデックス再作成が必要な場合があります。 また、 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.19 からの修正リリースです。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、下記の 1 番目を確認してください。追加でインデックス再作成が必要な場合があります。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a>を参照してください。</p>
<p><span id="more-765"></span></p>
<h3>PostgreSQL 9.2.19 から 9.2.20 への変更点</h3>
<p>9.6.2、9.5.6、9.4.11、9.3.16、9.2.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>CREATE INDEX CONCURRENTLY によるインデックス作成で破損したインデックスをもたらす可能性のある競合状態が修正されました。  (Pavan Deolasee, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
以前にはインデックスされていなかった列にかかっているインデックスを作るのに CREATE INDEX CONCURRENTLY が使われていたなら、同時実行のトランザクションに更新された行は、誤ったインデックスエントリを受け取るおそれがありました。
</p>
<p>
CREATE INDEX CONCURRENTLY を使って作成されたインデックスを、バージョンアップ後に再作成することを推奨します。
</p>
<li>システムテーブルのスキャンに使われる特別なスナップショットが、早すぎるデータ除去処理により無効になることが無いように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
バックエンドが自身の最も古いxminを知らせるときにこのスナップショットを考慮しておらず、潜在的に未だ必要なデータを削除する並列のバキューム操作を許していました。
</p>
<p>
この障害は接続時に「FATAL:  cache lookup failed for relation 1255」を発生させました。
</p>
<li>BRIN インデックスの誤った WAL 出力が修正されました。  (Kuntal Ghosh) (9.6)(9.5)</li>
<p>
インデックスタプルを異なるページに移動するとき、BRIN の範囲マップページ (revmap page) むけに出力された WALレコードが不正でした。その WAL をリプレイすると、インデックスの関連する部分は使い物にならず、再計算を強いられます。
</p>
<li>無条件に UNLOGGED テーブルの初期フォーク生成の WAL 出力をするようになりました。  (Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは wal_level = minimal のときには省略されていましたが、実際にはこの場合でもクラッシュ後リカバリにて確実に正しく UNLOGGED テーブルを空に初期化するために必要でした。
</p>
<li>統計情報収集器 (stats collector process) が、ホットスタンバイ動作中に落ちたときにも再起動されるようになりました。 (Takayuki Tsunakawa) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは子プロセス自動再起動の仕組みから抜け落ちていて、ホットスタンバイサーバでプロセスが非正常に終了すると終了したままになっていました。
</p>
<li>スタンバイサーバ開始時に有効であったときに hot_standby_feedback 設定による動作が確実に正しく動作するようになりました。  (Ants Aasma, Craig Ringer) (9.6)(9.5)(9.4)(9.3)</li>
<p>
スタンバイサーバで設定を on に変更して reload でなくサーバ再起動した場合に必要な初期化が行われませんでした。
</p>
<li>ホットスタンバイが衝突している問い合わせを待機している間、割り込みのチェックをするようになりました。  (Simon Riggs) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>稀なケースで恒常的に autovacuum launcher プロセスが再生成される動作を回避するようになりました。  (Amit Khandekar) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
autovacuum = off が設定されていて、XID 凍結が必要なテーブルがいくつかあって、それらのテーブルは既に autovacuum worker で処理中であるときに、問題の動作が生じます。
</p>
<li>synchronous_standby_name で同期スタンバイの数に 0 を許さないようになりました。  (Fujii Masao) (9.6)</li>
<p>
同期スタンバイを 0 個にしたい場合には設定値全体に空文字列を与えてください。
</p>
<li>ユーザ毎の接続数上限にバックグラウンドワーカプロセスを数えないようになりました。  (David Rowley) (9.6)</li>
<p>
振る舞いが変更されたのは max_connections 設定による上限ではなく、ALTER ROLE ... CONNECTION LIMIT ... コマンドによる接続数上限です。
</p>
<li>拡張モジュールの要素オブジェクトが削除できる場合のチェックが修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
拡張モジュールのアップグレードスクリプトは要素オブジェクトを削除できなければいけませんが、serial 型に付随するシーケンスについてそれができませんでした。
</p>
<li>ALTER EXTENSION ... ADD/DROP コマンドにて正しく動作するように、拡張モジュールの要素オブジェクトの初期権限の探知が修正されました。  (Stephen Frost) (9.6)</li>
<p>修正により、オブジェクトが拡張モジュールに追加された時点の権限は、そのデフォルト権限と見做され、後の権限変更だけが以降の pg_dump 実行でダンプされるようになります。拡張モジュールに属するオブジェクトへの権限付与が正しくダンプされない問題が報告されていました。
</p>
<li>インデックス再作成を伴う ALTER TABLE コマンドで、インデックスのテーブルスペース割り当てを確実に維持するように修正されました。  (Tom Lane, Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまで、ALTER TABLE ... ALTER TYPE を実行して、インデックス再作成が生じた場合、元のテーブルスペースではなく、その時点の default_tablespace 設定やデータベースのデフォルトに基づいたテーブルスペース上で再作成が行われました。さらに使用するテーブルスペースがシステムテーブルの情報と一致しないため、当該インデックスがアクセス不能になり、SQL 問い合わせに以下エラーが生じることがありました。
</p>
<pre>
ERROR:  could not open file "pg_tblspc/16567/PG_9.6_201701011/16456/16789":
No such file or directory
</pre>
<li>ALTER TABLE ... ALTER CONSTRAINT で外部キー制約が遅延可能かを変更するときのトリガ関数プロパティの誤った更新が修正されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
その後のトリガ駆動時に奇妙な失敗をひき起こすおそれがあります。トリガが働く SQL 実行時に、以下のエラーが出る障害動作が報告されました。
</p>
<pre>
ERROR:  AfterTriggerSaveEvent() called outside of query
</pre>
<li>被参照テーブルに対する保留トリガイベントがあるときに外部キー制約を削除しないように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
保留トリガイベントとはトランザクション末尾で処理をすることになっている延期されたトリガ処理を指します。以下の操作でエラーが出るようになりました。
</p>
<pre>
db1=# BEGIN;
db1=# SET CONSTRAINTS ALL DEFERRED ;
db1=# INSERT INTO t15 VALUES (1); -- DEFERRABLEなトリガを駆動する操作

db1=# ALTER TABLE t15 DROP CONSTRAINT fk_t15_c1_fkey;
ERROR:  cannot ALTER TABLE t15 because it has pending trigger events
</pre>
<p>
以前は制約の削除は成功し、COMMIT 時になって以下エラーが出ていました。
</p>
<pre>
ERROR:  could not find trigger NNN
または
ERROR:  relation NNN has no triggers
</pre>
<li>子テーブルが親テーブルと異なる列順である場合の ALTER TABLE ... SET DATA TYPE ... USING ... コマンドの動作が修正されました。  (&Aacute;lvaro Herrera) (9.6)(9.5)</li>
<p>
エラーが発生することがありました。典型的には以下エラーが生じます。
</p>
<pre>
ERROR:  attribute N has wrong type
</pre>
<li>WITH OIDS 指定のテーブルが、同じくWITH OIDS 指定の親テーブルと ALTER TABLE ... INHERIT コマンドで関連づけられた場合の、OID 列の処理が修正されました。  (Amit Langote) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この場合 OID 列は通常のユーザ定義列と同様に扱われるべきでしたが、そうなっておらず、後の継承の変更で奇妙な振る舞いをひき起こしました。
</p>
<pre>
(修正前の動作例： 親テーブルから列の除去は可能だが、OID 除去はエラーになっている)
db1=# CREATE TABLE t17c (a int, b int) WITH """""""""""""""""""""""""""""""""""""""""""OIDS;
db1""""""""""""""""""""""""""""""""""""""""""" =# CREATE TABLE t17p (a int, b int) WITH """""""""""""""""""""""""""""""""""""""""""OIDS;
db1""""""""""""""""""""""""""""""""""""""""""" =# ALTER TABLE t17c INHERIT t17p;
db1=# ALTER TABLE t17p DROP a;
db1=# ALTER TABLE t17p SET WITHOUT OIDS;
ERROR:  relation 16678 has non-inherited attribute "oid"
</pre>
<li>CREATE TABLE ... LIKE ... WITH OIDS コマンドが、LIKE で参照されるテーブルに OID がある無しにかかわらず、確実にテーブルを WITH OIDS で作成するように修正されました。  (Tom Lane) (9.6)</li>
<p>
LIKE を伴ったときに作られるテーブルが WITH OIDS にならない場合がありました。
</p>
<li>先にビュー問い合わせを置き換えてから、新しいビューオプションを適用するように、CREATE OR REPLACE VIEW コマンドを修正しました。  (Dean Rasheed) (9.6)(9.5)(9.4)</li>
<p>
これまでは以下のように元のビュー問い合わせには適合しないオプションを与えたときにエラーが生じていました。
</p>
<pre>
db1=# CREATE TABLE t19 (a int, b text);
db1=# CREATE VIEW v19 AS SELECT null::int AS a;
db1=# CREATE OR REPLACE VIEW v19
        AS SELECT * FROM t19 WHERE a &gt; 0 WITH CHECK OPTION;
ERROR:  WITH CHECK OPTION is supported only on automatically updatable views
HINT:  Views that do not select from a single table or view are not
automatically updatable.
</pre>
<li>ALTER TEXT SEARCH CONFIGURATION のとき、正しい OID を報告するようになりました。  (Artur Zakirov) (9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでイベントトリガに誤ったカタログ OID が報告されてました。
</p>
<li>コミットタイムスタンプの仕組みが、特別 XID の FrozenTransactionId (=2) と BootstrapTransactionId (=1) について問われた時に失敗しないように修正されました。 (Craig Ringer) (9.6)(9.5)</li>
<p>
以下の関数呼び出しがエラーを出さず、NULL を返すようになります。
</p>
<pre>
(修正前の動作例)
db1=#  SELECT pg_xact_commit_timestamp('1'::xid);
ERROR:  cannot retrieve commit timestamp for transaction 1
db1=#  SELECT pg_xact_commit_timestamp('2'::xid);
ERROR:  cannot retrieve commit timestamp for transaction 2
</pre>
<li>ビューの reloptions を通常テーブルの reloptions のように誤用していたのが修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
症状としては、以下例のような問い合わせで、実際には問題ないにも拘らず「ERROR:  ON CONFLICT is not supported ...」エラーが出ることです。
</p>
<pre>
(修正前のエラー例)
db1=# CREATE TABLE t22 (f1 int PRIMARY KEY, f2 text);
db1=# CREATE VIEW v22  AS SELECT * FROM t22 WITH CASCADED CHECK OPTION;

db1=# INSERT INTO v22 VALUES (1,'foo')
        ON CONFLICT (f1) DO UPDATE SET f2 = excluded.f2;

ERROR:  ON CONFLICT is not supported on table "v22" used as a catalog table
LINE 1: insert into v22 values (1,'foo') on conflict (f1) do update ...
</pre>
<li>ON CONFLICT 構文を列数が多いテーブルに使った際に発生する障害が修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
実際には列数上限の半分程度であるのにエラーが生じました。
</p>
<pre>
(修正前の障害動作例)
db1=# INSERT INTO t23 VALUES (&lt;&lt;...831個の値...&gt;&gt;)
        ON CONFLICT (id) DO UPDATE SET &lt;&lt;...830個の代入式...&gt;&gt;;
ERROR:  target lists can have at most 1664 entries
</pre>
<li>削除した列を伴うテーブルに対する INSERT または UPDATE で、削除された列への値が供給されたという偽性のエラーが生じることがあり、修正されました。  (Tom Lane) (9.6)</li>
<pre>
(障害動作例)
db1=# CREATE TABLE t24 (c1 int, c2 int);
db1=# ALTER TABLE t24 DROP c2;
db1=# CREATE FUNCTION f24(do_update boolean)
        RETURNS void LANGUAGE sql VOLATILE AS $$
          UPDATE t24 SET c1 = NULL WHERE do_update; $$;
db1=# SELECT f24(false);
ERROR:  table row type and query-specified row type do not match
DETAIL:  Query provides a value for a dropped column at ordinal position 2.
CONTEXT:  SQL function "f24" statement 1
</pre>
<li>UPDATE の SET 句の代入元の式で foo.* の複数カラム展開が防止されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)</li>
<p>
以下のような奇妙なエラーメッセージが生じていました。修正によりレコード型であることを認識するようになりました。
</p>
<pre>
(障害動作例)
db1=# CREATE TABLE t25 (id int primary key, c1 int, c2 int);
db1=# INSERT INTO t25 VALUES (1, 100, 100);
db1=# UPDATE t25 SET c1= t25.*;
ERROR:  UPDATE target count mismatch --- internal error

(正しいエラー)
ERROR:  column "c1" is of type integer but expression is of type record
</pre>
<li>複数行 VALUES 値に対して精密に列データ型修飾が決定されるようになりました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは、最初のデータでデータ型修飾を決めていて、以下例のような奇妙なデータが作れてしまいました。
</p>
<pre>
db1=# CREATE TABLE t26 AS SELECT * FROM (
        VALUES ('ABCDE'::varchar(5)), ('01234567890')
        ) v (string);
db1=# d t26
            Table "public.t26"
 Column |         Type         | Modifiers
--------+----------------------+-----------
 string | character varying(5) |

db1=# SELECT * FROM t26;
              string
----------------------------------
 ABCDE
 01234567890
(2 rows)
</pre>
<li>文字列末尾で完結していないユニコードのサロゲートペアについてエラーを投げるようになりました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本来はユニコードのサロゲートペアの先頭文字には末尾文字が続かなければいけませんが、先頭文字がユニコードリテラル（U&'....' や U&"...."）で文字列末尾にあらわれた場合にチェック漏れがあり、データ投入等ができてしまいました。
</p>
<pre>
(修正後に正しくエラーが出る例)
db1=# INSERT INTO t27 VALUES (U&amp;'d80d');
ERROR:  invalid Unicode surrogate pair at or near "'"
LINE 1: INSERT INTO t27 VALUES (U&amp;'d80d');
</pre>
<li>同じ列を対象にした複数の順序集約があって遷移状態が共有できる場合の、DISTINCT と順序集約の実行が修正されました。  (Heikki Linnakangas) (9.6)</li>
<p>
そのような SQL 処理でクラッシュをひき起こすことがありました。
</p>
<li>tsquery のフレーズ検索演算子の実装が修正されました。  (Tom Lane) (9.6)</li>
<p>
フレーズ演算子と組み合わせて &、|、! 演算子が使われている場合に、これまで奇妙な検索結果を返したり、クラッシュをひき起こすことがありました。
</p>
<p>
誤動作例を示します。一つ目は q の後に x z または y z が続くという意味なので、True にならなければいけません。二つ目は x 以外の後に y が続くパターンが含まれるかどうかですから True にならなければいけません。
</p>
<pre>
(修正前の誤った動作例)
db1=# SELECT to_tsvector('simple', 'q y z') @@ 'q &lt;-&gt; (x | y &lt;-&gt; z)';
 ?column?
----------
 f
(1 row)

db1=# SELECT to_tsvector('simple', 'x y q y') @@ '!x &lt;-&gt; y';
 ?column?
----------
 f
(1 row)
</pre>
<li>空文字列に対して否定テキスト検索がマッチするようになりました。  (Tom Dunstan) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまで GIN インデックス検索ではマッチしましたが、シーケンシャルスキャンや GiST インデックス検索の際にはマッチしませんでした。
</p>
<pre>
(修正前の例: 以下は t が返るようになります)
db1=# SELECT to_tsvector('simple', '') @@ '!foo';
 ?column?
----------
 f
(1 row)
</pre>
<li>ts_rewrite() が非トップレベルのサブツリーを空クエリで置き換えた際のクラッシュが防止されました。  (Artur Zakirov) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<pre>
(クラッシュが起きる例)
db1=# SELECT ts_rewrite(to_tsquery('5 &amp; (6 | 5)'),
                        to_tsquery('5'), to_tsquery(''));
NOTICE:  text-search query doesn't contain lexemes: ""
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.
</pre>
<li>ts_rewrite() の性能問題を修正しました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
引数に与える内容の規模が大きいと非常に遅くなるのが改善されました。また、処理中に中断できる箇所を増やしました。
</p>
<li>ts_rewrite() の入れ子になった NOT 演算子の扱いが修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
間違った結果を返すことがありました。
</p>
<pre>
(修正前の誤った結果)
db1=# SELECT ts_rewrite(
        ts_rewrite('new &amp; !york ', 'york', '!jersey'), 'jersey', 'mexico');
    ts_rewrite
-------------------
 'new' &amp; !'mexico'
(1 row)

(正しい結果)
     ts_rewrite
--------------------
 'new' &amp; !!'mexico'
(1 row)
</pre>
<li>遷移関数に array_append() を使うユーザ定義集約の速度が改善されました。  (Tom Lane) (9.6)(9.5)</li>
<li>array_fill() が空配列を適切に扱えるように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
以下のように array_fill() で長さゼロの空配列を作った結果、0 次元になっておらず '{}' と一致しない動作がありました。
</p>
<pre>
(修正前の誤った動作例)
db1=# SELECT a, a = '{}' AS is_eq, array_dims(a)
        FROM (SELECT array_fill(NULL::int, array[0]) as a) ss;
 a  | is_eq | array_dims
----+-------+------------
 {} | f     | [1:0]
(1 row)
</pre>
<li>レコードの配列を処理するときに、array_position() および array_positions() でクラッシュの可能性があり、修正されました。  (Junseok Yang) (9.6)(9.5)</li>
<pre>
(クラッシュをひき起こす例)
db1=# SELECT array_position(ids, (1, 1)),
             array_positions(ids, (1, 1))
        FROM (VALUES (ARRAY[(0, 0), (1, 1)]),
                     (ARRAY[(1, 1)])        ) AS f (ids);
</pre>
<li>内部実装関数 quote_literal_cstr() における 1 バイトのバッファオーバーランが修正されました。  (Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
quote_literal_cstr() は format() 関数などで使われています。入力がシングルクオートとバックスラッシュだけから構成されている場合にのみ発生します。
</p>
<p>
以下のような不明な警告が出ることがありました。
</p>
<pre>
db1=# SELECT format('%L', E'&yen;&yen;');
WARNING:  detected write past chunk end in ExprContext 0x55c65ff98fa8
 format
--------
 E'&yen;&yen;'
(1 row)
</pre>
<li>pg_start_backup() と pg_stop_backup() が複数並行で実行されるのが防止されました。  (Michael Paquier) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本修正は、これらの関数の並列実行が試みられた際に、アサートエラーや不正な動作が生じるのを回避します。
</p>
<li>何もしない AT TIME ZONE による変換を取り除こうとする書換えを使用しないようになりました。  (Tom Lane) (9.6)(9.5)</li>
<p>
何もしない AT TIME ZONE による変換とは、元々 UTC での値が格納された timestamp with time zone 型のデータに AT TIME ZONE 'utc' として、timestamp without time zone 型のデータに変換する、などを指します。問い合わせで不適切なインデックス利用が生じて誤った結果が返る可能性がありました。
</p>
<li>実際に何もしないわけではない interval 型から interval 型へのキャストを無効にしないようになりました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
一部ケースで、低位フィールドをゼロにすべきキャストについて誤って何もしなくてよいと見なされました。
</p>
<pre>
(9.4.10 で報告された誤動作例 - 秒以下が切り捨てられるのが正しい)
db1=# SELECT x.y :: interval day to minute,
             (interval '02:47:15.375721') :: interval day to minute
             FROM (VALUES (interval '02:47:15.375721')) x (y);
        y        | interval
-----------------+----------
 02:47:15.375721 | 02:47:00
</pre>
<li>パラレルクエリに利用できるワーカ数が再スキャン中に減った場合のクラッシュが修正されました。  (Andreas Seltenreich) (9.6)</li>
<li>パラレルワーカに GUC パラメータを送るときの障害が修正されました。  (Michael Paquier, Tom Lane) (9.6)(9.5)</li>
<p>
set_config() 関数をパラレル実行させた際にクラッシュする事例が報告されました。
</p>
<li>PREPARE コマンドで作られたプリペアドステートメントでもパラレルプランを得られるようになりました。  (Amit Kapila, Tobias Bussmann) (9.6)</li>
<p>
これまでは PostgreSQL プロトコルの Parse メッセージで作られたプリペアドステートメントだけ対応していました。
</p>
<li>semi-join むけの誤ったパラレルプラン生成が修正されました。  (Tom Lane) (9.6)</li>
<p>
... WHERE EXISTS (...) 等を使った semi-join をともなう SQL において、パラレルプランで実行した場合に誤った結果が返ることがありました。
</p>
<li>プランナのパラレル結合むけの値の種類数の見積が修正されました。  (Robert Haas) (9.6)</li>
<p>
これらの見積が確実に（全体の値ではなく）各ワーカごとの予測行数を反映するようにされました。
</p>
<li>プランナが初期プランやサブプランを含むプランノードをパラレル化しようとしないように修正されました。  (Tom Lane, Amit Kapila) (9.6)</li>
<p>
比較的複雑なサブクエリを伴う SQL で、パラレル実行させた場合にアサートエラーが生じる例が報告されていました。
</p>
<li>外部テーブルオプションの変更により、キャッシュされたプランが確実に無効化されるようになりました。  (Amit Langote, Etsuro Fujita, Ashutosh Bapat) (9.6)(9.5)(9.4)(9.3)</li>
<p>
「ALTER FOREIGN TABLE ... OPTIONS (...)」で外部テーブルが参照するリモートのスキーマ、テーブルを変えた場合にもプランが更新されませんでした。
</p>
<pre>
(障害動作例)
db1=# CREATE FOREIGN TABLE ft (c1 integer, c2 varchar) SERVER link_server
        OPTIONS (schema_name 's1', table_name 't1');
db1=# PREPARE stmt_ft AS SELECT c1,c2 FROM ft;
db1=# EXECUTE stmt_ft;
 c1 |  c2
----+-------
  1 | s1.lt
(1 row)

db1=# ALTER FOREIGN TABLE ft OPTIONS
        (SET schema_name 's2', SET table_name 'lt');
db1=# ANALYZE;
db1=# EXPLAIN (COSTS OFF, VERBOSE) EXECUTE stmt_ft;
               QUERY PLAN
----------------------------------------
 Foreign Scan on public.ft
   Output: c1, c2
   Remote SQL: SELECT c1, c2 FROM s1.lt
(3 rows)
</pre>
<li>定数の GROUP BY句 を伴うソートされた部分集約むけに生成されたプランが修正されました。  (Tom Lane) (9.6)</li>
<p>
そのような SQL 実行に対して奇妙なプランナエラー「ERROR: invalid attnum: 0」が出る例が報告されました。
</p>
<li>CTE 参照を含む UNION ALL を処理する際に「ERROR:  could not find plan for CTE "..."」エラーが出るのが修正されました。  (Tom Lane) (9.6)</li>
<pre>
(障害動作例: 1 と 2 の最大値なので 2 が返るのが正しい)
db1=# WITH i(x) AS (VALUES (1::int)), j(y) AS (VALUES (2::int))
       SELECT max(x) FROM (SELECT x FROM i UNION ALL SELECT y FROM j) b;
ERROR:  could not find plan for CTE "i"
</pre>
<li>Material ノードを強制的にサブプランに加えるときの initplan の誤操作が修正されました。  (Tom Lane) (9.6)</li>
<p>
以下の形状の SQL で障害が報告されました。
</p>
<pre>
SELECT 1 IN (SELECT (SELECT 1));
SELECT 1 = ANY (SELECT (SELECT 1));
SELECT 1 = ALL (SELECT (SELECT 1));
</pre>
<p>
本障害により典型的にはエラー「ERROR:  plan should not reference subplan's variable」が生じます。
</p>
<li>semi-join、anti-join に対する外部キーに基づく結合の選択率見積が修正されました。同様に継承の場合も修正されました。  (Tom Lane) (9.6)</li>
<p>
外部キーを考慮にいれた新たなコードは、これらの場合には見積の劣化を引き起こしていました。
</p>
<li>拡張モジュールの設定テーブルであると印付けされたシーケンスのデータを出力するように pg_dump が修正されました。  (Michael Paquier) (9.6)</li>
<p>
シーケンスについて、pg_extension_config_dump() 関数で印をつけてもダンプで出力されない動作になっていました。
</p>
<li>pg_dump における ALTER DEFAULT PRIVILEGES ... REVOKE の誤操作が修正されました。  (Stephen Frost) (9.6)</li>
<p>
ALTER DEFAULT PRIVILEGES が通常の状態よりも権限を減らすのに使われている場合に pg_dump が必要な REVOKE コマンドを出力しませんでした。
</p>
<pre>
(通常より権限を減らす使い方の例 - これらが正しくダンプされません)
ALTER DEFAULT PRIVILEGES
  FOR ROLE myrole
  REVOKE SELECT ON TABLES FROM myrole;

ALTER DEFAULT PRIVILEGES
  FOR ROLE myrole
  REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
</pre>
<li>pg_dump が組み込み関数を使ったユーザ定義キャストとユーザ定義変換 (TRANSFORM) をダンプするように修正されました。  (Stephen Frost) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>「--create --if-exists」オプションを伴う pg_restoreが、アーカイブに認識できない DROP コマンドが含まれている場合に、よりよく動作するように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
これは現時点の具体的な障害を修正するわけではありませんが、将来より後のバージョンの pg_dump で生成されたアーカイブを扱う際の振る舞いを改善すると考えられます。
</p>
<li>遅いストレージ I/O であるときの pg_basebackup の転送レート制限が修正されました。  (Antonin Houska) (9.6)(9.5)(9.4)</li>
<p>
ストレージ I/O が一時的に指定の転送レート制限よりも著しく遅かった場合、計算がオーバーフローして、残りの実行において転送レート制限が事実上使えませんでした。
</p>
<li>pg_basebackup でのシンボリックリンクされた pg_stat_tmp と pg_replslot サブディレクトリの扱いが修正されました。  (Magnus Hagander, Michael Paquier) (9.6)(9.5)(9.4)</li>
<p>
これらがシンボリックリンクであるとき誤った tar ヘッダが作られていました。
</p>
<li>スタンバイサーバでの WAL ファイルを含めた pg_basebackup で失敗の可能性があり、修正されました。  (Amit Kapila, Robert Haas) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
本来必要な分よりも手前の WALを要求し、それが得られないため失敗する可能性がありました。
</p>
<li>initdb が *_flush_after 設定について、正しいプラットフォーム固有のデフォルト値を postgresql.conf に書き入れるように改善されました。  (Fabien Coelho, Tom Lane) (9.6)</li>
<pre>
#bgwriter_flush_after = 0       # 0 disables,
                                # default is 512kB on linux, 0 otherwise

#checkpoint_flush_after = 0     # 0 disables,
                                # default is 256kB on linux, 0 otherwise
</pre>
<li>拡張された配列がドメインのチェック制約や CASE 実行で誤動作する可能性があり、修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
PL/pgSQL 関数がこのような文脈で続く操作で保持される必要のある配列値を変更あるいは削除して誤動作する可能性がありました。
</p>
<pre>
(報告された障害発生例: 奇妙なエラーが生じています)
db1=# CREATE FUNCTION x_domain_test_check(integer[]) RETURNS boolean AS
      $$ BEGIN RETURN true; END; $$ LANGUAGE plpgsql IMMUTABLE;
db1=# CREATE DOMAIN x_domain_test AS integer[]
        CHECK(x_domain_test_check(VALUE));
db1=# DO $$
        declare v_test x_domain_test;
        begin v_test := '{}'::x_domain_test; v_test := v_test || 1; end;
      $$ LANGUAGE plpgsql;
ERROR:  SPI_connect failed: SPI_ERROR_CONNECT
CONTEXT:  PL/pgSQL function inline_code_block line 5 at assignment
</pre>
<pre>
(CASEの誤動作例:
  以下を繰り返し実行すると CASE で 'right' 以外が返ることがありました)
BEGIN;
CREATE DOMAIN arrdomain AS int[];
CREATE FUNCTION make_ad(int,int) RETURNS arrdomain AS
  $$ declare x arrdomain;
     begin x := array[$1,$2]; return x; end $$ LANGUAGE PLPGSQL VOLATILE;
CREATE FUNCTION ad_eq(arrdomain, arrdomain) RETURNS boolean AS
  $$ begin return array_eq($1, $2); end $$ LANGUAGE plpgsql;
CREATE OPERATOR = (procedure = ad_eq,
                   leftarg = arrdomain, rightarg = arrdomain);
SELECT CASE make_ad(1,2)
  WHEN array[2,4]::arrdomain THEN 'wrong'
  WHEN array[2,5]::arrdomain THEN 'still wrong'
  WHEN array[1,2]::arrdomain THEN 'right'
  END;
ROLLBACK;
</pre>
<li>変数割り当て中にドメインのチェック制約が評価されるコンテクストで入れ子に使われる PL/pgSQL 関数について修正されました。  (Tom Lane) (9.6)(9.5)</li>
<p>
PL/pgSQL の実行で「ERROR:  SPI_connect failed: SPI_ERROR_CONNECT」が生じることがありました。
</p>
<li>PL/Python むけに作成した Python の例外オブジェクトが、適切に参照カウントされるようになりました。  (Rafa de la Torre, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これにより Python のガベージコレクションの後にオブジェクトが使われてクラッシュが生じるのを防ぎます。
</p>
<li>PL/Tcl がカラム名に「.tupno」を含むテーブル上のトリガーをサポートするように修正されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
「.tupno」カラムは PL/Tcl で問い合わせ結果の現在行番号が格納される列として使われていて、その動作と調和させました。テーブルのカラム名に無い場合には「.tupno」は引き続き結果行番号格納用に使われます。
</p>
<li>~/.pgpass ファイルで Unix 上であっても DOS 形式の改行文字 (CR-LF) が使えるようになりました  (Vik Fearing) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
この変更は同じパスワードファイルを Unix と Windows で使うのを容易にします。
</p>
<li>ecpg で「.」で終わるファイル名が与えられた場合の 1 バイトのバッファオーバーランが修正されました。  (Takayuki Tsunakawa) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>psql の crosstabview で重複するデータに対する不正確なエラー報告が修正されました。  (Tom Lane) (9.6)</li>
<p>
「crosstabview: query result contains multiple data values for row "1", column "9"」といったエラーが出る際に、実際に重複しているのとは異なる行・列が示されることがありました。
</p>
<li>ALTER DEFAULT PRIVILEGES に対する psql の TAB 補完が修正されました。  (Gilles Darold, Stephen Frost) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>ALTER TABLE ... ALTER .. DROP ... に対する psql の TAB 補完が修正されました。  (Kyotaro Horiguchi) (9.6)</li>
<li>psql が空か全て空白文字の PAGER 環境変数設定をページャ無しとして扱うようになりました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまではこのような環境変数設定を与えてページャが起動されるケースになると何も出力されませんでした。
</p>
<li>contrib/dblink の低レベル libpq エラーの報告が改善されました。  (Joe Conway) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは、例えば out-of-memoryエラーが "unknown error" となっていました。
</p>
<li>contrib/dblink が contrib/postgres_fdw の外部サーバを接続オプションのソースとして使っているとき、無関係なサーバオプションを無視するようになりました。  (Corey Huinker) (9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは外部サーバオブジェクトがオプションを持っていて、それが「updatable 'true'」など libpq 接続オプション以外であるとき、以下のようなエラーが生じていました。
</p>
<pre>
db1=# SELECT * FROM dblink('fdw_server', 'SELECT 1') as t(x integer);
ERROR:  could not establish connection
DETAIL:  invalid connection option "updatable"
</pre>
<li>contrib/pageinspect の GIN インデックスむけ関数の移植性の問題が修正されました。  (Peter Eisentraut, Tom Lane) (9.6)(9.5)</li>
<p>
ia64 や sparc64 などでクラッシュが生じる可能性がありました。
</p>
<li>Windows で待機中にソケット読み取りイベントを見逃す可能性があり、修正されました。  (Amit Kapila) (9.6)</li>
<p>
ほとんどの場合にこれは無害ですが、pldebugger 拡張モジュールを使った際にハングアップをひき起こすことが知られています。
</p>
<li>Windows で環境変数の変更がデバッグオプションを有効にしてビルドされたシステム DLL に確実に伝搬するようになりました。  (Christian Ullrich) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<li>タイムゾーンライブラリが IANA release tzcode2016j に同期されました。  (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
多数の問題が修正されています。最も重要なものとしては、対象ディレクトリがハードリンクをサポートしない場合はタイムゾーンデータ導入に失敗する問題がありました。
</p>
<li>タイムゾーンデータを tzdata release 2016j に更新しました。   (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
北キプロス（新タイムゾーン Asia/Famagusta 追加）、ロシア（新タイムゾーン Europe/Saratov 追加）、トンガ、Antarctica/Casey における夏時間法の変更と、イタリア、カザフスタン、マルタ、パレスチナにおける歴史的修正、トンガにおける数値によるゾーン略記法を優先する変更が含まれます。
</p>
<li>Btree インデックスの VACUUM 処理中におけるスタンバイサーバ上の相互ロックが減りました。  (Simon Riggs) (9.5)(9.4)</li>
<p>
本変更は、このような操作のリプレイ時にしばしば発生する顕著なレプリケーション遅延を回避します。
</p>
<li>制約違反エラーを報告する前に直列化可能性の競合を検査するようになりました。  (Thomas Munro) (9.5)(9.4)(9.3)(9.2)</li>
<p>
シリアライザブルトランザクション隔離を使うとき、同時実行トランザクションによる全てのエラーは直列化失敗と表明されることが望まれます。これによりアプリケーションにリトライして成功するかもしれないと示すことができます。
</p>
<p>
しかしながら、並列の行挿入によるキー重複違反のエラーが出てしまうケースがあるため、上記は確実には実現できていませんでした。
</p>
<p>
本変更は、アプリケーションがトランザクション内より手前で明示的に衝突するキーの存在（およびそれが見つからないことを）検査しているのであれば、そのようなエラーを確実に直列化失敗のエラーとして報告されるようにします。
</p>
<p>
以下のように実行したときに「ERROR:  duplicate key value violates ...」ではなく、確実に「ERROR:  could not serialize access ...」がでるようにしたということです。
</p>
<pre>
[[トランザクション1]]        [[トランザクション2]]

db1=# START TRANSACTION ISOLATION
      LEVEL SERIALIZABLE;
                             db1=# START TRANSACTION ISOLATION
                                   LEVEL SERIALIZABLE;

db1=# SELECT * FROM t1 WHERE id = 1;
 id | v
----+---
(0 rows)
                             db1=# SELECT * FROM t1 WHERE id = 1;
                              id | v
                             ----+---
                             (0 rows)

db1=# INSERT INTO t1 (id) VALUES (1);

                             db1=# INSERT INTO t1 (id) VALUES (1);
                             (ブロックされる)
db1=# COMMIT;
                             ERROR:  could not serialize access due to
                                     read/write dependencies among transactions
                             (一意制約違反でなく、直列化失敗エラーになる)
</pre>
<li>WAL セグメントを再読み込みする際の WAL ページヘッダ検証が修正されました。  (Takayuki Tsunakawa, Amit Kapila) (9.2)</li>
<p>
稀な場合に、偽の（すなわち実際にはデータは壊れていない状況で）「out-of-sequence TLI」エラーがリカバリ中に報告される可能性がありました。
</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 9.2.19 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-19/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 27 Oct 2016 01:05:16 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1817</guid>

					<description><![CDATA[このリリースは 9.2.18 からの修正リリース（2016年10月27日リリース）です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.11 より前のバージョンからアップデートを行う場合は ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.18 からの修正リリース（2016年10月27日リリース）です。</p>
<p>9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1817"></span></p>
<h3>PostgreSQL 9.2.18 から 9.2.19 への変更点</h3>
<p>9.6.1、9.5.5、9.4.10、9.3.15、9.2.19、9.1.24 の各バージョンが同時にリリースされており、 本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を 項目末尾に括弧書きで記載しています。<br />
<hr />
<ol>
<li>フリースペースマップおよび可視性マップの切り詰めについてのWAL記録について修正されました。 (Pavan Deolasee, Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)</li>
<p>
クラッシュリカバリに際してこれらファイルが正しく復旧しなかったり、スタンバイサーバに誤った書き込みがされる可能性がありました。
</p>
<p>
フリースペースマップの不正な項目は、リレーションの既に切り詰めされたページへのアクセスをひき起こし、典型的には以下のようなエラーが出ます。
</p>
<pre>ERROR:  could not read block 28991 in file "base/16390/572026": read only 0 of 8192 bytes
</pre>
<p>
フリースペースマップを再生成させるには、サービスを正常停止（smartモードかfastモードで停止）して、データベースクラスタディレクトリ内の.fsmファイルを手動で削除して、サービスを再起動してください。フリースペースマップが既に壊れているかを個別に検査する手順は、以下ページを参照ください。
</p>
<p>
https://wiki.postgresql.org/wiki/Free_Space_Map_Problems
</p>
<p>
可視性マップの障害は、ページチェックサムを有効にしていると、チェックサム検査エラーをひき起こすこともあります。
</p>
<p>
可視性マップを再生成させるには、contrib/pg_visibility 拡張モジュールのpg_truncate_visibility_map() 関数を使用できます。サービス停止して、.vmファイルを手動で削除して、サービス再起動する方法でも良いです。
</p>
<li>pg_upgrade が可視性マップを9.6フォーマットに書き換えしたときデータ破損の可能性があり、修正されました。 (Tom Lane) (9.6)</li>
<p>
ビッグエンディアンのマシンで新たな可視性マップのバイト列が誤った順で書かれて、完全に誤ったマップをもたらしました。また、Windows では旧マップがテキストモードで読み取られて、マップのバイト列に改行コード CR(0x0D) LF(0x0A) の並びが含まれているとき、誤った結果をもたらしました。
</p>
<p>
pg_upgrade を使用していて上記のいずれかに該当しているなら可視性マップが壊れていると考えられます。
</p>
<p>
contrib/pg_visibility 拡張モジュールの pg_truncate_visibility_map() 関数を使って可視性マップを再生成することができます。サービス停止して、.vmファイルを手動で削除して、サービス再起動する方法でも良いです。
</p>
<p>
以下のページも参照ください。
</p>
<p>
https://wiki.postgresql.org/wiki/Visibility_Map_Problems
</p>
<li>INSERT ... ON CONFLICT による自己衝突の場合にトランザクション直列化失敗のエラーを投げないようになりました。 (Thomas Munro, Peter Geoghegan) (9.6)(9.5)</li>
<p>
ここでの自己衝突とは以下例のようなケースです。SERIALIZABLE またはREPEATABLE READ トランザクション隔離レベルで発生します。修正後、本ケースではエラー無しに 1件だけレコードが挿入されます。
</p>
<pre>db1=# CREATE TABLE t3 (id int primary key);

db1=# START TRANSACTION ISOLATION LEVEL SERIALIZABLE;

db1=# INSERT INTO t3(id) VALUES (1),(1) ON CONFLICT DO NOTHING;
ERROR:  could not serialize access due to concurrent update
</pre>
<li>DISTINCT を使う集約関数の実行において、解放後のメモリを使用する障害が修正されました。 (Peter Geoghegan) (9.6)</li>
<p>
以下のような SQL が該当します。
</p>
<pre>SELECT string_agg(DISTINCT col1, ',' ORDER BY col1) FROM t4;
</pre>
<p>
バックエンドプロセスのクラッシュや誤った問い合わせ結果を引き起こすおそれがあります。特に Windows むけビルドで発生が報告され、再現が確認されました。
</p>
<li>ウィンドウ関数として使われる多様集約の誤った扱いが修正されました。 (Tom Lane) (9.6)</li>
<p>
集約の遷移関数に、その第一引数と結果が状態のデータ型でなく集約の出力のデータ型だと示されていました。このことは多様の遷移関数でエラーやクラッシュをもたらしました。
</p>
<p>
CREATE AGGREGATE で集約関数を作るときに、状態遷移関数や最終計算関数の引数型や返し値型に anyelement や anyarray 等を使う多様関数を指定した場合で、集約の出力と状態でデータ型が異なる場合に該当します。エラーやクラッシュが生じるのは、作成した集約関数を実行したときです。
</p>
<pre>(エラー発生例:)
db1=# CREATE FUNCTION first_el(anyarray) RETURNS anyelement
        AS 'select $1[1]' LANGUAGE sql STRICT IMMUTABLE;

db1=# CREATE AGGREGATE first_el_agg_f8(float8)
        (SFUNC = array_append, STYPE = float8[], FINALFUNC = first_el);

db1=# SELECT first_el_agg_f8(x::float8) OVER (order by x)
        FROM generate_series(1,5) x;
ERROR:  input data type is not an array

(本来の期待される出力は以下:)
 first_el_agg_f8 
-----------------
               1
               1
               1
               1
               1
(5 rows)
</pre>
<li>行単位セキュリティが有効なテーブルの列名リストを伴う COPY が修正されました。 (Adam Brightwell) (9.6)(9.5)</li>
<pre>(エラー発生例:)
db1=# CREATE ROLE user6;
db1=# CREATE TABLE t6 (a int, b int, c int);
db1=# INSERT INTO t6 VALUES (1,4,1),(2,3,2),(3,2,3),(4,1,4);
db1=# CREATE POLICY p6 ON t6 FOR SELECT USING (a % 2 = 0);
db1=# ALTER TABLE rls_t6 ENABLE ROW LEVEL SECURITY;
db1=# ALTER TABLE rls_t6 FORCE ROW LEVEL SECURITY;
db1=# GRANT SELECT ON TABLE t6 TO user6;

db1=# SET SESSION AUTHORIZATION user6;
db1=&gt; COPY t6 TO stdout;
2       3       2
4       1       4
db1=&gt; COPY t6 (a, b) TO stdout;
ERROR:  missing FROM-clause entry for table "a"

(本来の期待される出力は以下:)
2       3
4       1
</pre>
<li>track_io_timing = on であるとき、EXPLAIN が有効な XML を出力するように修正されました。 (Markus Winand) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
これまでは XML形式のとき、「&lt;I/O-Read-Time&gt;」など、文法的に不正なタグが出力されました。タグ名(XML要素名)に使われるアルファベット、数字、「-」「_」「.」以外の文字は「-」で置き換えられるようになりました。つまり、前述の文字列は「&lt;I-O-Read-Time&gt;」と出力されます。
</p>
<li>準備されたトランザクション(二相コミットのトランザクション)でTRUNCATE の統計情報更新が修正されました。 (Stas Kelvich) (9.6)(9.5)</li>
<p>
pg_stat_*_tables の n_live_tup、n_dead_tup に相当する統計値が、TRUNCATE で 0 にならない動作がありました。
</p>
<li>CREATE/ALTER TABLE にて継承された CHECK制約のマージにおける、いくつかの障害が修正されました。 (Tom Lane, Amit Langote) (9.6)(9.5)(9.4)(9.3)(9.2)</li>
<p>
どちらから先でも親テーブル、子テーブルに対して同一の CHECK制約を追加することが可能になりました。これまで ALTER TABLE で後から加えるとエラーになっていたものが適切にマージされます。以下に例を示します。
</p>
<pre>db1=# CREATE TABLE t9p(a int);
db1=# CREATE TABLE t9c() INHERITS ( t9p );
db1=# ALTER TABLE t9p ADD CONSTRAINT check_a CHECK (a &gt; 0);

(これまでのバージョンの動作)
db1=# ALTER TABLE t9c ADD CONSTRAINT check_a CHECK (a &gt; 0);
ERROR:  constraint "check_a" for relation "t9c" already exists

(修正後の動作)
db1=# ALTER TABLE t9c ADD CONSTRAINT check_a CHECK (a &gt; 0);
NOTICE:  merging constraint "check_a" with inherited definition
</pre>
<p>
親テーブルからの有効な制約と子テーブル上の NOT VALID な制約の併合を防止します。同様に NO INHERIT な子テーブルの制約と継承された制約の併合も防止します。これまでは誤ってマージされてしまっていました。以下に例を示します。
</p>
<pre>(これまでのバージョンの動作)
db1=# CREATE TABLE t9p (a int, CONSTRAINT CHECK_a CHECK (a &gt; 0));
db1=# CREATE TABLE t9c (CONSTRAINT CHECK_a CHECK (a &gt; 0) NO INHERIT) INHERITS (t9p);
NOTICE:  merging constraint "check_a" with inherited definition

(修正後の動作)
db1=# CREATE TABLE t9p (a int, CONSTRAINT CHECK_a CHECK (a &gt; 0));
db1=# CREATE TABLE t9c (CONSTRAINT CHECK_a CHECK (a &gt; 0) NO INHERIT) INHERITS (t
9p);
ERROR:  constraint "check_a" conflicts with inherited constraint on relation "t9c"
</pre>
<li>min_wal_size と max_wal_size に対する pg_settings.unit で実用的な値を表示するようになりました。 (Tom Lane) (9.6)(9.5)</li>
<p>
従来 NULL でしたが、以下のようになります。
</p>
<pre>db1=# SELECT name, unit FROM pg_settings WHERE name IN ('min_wal_size', 'max_wal_size');
     name     | unit
--------------+------
 max_wal_size | 16MB
 min_wal_size | 16MB
(2 rows)
</pre>
<li>jsonb_set() で配列要素の置換が修正されました。 (Tom Lane) (9.6)</li>
<p>
対象が存在するJSON配列要素である場合、新たな値で置き換えられるのでなく、削除されていました。
</p>
<pre>(障害動作例: 最も外側の JSON配列のゼロ番目を '100' で置き換える指定)
db1=# SELECT jsonb_set('[0,1,null,3]', '{0}', '100', false);
  jsonb_set
--------------
 [1, null, 3]
(1 row)

(正しい応答:)
        jsonb_set
-------------------------
 [100, 1, null, 3]
(1 row)
</pre>
<li>バッファのロックを保持せずにタプル可視性をテストすることに起因する滅多に起こらないデータ破損について、回避されました。 (Thomas Munro, Peter Geoghegan, Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
特に外部キーチェックの処理で一貫性に欠けたデータが生じる可能性がありました。
</p>
<li>サーバ再起動時にコミットタイムスタンプを保護するようになりました。 (Julien Rouhaud, Craig Ringer) (9.6)(9.5)</li>
<p>
track_commit_timestamp = on のとき、クリーンなサーバ再起動の後に、古いコミットタイムスタンプがアクセス不能になってました。
</p>
<p>
以下のように再起動前に取得できたタイムスタンプが、取得できなくなる動作が生じます。
</p>
<pre>(エラー動作例: NULL は *NULL* と表示)
db1=# SELECT txid_current();
 txid_current
--------------
        12345
(1 row)
db1=# SELECT pg_xact_commit_timestamp('12340'); -- 最近のトランザクション
   pg_xact_commit_timestamp
-------------------------------
 2016-10-31 16:40:58.681952+09
(1 row)

db1=# q

$ pg_ctl restart
$ psql db1

db1=# SELECT pg_xact_commit_timestamp('12340');
 pg_xact_commit_timestamp
--------------------------
 *NULL*
(1 row)
</pre>
<li>ロジカルWALデコーディングが、サブトランザクションの WAL出力がディスクに溢れるほど大きいときに適切に動作するように修正されました。 (Andres Freund) (9.6)(9.5)(9.4)</li>
<p>
SAVEPOINTを使った更新の一部がロジカルデコーディング出力から抜け落ちることがありました。
</p>
<li>ロジカルWALデコーディングにおける不正ポインタの問題が修正されました。 (Stas Kelvich) (9.6)</li>
<li>共有メモリ割り当て要求を実際の huge pageサイズの倍数に丸めるようになりました。 (Tom Lane) (9.6)(9.5)(9.4)</li>
<p>
本修正は、典型的でないデフォルト huge page サイズをもつシステムで munmap() の起こりうる失敗を回避します。クラッシュリカバリの場合を除き、これまでも悪影響はログメッセージ以外ありませんでした。
</p>
<p>
プラットフォームが Linux の場合に対応した修正となります。
</p>
<li>libpq で SSLコンテキストを複数の接続に亘って共有しようと試みなくなりました。 (Heikki Linnakangas) (9.6)(9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
特に異なる接続に異なる SSLパラメータを使うときに、稀な場合で起きる様々な障害をもたらしていました。
</p>
<p>
予期せぬ SSL error (サーバ側ログとしては ERROR: could not accept SSL connectionなど) が発生することが報告されました。
</p>
<li>libpq の稀な場合のメモリリークが回避されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
PQreset() でエラー報告内容がメモリリークするケースが報告されました。関連するケースがいくつかあると見られます。
</p>
<li>pg_upgrade はライブラリがロード可能かを名前の長さ順にチェックするようになりました。 (Tom Lane) (9.6)(9.5)</li>
<p>
拡張モジュール間の依存問題を回避する簡易的な対策です。手続き言語、データ型、TRANSFORM (手続き言語とSQLデータ型の対応付け) を提供する拡張モジュールがあって、plpython、hstore、hstore_plplythonというモジュール名であるなら前者二つが先にロードされることが期待できます。
</p>
<li>インデックスアクセスメソッドを含む拡張モジュールに対してpg_upgrade が正しく動作するようになりました。 (Tom Lane) (9.6)</li>
<p>
サーバが ALTER EXTENSION ADD / DROP ACCESS METHOD に対応するように拡張されました。この機能はアクセスメソッドの動的作成に対応した当初のパッチに含まれているべきでしたが、見落とされていました。
</p>
<li>pg_upgrade のファイルのコピー、リンク、書換えの各段階でのエラー報告が改善されました。 (Tom Lane, Álvaro Herrera) (9.6)</li>
<p>
Windows 以外のプラットフォームでシステムからのメッセージがより適切にエラーメッセージに含まれるようになります。
</p>
<li>pg_dump が 7.4 よりも前バージョンのサーバで動作するように修正されました。 (Amit Langote, Tom Lane) (9.6)</li>
<p>
ラージオブジェクトの処理をする部分に修正が適用されています。
</p>
<li>pg_rewind に --source-server と --source-target を両指定することが禁止されました。 (Michael Banck) (9.6)(9.5)</li>
<p>
二つとも設定するのは無意味ですがエラーを出すようになっていませんでした。
</p>
<li>pg_rewind が元サーバのセッションで synchronous_commit を off にするようになりました。 (Michael Banck, Michael Paquier) (9.6)(9.5)</li>
<p>
これまでは、同期レプリケーションを使っているサーバをソースサーバに指定して、その同期レプリケーションが何らか理由で動作しない場合に、pg_rewind が一時テーブルを作るところで固まってしまっていました。
</p>
<li>pg_xlogdump で --follow オプションを使った場合、新たな WALセグメントファイルのオープンを再試行するようになりました。 (Magnus Hagander) (9.6)(9.5)(9.4)(9.3)</li>
<p>
これによりサーバの次セグメント作成の遅れに対応します。
</p>
<li>ロールバックされた更新の対象となっている壊れたタプルに対して、正しい TID を報告するように contrib/pg_visibility が修正されました。 (Tom Lane) (9.6)</li>
<li>PL/Python の並行ビルドが確実に成功するように、Makefile の依存関係が修正されました。 (Pavel Raiskup) (9.6)</li>
<li>タイムゾーンデータファイルが tzdata release 2016h に更新されました。 (9.6)(9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
パレスチナとトルコの夏時間法の変更、トルコとロシアのいくつかの地域の歴史的修正が適用されます。南極大陸、旧ソ連、スリランカのいくつかのタイムゾーンが数値による省略形に切り替えられました。
</p>
<p>
IANAタイムゾーンデータベースはこれまで（ほとんど使われない物も含めて）全てのタイムゾーンに文字による省略形を提供していました。現在、現実世界で英語の省略形として使われている形跡がないタイムゾーンについては数値による UTCオフセットの使用を優先する方針に転換する過程にあります。
</p>
<p>
少なくとも暫くの間、PostgreSQL はタイムスタンプの入力にそのような削除された省略形を受け入れる予定です。しかしながら、削除された省略形は、pg_timezone_namesビューにはあらわれなくなり、出力には使われなくなります。
</p>
<p>
本アップデートでは、AMT がアルメニア時間(UTC+4)という意味では使われなくなり、アマゾン時間(UTC-4)と解釈されるようになります。
</p>
<li>ビッグエンディアンのマシンにおける GINインデックス WALレコードの誤った作成が修正されました。 (Tom Lane) (9.5)(9.4)</li>
<p>
典型的な症状は WALリプレイに際して「unexpected GIN leaf action」が出ることです。
</p>
<li>SELECT FOR UPDATE/SHARE がその後に中止(ロールバック)したトランザクションに更新されたタプルを適切にロックするように修正されました。 (Álvaro Herrera) (9.5)(9.4)(9.3)</li>
<p>
9.5 以降では、SELECT はこのようなタプルを返すのに時々失敗していました。より古いバージョンでこの障害が起きることは証明されていませんが、同時更新を伴う場合で可能性があると考えられます。
</p>
<li>CTEスキャンを伴う EvalPlanQual の再チェックが修正されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
再チェックでは常に CTE を行が返さないものとみていて、典型的には最近に更新された行の更新失敗をひき起こしました。
</p>
<p>
CTE (WITH句) を使って SELECT ... FOR UPDATE を実行する問い合わせで、並行する UPDATE 処理とのタイミングによっては、返るべき行が返らない障害が報告されています。
</p>
<li>INSERT ... ON CONFLICT による取り消しの際の、推測で挿入された TOASTタプルの削除が修正されました。 (Oskari Saarenmaa) (9.5)</li>
<p>
2つのトランザクションがほぼ同時に衝突するタプルを挿入しようとする競合状態で、挿入内容に TOASTフィールドが含まれている場合に、挿入できなかった方が以下のエラーを出していました。
</p>
<pre>ERROR:  attempted to delete invisible tuple
</pre>
</p>
<li>サブクエリでハッシュ集約からの前結果の不適切な重複が修正されました。 (Andrew Gierth) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
性能を改善するプランナの修正となります。これまで無駄な計算が生じていました。
</p>
<li>主キーやレプリカ識別(REPLICA IDENTITY)インデックスを伴うテーブルの大規模な UPDATE における、問い合わせ内のメモリリークが修正されました。 (Tom Lane) (9.5)(9.4)</li>
<li>EXPLAIN で測定されない時間をゼロと出力しないようになりました。 (Maksim Milyutin) (9.5)(9.4)(9.3)(9.2)</li>
<p>
いくつかのケースで計測対象外の項目についても欄があらわれ、その値がゼロになっていました。
</p>
<p>
「TIMING off」を指定しているのにトリガ関数実行時間が 0 で出力されたり、FORMAT が text 以外の時に track_io_timing = off で計測されないにもかかわらず「I/O Read Time: 0.000」「I/O Write Time: 0.000」が出力されたりしていました。
</p>
<li>VACUUM がテーブル切り捨てをするためにテーブル排他ロックを待っているときのタイムアウトの長さが修正されました。 (Simon Riggs) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
このタイムアウトは 50 ミリ秒のつもりが、実際には誤って 50 マイクロ秒になっていました。このため VACUUM がすぐにテーブル切り捨て（通常VACUUM でのファイルサイズ縮小）をあきらめてしまっていました。
</p>
<li>numeric型で受け入れられる値の人為的な制約が除去されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
テキスト入力の numeric_in()、バイナリ入力の numeric_recv() の両方で修正されています。
</p>
<p>
これまで 指数記号を使ったとき、指数部を 1000 を上限としていたのは全く無意味であるため、格納形式上の制限（1e100000 を越える）までの数値が許可されるようになりました。
</p>
<p>
また、バイナリ入力の場合には数値の桁数が 1000 桁を越えた場合にも拒絶していましたが、これも修正されました。
</p>
<pre>(修正前の動作例)
db1=# SELECT 1.0e+1000::numeric; -- これはエラーにならない

db1=# SELECT repeat('1', 100000)::numeric; -- 指数形式でなければ問題ない

db1=# SELECT 1.0e+1001::numeric; -- 指数形式で指数部が 1000 を超えるとエラーになる
ERROR:  invalid input syntax for type numeric: "1.0e+1001"
LINE 1: SELECT 1.0e+1001::numeric;
             ^
</pre>
</p>
<li>短縮キーの利用を止めたときに起きうるソートの誤りが修正されました。 (Peter Geoghegan) (9.5)</li>
<p>
誤ったソート順序がもたらされる可能性があり、最悪の場合、壊れたBtreeインデックスが生じます。この場合 REINDEX が必要です。ただし、発生は非常に稀と考えられます。
</p>
<li>1GB を超える一時リレーションを切り捨てするときに起きるファイルデスクリプタのクローズ漏れが修正されました。 (Andres Freund) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
一時テーブルに対する VACUUM および ON COMMIT TRUNCATE 指定に基づく動作の時のみ影響があります。
</p>
<li>standby_mode を on にしてスタンドアローンバックエンドを起動することが禁止されました。 (Michael Paquier) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
WALデータを取り込む WALレシーバプロセスが無いので、そのように指定しても役に立ちません。また、スタンバイ動作が考慮されていないため誤動作をもたらしました。
</p>
<li>以前に使用したスロットを再利用するときに、レプリケーションスロット状態を適切に初期化するようになりました。 (Michael Paquier) (9.5)(9.4)</li>
<p>本障害で VACUUM がデッドタプルを除去するのを妨げるおそれがありました。
</p>
<li>動的共有メモリの制御セグメントID に、よりランダムな値を使うようになりました。 (Robert Haas, Tom Lane) (9.5)(9.4)</li>
<p>
これまで srandom() を呼ばずに random() から供給を受けていたため、同じ値が毎回選択されていました。比較的無害ですが、これは想定の動作ではありません。
</p>
<li>Windows において、動的共有メモリの制御セグメントの作成をaccess denied エラーの後、再試行するようになりました。 (Kyotaro Horiguchi, Amit Kapila) (9.5)(9.4)</li>
<p>
Windows は既存セグメントがあるとき、ときどき ERROR_ALREADY_EXISTS でなくERROR_ACCESS_DENIED を返します。これを回復不能エラーと判断していたため、PostgreSQL 起動に失敗していました。
</p>
<li>PL/pgSQL が int2vector型や oidvector型のパラメータとローカル変数で誤動作しないように修正されました。 (Tom Lane) (9.5)</li>
<p>
誤った応答やバックエンドクラッシュをひき起こす可能性があります。</p>
<pre>(正常動作例: 修正前バージョンでは誤応答やクラッシュが起きる)
db1=# CREATE FUNCTION f44(int2vector) RETURNS text LANGUAGE plpgsql
        AS $$ BEGIN RETURN $1::text; END;$$;
db1=# SELECT f44('1'::int2vector);
 f44
-----
 1
(1 row)
</pre>
<li>ecpg の --help と --version オプション が他のコマンドと一貫性をもった動作をするようになりました。 (Haribabu Kommi) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>pgbench の平均遅延の計算が修正されました。 (Fabien Coelho) (9.5)(9.4)</li>
<p>
スクリプト中で sleep コマンドがあるとき、あるいは、テスト実行期間を時間ではなくトランザクション数で指定しているとき、計算が誤っていました。
</p>
<li>pg_dump が範囲型を作る関数をダンプしないように修正されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<p>
範囲型を作る関数とは CREATE TYPE name AS RANGE で指定する関数のことです。--binary-upgrade のとき、拡張モジュールに属するこれら関数が誤ってダンプされていました。pg_upgrade での問題が報告されました。
</p>
<li>pg_dump で -C と --no-tablespaces を指定しているとき、CREATE DATABASE に TABLESPACE 句を付けないように修正されました。 (Tom Lane) (9.5)</li>
<li>pg_receivexlog がスロットなしで --synchronous を指定しているとき、正しく動作するように修正されました。 (Gabriele Bartolini) (9.5)</li>
<p>
スロットが無いとフラッシュ位置が報告されませんでした。
</p>
<li>pg_xlogdump が複数ページにわたる継続レコードで始まる WALファイルに対応するように修正されました。 (Pavan Deolasee) (9.5)(9.4)(9.3)</li>
<li>contrib/pg_buffercache が 256GB を超える shared_buffers のときに動作するように修正されました。 (KaiGai Kohei) (9.5)(9.4)</li>
<li>contrib/intarray の bench.pl で -e が指定された際に EXPLAIN 結果を捨てずに出力するように修正されました。 (Daniel Gustafsson) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>OpenSSL 1.1.0 がサポートされました。 (Heikki Linnakangas) (9.5)</li>
<li>拡張のテストで使えるように TAPテスト基盤が導入されました。 (Craig Ringer) (9.5)(9.4)</li>
<p>
ビルド時に --enable-tap-tests を指定すると、make install でPGXS が見つけられたものについて TAPテストのためのサポートPerlファイルがインストールされます。
</p>
<li>MSVC でのビルドで、クライアントのみのインストールに pg_recvlogical が含まれるようになりました。 (MauMau) (9.5)(9.4)</li>
<li>最近の Windows バージョンで追加されたタイムゾーン名を認識するように、Windows のタイムゾーン割り当てが更新されました。 (Michael Paquier) (9.5)(9.4)(9.3)(9.2)</li>
<li>廃止された動的なタイムゾーン省略形についてエラーが出るのを防ぐようになりました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
動的タイムゾーン省略形が参照されているタイムゾーンでどれにも一致しない場合、これをタイムゾーン名と等しいものとして扱います。これにより、IANA が彼らのタイムゾーンデータベースから省略形を削除したときの予期せぬエラーを回避します。
</p>
<li>ロジカルWALデコーディングでのバッファオーバランが修正されました。 (Tom Lane) (9.4)</li>
<p>
タプル更新レコードのロジカルデコーディングは 23バイト余計に読み取りました。これは通常無害ですが、非常に運が悪ければクラッシュをひき起こします。
</p>
</ol>
</p>
<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.2.18 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-18/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 11 Aug 2016 01:03:47 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1759</guid>

					<description><![CDATA[このリリースは 9.2.17 からの修正リリース（2016年8月11日リリース）です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.11 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.17 からの修正リリース（2016年8月11日リリース）です。</p>
<p>9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1759"></span></p>
<h3>PostgreSQL 9.2.17 から 9.2.18 への変更点</h3>
<p>9.5.4、9.4.9、9.3.14、9.2.18、9.1.23 の各バージョンが同時にリリースされており、 本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を 項目末尾に括弧書きで記載しています。<br />
<hr />
<ol>
<li>入れ子になった CASE-WHEN式の誤評価のおそれがあり、修正されました。 (Heikki Linnakangas, Michael Paquier, Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
他の CASE のテスト値の副式としてあらわれる CASE式では、自身のテスト値が null かどうかを誤ることがありました。
</p>
<p>
CASE式で使用される等価演算子を実装する SQL関数のインライン化により、そのSQL関数内で CASE式で呼ばれた関数に誤ったテスト値を渡すおそれがありました。テスト値が異なるデータ型である場合、クラッシュするかもしれず、更には、一部サーバメモリを露出させるために悪用されるかもしれません。これは CVE-2016-5423 として登録されています。
</p>
<p>
以下例は、副CASE式で 'it was bar!' になり、返し値は 'bar recognized'になるのが正しい動作です。
</p>
<pre>(入れ子CASEの障害動作例)

db=# CREATE FUNCTION vol(text) RETURNS text AS
       'begin return $1; end' LANGUAGE PLPGSQL VOLATILE;

db=# SELECT CASE
     (CASE vol('bar') WHEN 'foo' THEN 'it was foo!'
                      WHEN vol(null) THEN 'null input'
                      WHEN 'bar' THEN 'it was bar!' END)
     WHEN 'it was foo!' THEN 'foo recognized'
     WHEN 'it was bar!' THEN 'bar recognized'
     ELSE 'unrecognized' END;

     case
--------------
 unrecognized
(1 row)
</pre>
<p>
以下例は 'is not foo' が返るのが正しい動作です。定義した =演算子と inline_eq関数は、最後の SELECT文の CASE式を通して実行されます。
</p>
<pre>(インライン関数の = 演算子の障害動作例)

db=# CREATE DOMAIN foodomain AS text;
db=# CREATE FUNCTION volfoo(text) RETURNS foodomain AS
       'begin return $1::foodomain; end' LANGUAGE plpgsql VOLATILE;
db=# CREATE FUNCTION inline_eq(foodomain, foodomain) RETURNS boolean AS
       'SELECT CASE $2::text WHEN $1::text THEN true ELSE false END'
       LANGUAGE sql;
db=# CREATE OPERATOR = (procedure = inline_eq,
       leftarg = foodomain, rightarg = foodomain);

db=# SELECT CASE volfoo('bar')
            WHEN 'foo'::foodomain THEN 'is foo' ELSE 'is not foo' END;
  case
--------
 is foo
(1 row)
</pre>
<li>クライアントプログラムにおけるデータベース名とロール名に含まれる特殊文字の扱いが修正されました。 (Noah Misch, Nathan Bossart, Michael Paquier) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
多くのクライアントプログラムが、データベース名やロール名が "（ダブルクオート）や （バックスラッシュ）を含むことで、混乱をきたすことがありえました。
</p>
<p>
psql の connect と password において、2つ組のダブルクオートの扱いがドキュメント通りになるように修正されました。
</p>
<p>
さらに、psql の connect コマンドに -reuse-previous オプションが導入され、以前の接続のパラメータを再利用するかの明示的な制御ができるようになりました。従来はデータベース名が接続文字列のように見えるかで選択されていました。これは pg_dumpall で特殊文字を含むデータベース名の安全な処理を可能にします。
</p>
<p>
pg_dumpall は、改行文字(CR、LF)を含むデータベース名・ロール名の処理を拒絶するようになりました。将来はサーバ側でもこのような名前を拒絶するかもしれません。
</p>
<p>
作りこんだ特殊文字を含むオブジェクト名が、次に pg_dumpall や他のメンテナンス操作をするときにスーパーユーザ権限でコマンドを実行させるのに用いられるかもしれないため、これらはセキュリティ修正とみなされます。本件は CVE-2016-5424 として登録されています。
</p>
<li>入れ子の複合値に適用される IS NULL、IS NOT NULL の誤動作が修正されました。 (Andrew Gierth, Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
SQL標準では IS NULL は全ての要素が NULL である行値には TRUE を返すべきとしていますが、これは再帰的に適用することを意味しません。
</p>
<pre>(IS NULL のSQL標準仕様)
 ROW(NULL,NULL) IS NULL             → TRUE
 ROW(NULL, ROW(NULL, NULL)) IS NULL → FALSE
</pre>
<p>
PostgreSQL のエグゼキュータは上記の通りに作られていますが、プランナ最適化が働いて、以下のような誤った結果が生じていました。
</p>
<pre>(誤動作の例 - プラン時点で ROW(NULL,NULL) に置換済み)

=# EXPLAIN (VERBOSE) SELECT ROW(NULL, ROW(NULL, NULL)) IS NULL;
                      QUERY PLAN
-------------------------------------------------------
 Result  (cost=0.00..0.01 rows=1 width=0)
   Output: (ROW(NULL::unknown, NULL::unknown) IS NULL)
(2 rows)

=# SELECT ROW(NULL, ROW(NULL, NULL)) IS NULL;
 ?column?
----------
 t
</pre>
<p>
postgres_fdw によるリモート問い合わせでも同様の問題があり、修正されました。
</p>
<li>再帰 CTE (WITH RECURSIVE) 内で INSERT ... ON CONFLICT 構文を使うと、unrecognized node type エラーが出るのが修正されました。 (Peter Geoghegan) (9.5)</li>
<p>
以下のようにエラーが発生していました。
</p>
<pre>db=# CREATE TABLE foobar (id text PRIMARY KEY);

db=# WITH RECURSIVE upserted AS (
       INSERT INTO foobar (id) VALUES ('a')
       ON CONFLICT (id) DO NOTHING
       RETURNING id
       ) SELECT id FROM upserted;
ERROR:  XX000: unrecognized node type: 920
</pre>
<li>INSERT ... ON CONFLICT が、プランナの式の前処理フェーズで単純化されたインデックス式やインデックス述語を正常に照合するように修正されました。 (Tom Lane) (9.5)</li>
<p>
以下のような場合に、ON CONFLICT の conflict_target に対応したユニークインデックスや排他制約が無いと見なされて、エラーが発生していました。障害発生はデータ型や書き方に依存します。下記例では、bigint型のところがint型であれば、あるいは、0 を '0'::bigint と記述していれば発生しません。
</p>
<pre>db=# CREATE TABLE t5 (a bigint, b bigint);

db=# CREATE UNIQUE INDEX ON t5 (coalesce(a, 0), coalesce(b, 0));

db=# INSERT INTO t5 VALUES (1, 2)
       ON CONFLICT ((coalesce(a, 0)), (coalesce(b, 0))) DO NOTHING;
ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification
</pre>
<li>INSERT ... ON CONFLICT命令で、ON CONSTRAINT で指定されていない方の排他制約に違反した場合の処理が修正されました。 (Tom Lane) (9.5)</li>
<p>
以下例のような場合が該当します。通常の制約違反になるのが正しい動作ですが、無限ループに入ってしまいます。
</p>
<pre>(エラー例)
db=# CREATE TABLE t6 (f1 int UNIQUE, f2 box, EXCLUDE USING gist(f2 WITH &amp;&amp;));
db=# INSERT INTO t6 VALUES (1, '((0,0),(1,1))');
INSERT 0 1

db=# INSERT INTO t6 VALUES (2, '((0,0),(1,2))')
       ON CONFLICT ON CONSTRAINT t6_f1_key DO NOTHING;
  → f2 の方の制約違反なのでエラーになるのが正しいが、無限ループで応答しない
</pre>
<li>INSERT ... ON CONFLICT が、対象テーブルが OID カラムにユニークインデックスを持っていた場合に失敗しないようになりました。 (Tom Lane) (9.5)</li>
<p>
これまでは該当の場合には、OIDカラムの制約に関係があっても無くても、INSERT ... ON CONFLICT が使用できませんでした。以下のようにエラーが発生します。
</p>
<pre>db=# CREATE TABLE t7 (id int UNIQUE) WITH """"OIDS;
db"""" =# CREATE UNIQUE INDEX ON t7 (oid);

db=# INSERT INTO t7 VALUES (1) ON CONFLICT (id) DO NOTHING;
ERROR:  system column in index

db=# INSERT INTO t7 VALUES (1) ON CONFLICT (oid) DO NOTHING;
ERROR:  system columns cannot be used in an ON CONFLICT clause
</pre>
<li>inet型、cidr型がコロン区切りフィールドが多すぎる IPv6アドレスを正しく拒絶するようになりました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
IPv6アドレスの表記は 128ビットを 16ビットごとにコロン(:)で区切るので最大でもコロンは 7つです。また、「::」が使えるのは一か所だけです。これら規則に違反してもエラーにならず「::/0」と解釈される場合がありました。
</p>
<pre>(誤動作の例)

db=# SELECT '99:99:99:99::99:99:99:99:99:99'::inet;
 inet
------
 ::/0
(1 row)

db=# SELECT '99:99:99:99::99:99:99:1::/118'::cidr;
 cidr
------
 ::/0
(1 row)
</pre>
<li>point ## lseg 演算子の実装である close_ps() 関数が NaN値を含む入力座標でクラッシュしてしまうのが防止されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
上記演算子は右辺要素内の左辺要素への近接点を返すものです。これまでクラッシュしていたケースでは NULL が返るようになります。
</p>
<pre>(演算子の通常動作とクラッシュ例)

=# SELECT '(1.5,1.5)'::point ## '(0,0),(0,3)'::lseg;
 ?column?
----------
 (0,1.5)
(1 row)

=# SELECT 'NaN,NaN'::point ## '(Nan,0),(0,NaN)'::lseg;
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
</pre>
<li>一貫性に欠けた値が渡された場合に pg_get_expr() 関数がクラッシュする可能性が回避されました。 (Michael Paquier, Thomas Munro) (9.5)(9.4)(9.3)</li>
<p>
以下の障害例が報告されました。
</p>
<pre>db=# CREATE TABLE t10 (id int primary key, c1 int NOT NULL, c2 int);
db=# CREATE INDEX idx10 ON t10 (c1) WHERE (c2 = 100);

db=# SELECT pg_get_expr(i.indpred, i.indexrelid) FROM pg_index i;
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
</pre>
<p>
pg_get_expr() は pg_dump やシステムビュー定義内で使われる関数であって、アプリケーションやデータベース管理者が直接使うことはほとんどありません。
</p>
<li>to_number() で幾つかの 1バイトのバッファ超過読み込みが修正されました。 (Peter Eisentraut) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
幾つかの場合に to_number() 関数が入力文字列から1文字多く読み取りしていました。入力データがメモリ末尾に隣接している場合には、僅かながらクラッシュの可能性があります。
</p>
<li>WITH NO DATA が指定されたときには、CREATE MATERIALIZED VIEW またはCREATE TABLE AS に含まれている問い合わせに対して プランナを実行しないようになりました。 (Michael Paquier, Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
これは不要なエラー状況を回避します。例えば、STABLE な関数が参照するテーブルがマテリアライズドビューを作成した時点では未だ無い、といった場合です。
</p>
<li>heap_update() を通る高コストパスにおいて、安全でない中間状態を回避するようになりました。 (Masahiko Sawada, Andres Freund) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで該当ケースにおいては、XMAX をセットして対象タプルをロックするけれど、その操作を WAL書き出しをしませんでした。そのため、ページ変更がバッファ溢れでディスクに書かれて、続いてタプル更新が完了する前にクラッシュが生じると、データ不整合の危険がありました。
</p>
<li>行ロック操作の WALリプレイでのヒントビット更新が修正されました。 (Andres Freund) (9.5)(9.4)(9.3)</li>
<p>
本障害の影響として、コミット前の準備されたトランザクションにより保持された行ロックがクラッシュ後の再起動で適用に失敗するおそれがあることが知られています。
</p>
<li>SERIALIZABLE または REPEATABLE READモードで SELECT ... FOR KEY SHARE による行ロックを取得するときに、不要な直列化失敗エラーの発生を回避するようになりました。 (Álvaro Herrera) (9.5)(9.4)(9.3)</li>
<p>
FOR KEY SHARE 行ロックは外部キー制約を持つテーブルの更新で暗黙に取得されます。以下の場合にエラーが発生していましたが、修正後は発生しなくなります。
</p>
<pre>(テスト用のテーブルを作成)
db=# CREATE TABLE t15a (id int PRIMARY KEY, uid int, name text);
db=# CREATE TABLE t15b (id int PRIMARY KEY, d date);
db=# ALTER TABLE t15a ADD FOREIGN KEY (uid) REFERENCES t15b (id);
db=# INSERT INTO t15b VALUES (1, now());
db=# INSERT INTO t15a VALUES (1, 1, 'one');

(セッションその1)
db=# START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
db=# UPDATE t15a SET name = 'update1', uid = 1 WHERE id = 1;

                      (セッションその2)
                      db=# START TRANSACTION ISOLATION LEVEL REPEATABLE READ;
                      db=# UPDATE t15b SET d = now() WHERE id = 1;
                      db=# COMMIT;

db=# UPDATE t15a SET name = 'update2', uid = 1 WHERE id = 1;
ERROR:  could not serialize access due to concurrent update
CONTEXT:  SQL statement "SELECT 1 FROM ONLY "public"."t15b" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"
</pre>
<li>エグゼキュータにおいて、拡張されたデータムがプランノードから返るとき、それが確実にリードオンリーであるように修正されました。 (Tom Lane) (9.5)</li>
<p>
データム(Datum)とは SQLデータ型の値の受け渡しに使われる実装内部データ型です。本修正で、下位プランノードの結果が上位ノードの複数個所で参照される場合に、失敗するのを回避します。PostgreSQL本体に関する限り PL/pgSQL関数から返される配列値のみ、危険があります。ただし、拡張モジュールでは拡張されたデータムを他に使っているかもしれません。
</p>
<p>
本障害で「ERROR: cache lookup failed for type 0」(数値 0 の部分は様々)、または、クラッシュが生じる可能性があります。
</p>
<li>postgres -C で指定した設定変数が NULL文字列値を持つときのクラッシュが回避されました。 (Michael Paquier) (9.5)(9.4)(9.3)(9.2)</li>
<p>
OS X でクラッシュが報告されていました。
</p>
<li>wal senderプロセスにおいて、意図せず WAL receiver 応答を待機する動作が防止されました。 (Kyotaro Horiguchi) (9.5)</li>
<li>ロジカルデコーディングで巨大なサブトランザクションが一部あるいは全部欠ける可能性があり、修正されました。 (Petru-Florin Mihancea) (9.5)(9.4)</li>
<li>ロジカルデコーディングで、サブトランザクションに実質的な変更を含まず、外側のトランザクションが変更を含んでいる場合に、デコードに失敗するのが修正されました。 (Marko Tiikkaja, Andrew Gierth) (9.5)(9.4)</li>
<p>
以下のようなトランザクションで、外側トランザクションでの INSERT がデコードされませんでした。
</p>
<pre>db=# BEGIN;
db=# INSERT INTO xact_test VALUES ('main-txn');
db=# SAVEPOINT foo;
db=# SELECT 1 FROM xact_test FOR UPDATE ;
db=# COMMIT;
</pre>
<li>バックエンドが共有カタログの最新の統計を確実に見るようになりました。 (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
統計情報コレクタは、通常バックエンドからの要求後、共有カタログについて統計ファイルの更新に失敗していました。この問題は、自動VACUUMランチャーが定期的に更新を生じさせる要求を出すため、部分的に隠されていました。しかし、自動VACUUM を無効にして露見しました。
</p>
<p>
共有カタログにはデータベース単位でなく、インスタンス単位の情報が記録されます。
</p>
<li>複数バックエンドが近接して共に更新を要求したとき、統計ファイルの冗長な書き込みを回避するようになりました。 (Tom Lane, Tomas Vondra) (9.5)(9.4)(9.3)</li>
<li>VACUUM でトランザクションID の消費を回避するようになりました。 (Alexander Korotkov) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
一部ケースで VACUUM は不要に XID を現在トランザクションに割り当てました。通常これはごく僅かですが、XID周回の上限に直面したとき、XID周回対策の VACUUM でさらに多くの XID を消費するのは甚だ良くない動作です。
</p>
<li>9.3 より前のバージョンから pg_upgrade でアップグレードしたインスタンスで、マルチトランザクションID の VACUUM処理にて失敗する可能性があり、修正されました。 (Andrew Gierth, Álvaro Herrera) (9.5)(9.4)(9.3)</li>
<p>
本障害のよくある症状は以下のようなエラーです。
</p>
<pre>ERROR:  MultiXactId NNN has not been created yet -- apparent wraparound.
</pre>
<li>カラムリストを指定した手動 ANALYZE ではテーブルの changes_since_analyze カウンタをリセットしなくなりました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
ANALYZEコマンドは以下のように特定テーブルの特定カラムを指定して実行することができます。
</p>
<pre>=# ANALYZE t25 (col1, col2);
</pre>
<p>
このような一部のカラムのみの ANALYZE を行なっている場合に、他のカラムのための自動ANALYZE が阻害されるべきではありません。
</p>
<li>ANALYZE で多数のヌルエントリがある、ユニークかほぼユニークなカラムに対する n_distinct の過大評価が修正されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
各 null が、それぞれ別の値である(distinct)とカウントされており、いくつかのクエリ形式では、深刻なプランナの予測間違いに繋がります。
</p>
<li>autovacuum で、同じ共有カタログに対して複数のワーカが処理開始するのを避けるようになりました。 (Álvaro Herrera) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
通常、vacuum は長くかからないので、これは大きな問題になりません。しかし稀に深刻に肥大化したカタログのケースでは、ひとつを除きすべてのワーカが、他のテーブルで有益な作業をせずに、無駄に待機する結果になります。
</p>
<li>B-Tree のマーク/リストア処理のバグが修正されました。 (Kevin Grittner) (9.5)</li>
<p>
この間違いは、マージジョインの内側ノードが B-Treeインデックススキャンの時に、誤った結合結果やアサーション失敗をひき起こす原因となっていました。
</p>
<li>B-Tree インデックスページの削除が中断された時、二重にバッファロック解放が行われるのを回避するようになりました。 (Tom Lane) (9.5)(9.4)</li>
<p>
この間違いは、壊れたB-Treeインデックスを伴ういくつかのケースで VACUUM完了を妨げます。VACUUM で以下のエラーが出るケースが報告されています。
</p>
<pre>ERROR:  lock main NNNNN is not held
</pre>
<li>巨大な(shared_buffers を越える)ハッシュインデックスの作成が修正されました。 (Tom Lane) (9.5)</li>
<p>
巨大なインデックスの際に使われるコードパスに不具合があり、誤ったハッシュ値がインデックスに挿入されます。そのため、初期構築後にインデックスに挿入されたタプルを除き、その後のインデックスサーチは常に失敗しました。
</p>
<p>
エラーが出るのではなく、本来見つかるべき行が見つからない結果になります。
</p>
<li>GiSTインデックス作成で幾何データ型カラムの成分に NaN値を含む場合に無限ループになる可能性が防止されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<p>
box型に対する CREATE INDEX ... USING gist ... コマンドが応答しない動作が、報告されています。
</p>
<li>contrib/btree_gistインデックスの intervalカラムを使った、近傍検索(ORDER BY distance) インデックススキャンで、クラッシュする可能性があり、修正されました。 (Peter Geoghegan) (9.5)</li>
<li>BRINインデックスエントリを更新する時、BRINタプルの追加に失敗するケースの PANIC が修正されました。 (Álvaro Herrera) (9.5)</li>
<p>
以下のように PANIC が生じて、マスタプロセスの停止または再起動が生じていました。
</p>
<pre>WARNING:  specified item offset is too large
PANIC:  failed to add BRIN tuple
</pre>
<li>バックグラウンドワーカの停止時に、バックグラウンドワーカを制御するバックエンドプロセスがクラッシュする可能性あり、修正されました。 (Dmitry Ivanov) (9.5)</li>
<li>PL/pgSQL で IMPORT FOREIGN SCHEMA コマンド内の INTO 句の扱いが修正されました。 (Tom Lane) (9.5)</li>
<p>
これまで PL/pgSQL内では、INTO 付きの IMPORT FOREIGN SCHEMA が動作しませんでした。
</p>
<li>contrib/btree_gin が bigint型の最小値を正しく扱えるように修正されました。 (Peter Eisentraut) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>libpq が将来のサーババージョンを正しく解釈できるようになりました。 (Peter Eisentraut) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
9.6 以降のリリースでは、サーババージョンが現在の 3 パートから、2パートに変更される計画です。PQserverVersion() がその様な時にも正しい値を返すようになりました。
</p>
<li>"unsigned long long" 型の配列要素に関する ecpg コードが修正されました。 (Michael Meskes) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>pg_dump の -c と -C オプションで、不要な CREATE SCHEMA public コマンドが出力されないようになりました。 (David Johnston, Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<li>パラレル pg_dump と pg_restore で SIGTERM や Ctrl-C の扱いが改善されました。 (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
ワーカプロセスが速やかに終了するようになり、また、CREATE INDEX の様な長時間実行されるケースに対応するため、クエリキャンセル要求が接続されたバックエンドに送られるようになりました。
</p>
<li>パラレル pg_dump と pg_restore のエラー報告が修正されました。 (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
これまでは、pg_dump や pg_restore のワーカプロセスからのエラーメッセージがユーザのコンソールに出力されないことがありました。
</p>
<p>
メッセージはマスタプロセスを通して伝達されますが、いくつかデッドロックするシナリオがあり、マスタプロセスのメッセージ伝搬を妨げていました。代わりとして単純に stderr にすべてを出力します。いくつかのケースでは、重複するメッセージが出力されることになります。例えばすべてのワーカがサーバシャットダウンを報告します。
</p>
<li>Windows でのパラレル pg_dump や pg_restore で、エラー後は適切に停止するようになりました。 (Kyotaro Horiguchi) (9.5)(9.4)(9.3)</li>
<p>
以前までは、エラーは報告するけれど、ユーザが手動で停止するまで居座っていました。
</p>
<li>スタンバイサーバに対するパラレル pg_dump が適切に失敗するようになりました。 (Magnus Hagander) (9.5)</li>
<p>
--no-synchronized-snapshots が指定されていない場合、この使い方はサポートされませんが、エラーが適切に処理されていませんでした。
</p>
<li>zlib サポートなしでビルドされた pg_dump の振る舞いが改善されました。 (Kyotaro Horiguchi) (9.5)(9.4)(9.3)</li>
<p>
パラレルダンプが正しく動作しなかったり、無意味な警告が発せられるケースがありました。圧縮を必要としないオプションであるにも拘らず、以下メッセージが出る場合が報告されています。
</p>
<pre>pg_dump: [archiver] WARNING: requested compression not available in this installation -- archive will be uncompressed
pg_dump: [parallel archiver] not built with zlib support
</pre>
<li>pg_basebackup は -Z 0 で圧縮なし指定と受け取るようになりました。 (Fujii Masao) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これまでは無効な圧縮レベルであるとして、「pg_basebackup: invalid compression level ...」というエラーになっていました。
</p>
<li>パラレルメイクで AIX の共有ライブラリを安全にビルドできるようにmakefile のルールを修正しました。 (Noah Misch) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>TAP テストと MSVC スクリプトが、ビルドディレクトリパス名に空白が含まれていても、動くようになりました。 (Michael Paquier, Kyotaro Horiguchi) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>statement_timeout と lock_timeout の報告が、より予測可能になりました。 (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
負荷の高いマシンでは、ステートメントタイムアウトが先に発生したのに、ロックタイムアウトが報告されるため、リグレッションテストが時々失敗していました。
</p>
<li>デンマーク語とウェールズ語ロケールでのレグレッションテストが安全になりました。 (Jeff Janes, Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これらのロケールで通常と異なるソートルールの引金になるテストデータが修正されました。
</p>
<li>タイムゾーンコードのコピーが IANA の tzcode release 2016c に合わせて更新されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これはタイムゾーンデータファイルの将来の変更を見越した対応で必要になります。また通常と異なるタイムゾーンの対処で、稀にあるバグを修正しています。
</p>
<li>タイムゾーンデータが tzdata release 2016f に更新されました。 (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
ケメロヴォとノヴォシビルスクの夏時間の変更と、アゼルバイジャン、ベラルーシ、およびモロッコの歴史的な修正が含まれます。
</p>
<li>hot standby クエリが VACUUM FREEZE でキャンセルされないようになりました。 (Simon Riggs, Álvaro Herrera) (9.4)(9.3)(9.2)(9.1)</li>
<p>
アイドルではないマスタサーバ上の VACUUM FREEZE は、スタンバイサーバのクエリを不必要にキャンセルすることがありました。
</p>
<li>pg_ctl start -w のタイムアウトが古いヒューリスティックな方法に戻りました。 (Tom Lane) (9.1)</li>
<p>
9.1.20 から採用された新しい方法は silent_mode が有効な時にうまく動きません。そのため古い方法に戻されました。
</p>
</ol>
</p>
<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.2.17 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-17/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 12 May 2016 01:03:23 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1744</guid>

					<description><![CDATA[このリリースは 9.2.16 からの修正リリース（2016年5月12日リリース）です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.11 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.16 からの修正リリース（2016年5月12日リリース）です。</p>
<p>9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1744"></span></p>
<h3>PostgreSQL 9.2.16 から 9.2.17 への変更点</h3>
<p>9.5.3、9.4.8、9.3.13、9.2.17、9.1.22 の各バージョンが同時にリリースされており、<br />
本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を<br />
項目末尾に括弧書きで記載しています。<br />
<hr />
<ol class="technology">
<li>OpenSSLのエラーキューを既にクリアされているとみなすのでなく、OpenSSL呼び出し前にクリアするようになりました。また、確実に呼出し後にクリアしておくようにしました。  (Peter Geoghegan, Dave Vitek, Peter Eisentraut) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
この変更は単一プロセス内に OpenSSLを使った複数の接続があって、エラーキューをクリアするときの規則が一貫していない場合の問題を防止します。
</p>
<p>
具体的には、クライアントアプリケーションが、OpenSSL の PHP、Python、または Ruby によるラッパーを使った SSL接続と並行して、libpq で SSL接続を使用した場合に、障害が報告されました。OpenSSL を使用する命令で予想外のエラーが発生します。
</p>
<p>
サーバ内でも、拡張モジュールが SSL接続をしにいく場合には同様の問題が起きる可能性があります。
</p>
<li>LEFT JOIN の右手側の中の FULL JOIN で、プランナエラー「ERROR:  failed to build any N-way joins」が出るのが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
メッセージ中の N-way の N には実際には数字が入ります。
</p>
<p>
「LEFT JOIN の右手側の中の FULL JOIN」とは以下のような形状の SQL を意味します。
</p>
<pre>
SELECT * FROM
    (SELECT 1 AS id) AS xx
  LEFT JOIN
    (SELECT 1 AS id) AS a1 FULL JOIN (SELECT 1 AS id) AS yy ON (a1.id = yy.id)
  ON (xx.id = coalesce(yy.id));
</pre>
<li>多段の入れ子ループ内における等価クラステストの誤った扱いが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<p>
X.X = Y.Y = Z.Z のような 3つ以上からなる値の等価クラスが与えられたとき、同値であるようにするために必要な検査の一部を、プランナが無視する可能性があり、出力される結合結果が WHERE句を満たさないことがありえました。
</p>
<p>
様々な理由により実際には誤ったプランは滅多に選択されません。そのため、本障害は長い間みつかりませんでした。
</p>
<p>
以下のようなプラン形状のときに該当します。
</p>
<pre>
Nested Loop
  -&gt;  Scan X
  -&gt;  Nested Loop
    -&gt;  Scan Y
    -&gt;  Scan Z
          Filter: Z.Z = X.X
</pre>
<li>operator_precedence_warning = on のときの稀なパーサエラーが修正されました。  (Tom Lane) (9.5)</li>
<p>
以下に発生例を示します。
</p>
<pre>
db1=# SELECT (ARRAY[])::text[];
 array
-------
 {}
(1 row)

db1=# SET operator_precedence_warning TO on;
SET

db1=# SELECT (ARRAY[])::text[];
ERROR:  cannot determine type of empty array

db1=# SELECT ARRAY[]::text[];
 array
-------
 {}
(1 row)
</pre>
<li>GINインデックススキャンでの問い合わせ処理内のメモリリークが修正されました。  (Julien Rouhaud) (9.5)(9.4)</li>
<li>GINインデックス挿入において、問い合わせ処理内のメモリリークと、インデックス破損の可能性が修正されました。  (Tom Lane) (9.5) (9.4)</li>
<p>
このメモリリークは単純な問い合わせにおいては通常は大きな量になりません。しかし、大きな maintenance_work_mem 値で巨大な GINインデックスを作成するときには、かなりの量になることがありえます。
</p>
<li>to_timestamp() における整形コード TH、th、Y,YYY に誤動作の可能性があり、修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これらが入力文字列の終端を超えた参照をして、以降の整形コードでゴミが読み取られるおそれがありました。
</p>
<p>
また、本障害をデータ露出させる攻撃に使うことは極めて困難と判断されました。
</p>
<li>「値 演算子 ANY ( 配列 )」という構造の「配列」が副問い合わせである場合について、ルールとビューのダンプが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
実行するとエラーになる誤った定義がダンプ出力されていました。以下に障害動作例を示します。
</p>
<pre>
(正常に実行できる SQL)
db1=# SELECT 'c'::text = ANY
        ((SELECT array['a','b','c']::text[])::text[]) c1;
 c1
----
 t
(1 row)

db1=# CREATE VIEW v1 AS
        SELECT 'c'::text = ANY
          ((SELECT array['a','b','c']::text[])::text[]) c1;

(ビュー定義して、定義を出力すると変形している)
db1=# SELECT pg_get_viewdef('v1', true);
                                             pg_get_viewdef                     
--------------------------------------------------------------------------------------------------------
  SELECT 'c'::text = ANY ((( SELECT ARRAY['a'::text, 'b'::text, 'c'::text] AS "array"))) AS c1;
(1 row)

(これを再度定義に適用するとエラーになる)
db1=# CREATE VIEW v1_restore AS 
        SELECT 'c'::text = ANY
          ((( SELECT ARRAY['a'::text, 'b'::text, 'c'::text] AS "array"))) AS c1;
ERROR:  operator does not exist: text = text[]
</pre>
<li>ALTER SYSTEM パラメータ値で改行が禁止されました  (Tom Lane) (9.5)(9.4)</li>
<p>
設定ファイルのパーサは文字列リテラル中に改行が含まれることに対応していません。したがって、ALTER SYSTEM でも禁止すべきでした。
</p>
<li>ALTER TABLE ... REPLICA IDENTITY USING INDEX で、OID のインデックスが指定された場合でも適切に動作するように修正されました。  (David Rowley) (9.5)(9.4)</li>
<p>
WITH OIDS を指定したテーブルの OID列のインデックスを指定した場合に、クラッシュや奇妙なメッセージが生じることがありました。
</p>
<li>テーブルスペースのシンボリックリンクを削除するのに失敗した後に起きる可能性があった誤動作を回避するようになりました。  (Tom Lane) (9.5)</li>
<li>アラインメントにうるさいプラットフォーム上でのロジカルデコーディングのクラッシュが修正されました。  (Tom Lane, Andres Freund) (9.5)(9.4)</li>
<p>
トランザクションが溢れてディスクに書き出されるだけの大きさであり、かつ、トランザクション中で主キーが変更される場合に限って、障害が発生します。
</p>
<li>walsenderプロセスが停止しようとしている間、receiverからのフィードバックのためのリクエストが繰り返されるのを回避するようになりました。  (Nick Cleaton) (9.5)(9.4)</li>
<li>pg_regress が PGCTLTIMEOUT環境変数で指定された起動タイムアウトを使うようになりました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
一つ前のマイナーリリースで pg_ctl が PGCTLTIMEOUT を参照するようになっていて、これと一貫性を持たせるための変更です。遅いマシンでのテストを容易にします。
</p>
<li>pg_upgrade が、拡張モジュールの一つだけの演算子クラスを含む演算子族の所属を正しくリストアできるように、修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
このような場合、演算子族は新しいデータベースにリストアされますが、拡張モジュールの一部であるとマークされませんでした。即座には悪影響は生じませんが、後に pg_dump を実行して、それをリストアする時に（無害ですが）エラーが生じます。
</p>
<li>pg_upgrade が、新クラスタの TOAST規則が旧クラスタと異なるときに失敗しないように、修正されました。  (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
pg_upgrade には、あるテーブルに旧バージョンでは TOASTテーブルが無く、新PostgreSQLバージョンではそのテーブルは TOASTテーブルを持つべきという場合を扱う処理実装が含まれていました。
</p>
<p>
この実装が壊れていたため、このような場合には何もしないように修正されました。実際のところ、アップグレード後のクラスタで旧バージョンの規則にしたがってテーブルに付随する TOASTテーブルが無かったとしても、特に問題ないと考えられます。
</p>
<li>IBM の XLCコンパイラを使ったときの PPCアーキテクチャむけアトミック操作が修正されました。  (Noah Misch) (9.5)</li>
<li>--disable-spinlocks を指定したビルドから使われる SysVセマフォの数を減らしました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<li>NetBSD のライブラリ関数との衝突を避けるため、内部関数 strtoi() が strtoint() に名前変更されました。  (Thomas Munro) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>Windows における bind()、listen() からのエラー報告が修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
ソケットエラーについて Windows と Unix のエラー番号変換が拡充されました。これまで「could not bind IPv4 socket: No error」といったエラーが出ていたケースで有益なエラーメッセージが得られるようになります。
</p>
<li>Visual Studio むけビルドスクリプトで、コンパイラ出力の verbosity設定（冗長さ）を detailed から normal に減らしました。  (Christian Ullrich) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>Visual Studio 2015 でのビルドをサポートしました。  (Michael Paquier, Petr Jel&iacute;nek) (9.5)</li>
<p>
VS2015 でビルドされたプログラムは、Windows Vista より以前の Windows では動作しません。(locale 判定の方法が変更されたため)
</p>
<li>Visual Studio 2013 で正しく動作するように putenv() を修正しました。  (Michael Paquier) (9.5)(9.4)(9.3)</li>
<li>Windows の FormatMessage() 関数の安全でない可能性がある利用を避けるようにしました。 (Christian Ullrich) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>FORMAT_MESSAGE_IGNORE_INSERTS フラグを適切な箇所で使います。既知のバグはありませんが、注意するのは良いことです。
</p>
<li>タイムゾーンデータが tzdata release 2016d に更新されました。   (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
ロシアとベネズエラの夏時間の変更。新しいゾーン名 Europe/Kirov と Asia/Tomsk があり、これらの地域は、隣接する地域とは異なるタイムゾーンの歴史を持っています。
</p>
<li>9.4系でのメモリバリアコードの変更を 9.2 と 9.3 にバックポートしました。 (Tom Lane) (9.3)(9.2)</li>
<p>
これらの変更は 9.4以前のブランチでは元々は不要でした。しかし最近、バリアコードを正しく動作させる修正がバックパッチされました。IA64(iccを使った時), HPPA, Alpha のプラットフォームが影響を受けます。
</p>
</ol>
</p>
<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.2.16 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-16/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 31 Mar 2016 01:03:50 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1709</guid>

					<description><![CDATA[このリリースは 9.2.15 からの修正リリース（2016年3月31日リリース）です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.11 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.15 からの修正リリース（2016年3月31日リリース）です。</p>
<p>9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1709"></span></p>
<h3>PostgreSQL 9.2.15 から 9.2.16 への変更点</h3>
<p>9.5.2、9.4.7、9.3.12、9.2.16、9.1.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<p>Cロケール以外をお使いの場合、本バージョンへのアップデート後に REINDEX が必要になります。<br />
<hr />
<ol>
<li>Cロケール以外での文字列ソートに短縮キーが使えなくなりました。  (Robert Haas) (9.5)</li>
<p>
PostgreSQL 9.5 から、strcoll() に代えて strxfrm() を使うことで文字列比較を高速化する仕組みが導入されました。現在ほとんどのバージョンの glibc で、一部ロケールにおいて strxfrm()の実装が誤っていて、比較結果が strcoll() と一致しないことが明らかになりました。この問題がよく把握されるまで、この最適化はCロケール以外では無効となりました（Cロケールの場合、strcoll() も strxfrm() 使わないので安全です）。
</p>
<p>
この変更は、文字列データ型に対するソートのみならず B-treeインデックス上の並び順にも影響します。バージョンアップ後に REINDEX が必要です。
</p>
<p>
ここで影響のあるロケールの網羅的なリストを示すことはできません。Cロケールは安全です。en_US のような英語ベースのロケールは問題ないと見られます。de_DE など、その他の一般的なロケールは、ほとんどのglibc バージョンで影響があります。
</p>
<li>キャッシュされたプランで行セキュリティ状態を適切に保つようになりました。  (Stephen Frost) (9.5)</li>
<p>
2つ以上のロールで問い合わせが実行されるセッションでは、プランキャッシュが他のロールで生成されたプランを誤って再利用する可能性があり、これにより、行単位セキュリティが使われているとき、間違ったポリシーセットが適用されるおそれがありました。(CVE-2016-2193)
</p>
<li>contrib/pageinspect拡張モジュールの新たな関数に管理者ユーザであるかのチェックが追加されました。  (Andreas Seltenreich) (9.5)</li>
<p>
bytea型データを解析する pageinspect拡張モジュールの大部分の関数は、一般ユーザからの呼び出しを許可していませんが、brin_page_type() とbrin_metapage_info() ではチェックが漏れていました。
</p>
<p>
作りこまれた byteaデータをこれらの関数に渡すことで、サーバをクラッシュさせたり、わずかなサーバメモリを露出させることができるかもしれません。(CVE-2016-3065)
</p>
<li>インデックス付けされた ROW() の比較について修正されました。  (Simon Riggs) (9.5)</li>
<p>
ここで ROW() とは複数カラムの1行データを指します。ROW(1, 100, 'A') のように記述しますが、単に (1, 100, 'A') のようにも書きます。
</p>
<p>
複数カラムに条件を付けて検索した場合に、インデックス順序が一部だけ適合するような複合インデックスが使われると誤った結果が返ることがありました。以下に例を示します。
</p>
<pre>
db=# CREATE TABLE t1 AS
       SELECT (10 + random() * 10)::int AS c1,
            round((10 + random() * 10)::numeric, 5) AS c2
         FROM generate_series(1, 10000) g;

db=# SELECT count(*) FROM (
       SELECT * FROM t1 WHERE (c1, c2) &lt; (20, 11)
         ORDER BY c1 DESC, c2) v;

db=# CREATE INDEX idx_t1 ON t1 USING btree (c1 DESC, c2 ASC);

 → インデックス作成後、再度、上記の SELECT を行うと結果が異なることがある
</pre>
<p>
9.5.0 で導入された最適化が原因です。より良い修正方法が得られるまで、ひとまず当該の最適化を除去するものとなりました。
</p>
<li>インデックス付けされた ROW() の比較において、NULLインデックス項目の誤った扱いが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
「 ROW(a, b) &gt; ROW('x', 'y') 」のような行比較をするインデックス検索が、bカラムで NULLに当たるとそこで止まってしまいました。そのため誤った結果が返る可能性があります。
</p>
<p>
以下に問題発生例を示します。本例末尾の SELECT文は、"Seq Scan" 以外の全てのインデックスを使うプランタイプにおいて誤った出力になります。
</p>
<pre>
(間に b=NULL の行が1000行挟まっているデータを作成)
db=# CREATE TABLE t2 (id int primary key, a text, b text);
db=# INSERT INTO t2 VALUES (0, 'a', 'b');
db=# INSERT INTO t2 SELECT g, 'a', NULL FROM generate_series(1, 1000) AS g;
db=# INSERT INTO t2 VALUES (1001, 'z', 'y');

(正しい出力)
db=# SELECT a, b FROM t2 WHERE (a, b) &gt; ('a', 'a') ORDER BY a, b;
 a | b
---+---
 a | b
 z | y
(2 rows)

(インデックスが使われて、誤った出力)
db=# CREATE INDEX idx_ab_t2 ON t2 (a, b);
db=# SELECT a, b FROM t2 WHERE (a, b) &gt; ('a', 'a') ORDER BY a, b;
 a | b
---+---
 a | b
(1 row)
</pre>
<li>前後に適切な fsync() 実行の無いファイル名変更によるデータ損失シナリオを回避するように修正されました。  (Michael Paquier, Tomas Vondra, Andres Freund) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
電源断など OS/ハードウェアが異常停止した際にデータが壊れるおそれがありました。ただし、発生の可能性は低いといえます。
</p>
<li>SELECT ... FOR UPDATE/SHARE を行い、かつ、ロックを必要としないリレーションも含むクエリにおいて、同時に変更された行の再チェックを行うときの振る舞いが修正されました。  (Tom Lane) (9.5)</li>
<p>
ロックされないリレーションに由来する行が、再チェックの間、全て NULL であるかのように誤って扱われていました。このことで、更新された行が WHERE条件を満たさなくなったと誤って判断されたり、誤って NULL が出力される可能性がありました。
</p>
<p>
以下の再現例が報告されています。
</p>
<pre>
db=# CREATE TABLE t3 (id int primary key, v text);
db=# CREATE TABLE t4 (id int primary key, v text,
       CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES t3 (id));
db=# INSERT INTO t3 VALUES (1, 'A');
db=# INSERT INTO t4 VALUES (1, 'B');

(接続その1)             (接続その2)
db=# BEGIN;
db=# UPDATE t3 SET v = 'A' WHERE id = 1;
db=#
                        db=# pset null *null*
                        db=# SELECT t3.v AS t3v, 
                               (SELECT t4.v FROM t4 WHERE t3.id = t4.id) AS t4v
                               FROM t3 WHERE t3.id = 1 FOR UPDATE OF t3;
                        ...ロック待ち...
db=# COMMIT;
                        ...ロック待ち解除後に応答に NULL が混入...
                          t3v |  t4v
                         -----+--------
                          A   | *null*
                         (1 row)
</pre>
<li>json_to_record() 関数の障害が修正されました。  (Tom Lane) (9.5)(9.4)</li>
<p>
入力オブジェクトがサブオブジェクトを含み、そのフィールド名が要求された出力カラム名のどれかに一致していた場合に、エラーになったり、出力が不正になったりしていました。
</p>
<p>
以下に例を示します。
</p>
<pre>
db=# SELECT * FROM json_to_record('{"a":0,"b":{"c":1,"a":2}}'::json)
                   AS t(a int , b text);
ERROR:  invalid input syntax for integer: "{"c":1,"a":2"

正しい出力は以下です。
 a |       b
---+---------------
 0 | {"c":1,"a":2}
(1 row)

db=# pset null *null*
db=# SELECT t.c FROM json_to_record('{"a":1,"b":{"c":16,"d":2},"x":8}'::json)
                     AS t(a int, b json, c text, x int);
    c
---------
 {"c":16
(1 row)

正しい出力は以下です。サブオブジェクトは取得できないのが正常です。
   c
--------
 *null*
(1 row)
</pre>
<li>jsonb_object() 関数を 2引数で空配列にて呼び出した場合について修正されました。  (Michael Paquier, Andrew Dunstan) (9.5)</li>
<p>
以下のようなエラーが発生していました。
</p>
<pre>
db=# SELECT jsonb_object('{}'::text[], '{}'::text[]);
ERROR:  unknown type of jsonb container

正しい出力は以下。空のJSONBオブジェクトが返る。
 jsonb_object
--------------
 {}
(1 row)
</pre>
<li>jsonb_set() 関数にて、パス配列の要素が配列添え字として使う整数に変換されるときの誤動作が修正されました。  (Michael Paquier) (9.5)</li>
<p>
与える添え字用の値によっては不適切なエラーが出ることがあります。また、最悪の場合にはクラッシュをひき起こす可能性があります。
</p>
<pre>
(正常動作の場合)
db=# SELECT jsonb_set('{"a":[1],"b":[]}'::jsonb, '{"a",1}'::text[], '100');
       jsonb_set
-----------------------
 {"a": [1, 100], "b": []}
(1 row)

db=# SELECT jsonb_set('{"a":[1],"b":[]}'::jsonb, '{"a",9999}'::text[], '100');
ERROR:  path element at the position 2 is not an integer
</pre>
<li>to_char() のテンプレートパターン「OF」による負のタイムゾーンオフセットの誤った整形が修正されました。  (Thomas Munro, Tom Lane) (9.5)(9.4)</li>
<pre>
(9.5.2 実行例)
db=# SET timezone = '00:30';
SET
db=# SELECT to_char(now(), 'OF');
 to_char
---------
 -00:30
(1 row)

(9.5.1 実行例)
db=# SET timezone = '00:30';
SET
db=# SELECT to_char(now(), 'OF');
 to_char
---------
 +00:30
(1 row)

(9.4.6 実行例)
db=# SET timezone = '00:30';
SET
db=# SELECT to_char(now(), 'OF');
 to_char
---------
 +00:-30
(1 row)
</pre>
<li>INSERT ... ON CONFLICT による待機について誤ったログ出力の可能性があり、修正されました。  (Peter Geoghegan) (9.5)</li>
<p>
原因となる制約が無いにも拘らず、排他制約のために待ちが生じたとログ出力されていました。
</p>
<p>
log_lock_waits = on を設定した時のログで CONTEXT: に以下のように出力されます。
</p>
<pre>
LOG:  process 12345 acquired ShareLock on transaction 1234 after 12345.678 ms
CONTEXT: while checking exclusion constraint on tuple (1,2) in relation "t3"
</pre>
<li>リカバリが一貫性のある状態に達するまで、recovery_min_apply_delay パラメータを無視するようになりました。  (Michael Paquier) (9.5)(9.4)</li>
<p>
これまでスタンバイサーバは、データベースを有効な状態にするために必要とされるWALの初期部分を再生するときであっても、recovery_min_apply_delay 設定に対応して WALレコード適用を遅延していました。
</p>
<p>
スタンバイサーバは一貫性のある状態に到達するまで使えないため、この動作は役に立たないと判断されました。
</p>
<li>サーバのスタートアップ中、pg_subtrans が XID周回に近い場合について正しく処理するように修正されました。  (Jeff Janes) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
上記の「スタートアップ中」は、リカバリ中やスタンバイサーバ稼動中の状態が含まれます。
</p>
<p>
pg_subtrans/ 以下にファイルが大量に作られる現象が報告されています。
</p>
<li>ロジカルデコーディングにおけるいくつかの障害が修正されました。  (Andres Freund) (9.5)(9.4)</li>
<p>
問題ケースには以下が含まれます。
</p>
<p>
テーブルに指定された REPLICA IDENTITY が FULL であって変更タプル群が 1ページよりも大きい場合にアサート失敗を、またアサート無しのビルドで何らかの不正動作を、引き起こします。
</p>
<p>
ディスクへのスプールを要するほどに大きいトランザクション内でのプライマリキーを変更する UPDATE で新旧データが入れ替わってしまいました。
</p>
<p>
不正なエラー「ERROR: subxact logged without previous toplevel record」が発生することがありました。
</p>
<p>
9.5.x で誤ったトランザクションのコミット時刻が報告されました。
</p>
<li>入れ子になったセキュリティバリアビューについて、外側のビューが相関サブクエリを含むWHERE句を持つときのプランナの誤りが修正されました。  (Dean Rasheed) (9.5)(9.4)</li>
<p>
以下の v2 のような形のビュー定義が該当します。
</p>
<pre>
CREATE VIEW v1 WITH (security_barrier = true) AS
  SELECT * FROM t1 WHERE (c1 &gt; 0)
  WITH CHECK OPTION;

CREATE VIEW v2 WITH (security_barrier = true) AS
  SELECT * FROM v1 WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.c1 = v1.c1)
  WITH CHECK OPTION;
</pre>
<p>
ビューの参照時に予期せぬエラー「ERROR:  XX000: plan should not reference subplan's variable」がでるケースが報告されました。
</p>
<li>GINインデックス検索でメモリリークが修正されました。  (Tom Lane) (9.5)</li>
<li>ロケール機能の実装コードが稀な状況でメモリ二重解放によりクラッシュすることがあり、修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>全文検索の ispell辞書むけ接辞ファイル(AffFile)の読み取りが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
大文字小文字変換でバイト長が変わる文字が含まれている接辞ファイルに対して動作が狂うかもしれませんでした。例えばトルコ語で UTF8 のロケールにおける「I」が該当します。
</p>
<li>ispell辞書ファイルの読み取りで sscanf() を使わないようになりました。  (Artur Zakirov) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これにより Mac OS X を含む FreeBSD派生のプラットフォームにおける移植性の問題を回避します。
</p>
<li>IBM xlcコンパイラでの PPC 上のアトミック操作コードが修正されました。  (Noah Misch) (9.5)</li>
<p>
この誤りは該当プラットフォーム上で稀に同時操作の失敗をもたらします。
</p>
<li>Visual Studio 2013 でビルドした PostgreSQL が、AVX2-capable CPU を使ったサーバ上の古いバージョンの Windows (7 sp1 / 2008R2 sp1より古い) でクラッシュするのを回避するように修正されました。  (Christian Ullrich) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
修正は Microsoft が修正しないと表明している Visual Studio 2013 のランタイムライブラリのバグを回避するものです。
</p>
<li>psql のタブ補完がマルチバイト文字を適切に扱えるように修正されました。  (Kyotaro Horiguchi, Robert Haas) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>SECURITY LABEL に対する psql のタブ補完が修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
SECURITY LABEL の後 TAB を押すとクラッシュしたり、あるいは、不適切なキーワードが提示される可能性がありました。
</p>
<li>pg_ctl がコマンドラインに指定がなくとも PGCTLTIMEOUT環境変数による待機タイムアウトを受け入れるようになりました。  (Noah Misch) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
本環境変数の参照は本マイナーバージョンで追加された動作となります。
</p>
<li>pg_ctl にて Windowsサービス状態の検査が修正されました。  (Manuel Mathar) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
前のマイナーリリースで、ログメッセージを Windowsイベントログに出すかどうか適切に判断する修正が試みられましたが、逆さまに検査していました。
</p>
<li>pgbench が -C と -M prepared オプションの組み合わせを正しく扱えるように修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これまでは当該オプション組み合わせでは動作しませんでした。
</p>
<li>pg_upgrade で、新データディレクトリが旧データディレクトリ内にあるとき削除スクリプトの作成を省略するようになりました。  (Bruce Momjian) (9.5)(9.4)(9.3)</li>
<p>
上記ケースで盲目的にこのスクリプトを適用すると結果として新データディレクトリが失われてしまいます。
</p>
<li>PL/Perl で空の PostgreSQL配列を空の Perl配列に適切に変換できるように修正されました。  (Alex Hunsaker) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>PL/Python で有効な Python識別子でない関数名をうまく処理できるようになりました。  (Jim Nasby) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>contrib/pgstattuple の pgstatindex()関数が返す統計について、いくつかの誤りが修正されました。  (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
デッドページが有効なページと報告されていました。インデックスメタページがインデックスサイズに含まれていませんでした。ルートページが internal_pages に含まれていませんでした。ドキュメントもいくつか修正されました。
</p>
<p>
本修正前後のマイナーバージョンでの結果と数値比較をする場合には注意が必要となります。
</p>
<li>psed が Perl本体で提供されなくなったため、MSVCビルドで psed への依存が除かれました。  (Michael Paquier, Andrew Dunstan) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>タイムゾーンデータファイルが tzdata release 2016c に更新されました。   (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
アゼルバイジャン、チリ、ハイチ、パレスチナ、ロシア（アルタイ、アストラハン、キーロフ、サハリン、ウリヤノフスク地域）の夏時間法の変更、加えて、リトアニア、モルドバ、ロシア（カリーニングラード、サマラ、ヴォルゴグラード）の歴史的修正が含まれます。
</p>
</ol>
</p>
<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.2.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-2-15/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 11 Feb 2016 01:03:02 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1692</guid>

					<description><![CDATA[このリリースは 9.2.14 からの修正リリース（2016年2月11日リリース）です。 9.2.x からのアップデートではダンプ、リストアは不要です。 また、9.2.11 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.2.14 からの修正リリース（2016年2月11日リリース）です。</p>
<p>9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.2.11 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-2-11/">9.2.11 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1692"></span></p>
<h3>PostgreSQL 9.2.14 から 9.2.15 への変更点</h3>
<p>9.5.1、9.4.6、9.3.11、9.2.15、9.1.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>正規表現での無限ループやバッファオーバーランの問題が修正されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
非常に大きな文字範囲のブラケット式で、無限ループになったり、メモリのオーバーライトが起こっていました。本問題は CVE-2016-0773 として登録されています。
</p>
<pre>(障害発生する例)
SELECT regexp_matches('a', '[x0-x7fffffff]', 'i');
</pre>
<li>ハッシュ結合で内側リレーションの一部タプルがまれに結合で欠ける場合があり、修正されました。 (Tomas Vondra, Tom Lane) (9.5)</li>
<li>グループ化セットが使われる時は HAVING 句のプッシュダウンはされないようになりました。 (Andrew Gierth) (9.5)</li>
<li>ON CONFLICT構文の WHERE句の SQL文再構成について、修正されました。 (Peter Geoghegan) (9.5)</li>
<p>
一部のケースで ON ONFLICT .. WHERE を含むルール定義の出力が正しくなく、ダンプ／リストアに失敗する可能性があります。</p>
<li>log_line_prefix 設定におけるエスケープ %h、%r を log_connections 設定によるメッセージにも機能するようにしました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで %h と %r は新たなセッションが確立した後にしか出力されませんでした。
</p>
<pre>(9.5.0 で log_line_prefix = ' [%h/%r] '、log_connections = on のログ例)
 [/] LOG:  connection received: host=127.0.0.1 port=42424
 [127.0.0.1/127.0.0.1(42424)] LOG:  connection authorized: user=postgres database=db1
 [127.0.0.1/127.0.0.1(42424)] ERROR:  syntax error at or near "x" at character 1
 [127.0.0.1/127.0.0.1(42424)] STATEMENT:  x;
</pre>
<li>SSPI認証でトークンハンドルのリーク（クローズ漏れ）が修正されました。 (Christian Ullrich) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>psql det コマンドでのパターン引数の解釈が修正されました。 (Reece Hart) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
スキーマ修飾付きかもしれないパターンに対して他の d コマンドが行うのと同様の動作となります。
</p>
<pre>(dt だとスキーマ名だけ指定してもマッチしません)
db1=# dt scm1
No matching relations found.

db1=# dt scm1.*
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 hoge   | t1   | table | postgres
(1 row)

(det は、これまで例外的な動作でした)
db1=# det scm1
 List of foreign tables
 Schema | Table | Server
--------+-------+--------
 scm1   | ft1   | srv1
(1 row)
</pre>
<li>Windows における pg_ctl でサービス状態を確認して、ログメッセージの出力先を決めるようになりました。 (Michael Paquier) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで pg_ctl から出力されるメッセージをリダイレクションで取得できない問題がありました。
</p>
<li>pg_dump が拡張モジュールに属するデータベースオブジェクトを処理するときの例外的なケースの障害がいくつか修正されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>pg_dump におけるドメイン名の不適切なクオート付けが修正されました。 (Elvis Pranskevichus) (9.5)</li>
<p>
クオートを重複して付ける動作がありました。
</p>
<li>pg_dump がビューのトリガにそのルールの後に処理される必要があると印づけするようになり、パラレルpg_restore での失敗の可能性が予防されました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>pgbench でスクリプトに指定された除算や剰余演算子の評価における例外的なオーバーフロー条件での浮動小数点例外が防止されました。 (Fabien Coelho, Michael Paquier) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>9.3.x 以前のサーバに接続するときに pg_receivexlog が出力する無意味で混乱を招く警告メッセージが抑止されました。 (Marco Nenciarini) (9.5)</li>
<p>
9.3.x 以前のサーバは IDENTIFY_SYSTEM コマンドに対応していないために、「could not identify system: ...」というメッセージが出ていました。
</p>
<li>plpython2 と plpython3 を両方使うときのダンプ読み込みの問題を回避するようになりました。 (Tom Lane) (9.5)(9.4)(9.3)(9.2)</li>
<p>
(複数バージョンの libpython は安全に並行使用できませんが)同一セッションでなければ、原則として両バージョンの PL/Python を同一データベースで使用可能です。しかしながら、pg_restore と pg_upgrade はこの同一セッションの制約に抵触することがあります。これを PL/Python が読み込むコードをチェックするタイミングを変えることで回避しています。
</p>
<li>PL/Python の回帰テストが Python 3.5 で通るようになりました。 (Peter Eisentraut) (9.5)(9.4)(9.3)(9.2)</li>
<li>ある種の PL/Javaパラメータがスーパーユーザ以外から設定できてしまうのが防止されました。 (Noah Misch) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
この変更は PL/Java のセキュリティ障害(CVE-2016-0766)を軽減します。PL/Java は PostgreSQL本体には含まれませんが、本修正によりカスタム設定パラメータ pljava.classpath は、superuserコンテキストに設定されます。
</p>
<li>ecpgで提供されるヘッダファイルが、プリプロセッサ命令行にコメントを含まないように修正されました。 (Michael Meskes) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>hstore拡張モジュールの hstore_to_json_loose() 関数で、値を JSON数値に変換可能であるかの判定が修正されました。 (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
これまで本関数では構文的に不正な JSON を出力することがありました。以下の「2016-01-01」部分は「"2016-01-01"」と出力されるべきです。
</p>
<pre>(修正前の挙動)
db1=# SELECT hstore_to_json_loose(hstore('abc', '2016-01-01'));
 hstore_to_json_loose
----------------------
 {"abc": 2016-01-01}
(1 row)
</pre>
<li>postgres_fdw 拡張モジュールで、更新命令の AFTER ROW トリガーまたはRETURNING 式で tableoid を使う場合の障害が修正されました。 (Etsuro Fujita, Robert Haas) (9.5)(9.4)</li>
<p>
上記の場合にこれまで外部テーブルの tableoid カラム値として正しくない値が返っていました。
</p>
<li>実装上の定数 NAMEDATALEN (識別子の最大長) とMAX_LEVENSHTEIN_STRLEN (レーベンシュタイン距離計算における最大長)との間で NAMEDATALEN &lt;= MAX_LEVENSHTEIN_STRLEN という限定が除かれました。 (Robert Haas, Tom Lane) (9.5)</li>
<li>ワイルドカードでリンカに与えられるファイル名を固定順にすることで、ビルド出力の再現性が改善されました。 (Christoph Berg) (9.5)(9.4)(9.3)</li>
<p>
同じ条件で生成された実行ファイルにビットレベルでの差異が生じるのを防ぎます。
</p>
<li>MSVCビルドで dynloader.h がインストールされるヘッダファイルに含まれるようになりました。 (Bruce Momjian, Michael Paquier) (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<li>タイムゾーンデータファイルが tzdata release 2016a に更新されました。 (9.5)(9.4)(9.3)(9.2)(9.1)</li>
<p>
ケイマン諸島、メトラカトラ、ザバイカリエ地方(Zabaykalsky Krai) の夏時間法が変更され、パキスタンの歴史的な訂正が加わりました。
</p>
<li>json_path_ops 演算子クラスの GIN インデックスにおける一貫性に欠けたハッシュ計算が修正されました。 (Tom Lane) (9.4)</li>
<p>
同じ入れ子レベルにスカラとサブオブジェクトの両方を含む jsonb 値を処理するとき、見つかるべき項目が見つからないことがありえました。本修正を適用するには、アップグレード後に該当のインデックスを REINDEX する必要があります。
</p>
<p>
json_path_ops 演算子クラスは jsonb型に対する "@&gt;" 演算子に GINインデックスを適用するのに使われます。
</p>
<li>postmaster.pid ファイルが削除されたなら imediateシャットダウンを行うようになりました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
PostgreSQL のマスタープロセスは postmaster.pid ファイルが在り、自身の PID が書かれているかを毎分確認し、無かったり PID が違った場合には immediate シャットダウンをするようになりました。
</p>
<p>
リリース情報に明記されていませんが、PostgreSQL 9.5.0 では既にそのようになっています。
</p>
<li>SERIALIZABLEトランザクション隔離モードで、INSERT時の競合状態のために直列化例外が見逃されることがあり、修正されました。 (Kevin Grittner, Thomas Munro) (9.4)(9.3)(9.2)(9.1)</li>
<p>
ごく限定されたタイミングでの同時実行で発生し、エラーを出すべきところで直列化されていない結果が返される動作となります。
</p>
<li>UNLOGGEDテーブルに対して ALTER TABLE ... SET TABLESPACE を実行したとき、適切なWALレコードが出力されない障害が修正されました。 (Michael Paquier, Andres Freund) (9.4)(9.3)(9.2)(9.1)</li>
<p>
テーブルのデータについては WAL出力対象外であるとしても、テーブルスペース移動は WAL出力すべきでした。そうでないと、スタンバイサーバが昇格したときにアクセス不能になります。
</p>
<li>クラッシュリカバリの最後に UNLOGGED なテーブル・インデックスが初期化されない可能性があり、修正されました。 (Andres Freund, Michael Paquier) (9.4)(9.3)(9.2)(9.1)</li>
<p>
よくある症状として、スタンバイを昇格させた後に以下のエラーが出ます。
</p>
<pre>ERROR:  index "..." contains unexpected zero page at block 0
</pre>
<li>wal sender のスロットが再使用時に完全に再初期化されるようになりました。 (Magnus Hagander) (9.4)(9.3)</li>
<p>
ここでのスロットは wal sender プロセスのための共有メモリ上のデータ構造であって、pg_create_physical_replication_slot 関数で作る物理レプリケーションスロットとは別物です。
</p>
<li>ALTER TABLE ... ALTER COLUMN TYPE が CHECK制約を適切に継承するように改修されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
親テーブルでカラムデータ型を変更すると当該カラムに対する CHECK制約の継承関係が壊れてしまいます。また、以下の奇妙なエラーが生じていました。
</p>
<pre>db1=# ALTER TABLE parenttable DROP CONSTRAINT parentconstraint_1;
ERROR:  relation 23456 has non-inherited constraint "parentconstraint_1"
</pre>
<li>REASSIGN OWNED コマンドが複合型の所有者も変更するように修正されました。 (Álvaro Herrera) (9.4)(9.3)(9.2)(9.1)</li>
<li>REASSIGN OWNED コマンドおよび ALTER ... OWNER コマンドが、データ型、外部データラッパ、外部サーバの所有者変更にあたって、適切にアクセス制御リストを更新するように修正されました。 (Bruce Momjian, Álvaro Herrera) (9.4)(9.3)(9.2)(9.1)</li>
<p>
所有者だけ変えて、アクセス制御リストは更新しない動作がありました。
</p>
<li>REASSIGN OWNED コマンドが外部ユーザマッピング（ユーザマップ）を無視するように変更されました。 (Álvaro Herrera) (9.4)(9.3)(9.2)(9.1)</li>
<p>
以下のような奇妙なエラーが出るケースが報告されていて、これを回避します。
</p>
<pre>ERROR: unexpected classid 1418 SQL state: XX000"
</pre>
<li>更新可能ビューむけの問い合わせ書換えの後にクラッシュする可能性があり、修正されました。 (Stephen Frost) (9.4)(9.3)</li>
<p>
キャッシュを参照する部分が更新処理を含む場合には安全ではありませんでした。
</p>
<li>LATERAL参照の扱いについてプランナが修正されました。 (Tom Lane) (9.4)(9.3)</li>
<p>
例外的な場合に以下のエラーが生じることがありました。
</p>
<pre> ERROR: failed to build any N-way joins
 (N-way の N には 2-way など数字が入る)

 ERROR: could not devise a query plan
</pre>
<li>インデックス内部の統計情報が古い場合に、GINインデックススキャンの粗悪なプランナコスト見積もりが生じるのを防ぐように修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<li>GINインデックスのプランナコスト見積りが、インデックスアドバイザプラグインによる仮定のインデックスに対して改善されました。 (Julien Rouhaud) (9.4)(9.3)(9.2)(9.1)</li>
<p>
実在しないGINインデックスには内部統計情報が無いため、ダミーの代替データを用意する必要があり、これまでは不十分な実装でした。
</p>
<li>EXPLAIN とルールのダンプで重複しないテーブル別名の生成が高速化されました。また、生成される別名が確実に最大識別子長を超えないように修正ました。 (Tom Lane) (9.4)(9.3)</li>
<li>ROW() や VALUES() 内の行変数のダンプが修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
以下のようなビュー定義に対して、ダンプ出力が実際には適用できない内容になっていました。
</p>
<pre>(修正前の動作)
db1=# CREATE TABLE t2 (c1 int, c2 int);
db1=# CREATE TYPE nestedcomposite AS (c1c2 t2);
db1=# CREATE VIEW v1 AS SELECT ROW(t2)::nestedcomposite FROM t2;
db1=# SELECT pg_get_viewdef('v1', true);
               pg_get_viewdef
---------------------------------------------
  SELECT ROW(t2.*)::nestedcomposite AS "row"+
    FROM t2;
(1 row)

(上記のビュー定義 SELECT は正しくない、実行するとエラーになる)
db1=# SELECT ROW(t2.*)::nestedcomposite AS "row" FROM t2;
ERROR:  cannot cast type record to nestedcomposite

(以下が正しい)
db1=# SELECT pg_get_viewdef('v1', true);
                 pg_get_viewdef
-------------------------------------------------
  SELECT ROW(t2.*::t2)::nestedcomposite AS "row"+
    FROM t2;
(1 row)
</pre>
<li>dete型、timestamp型の -infinity値を、json型、jsonb型に変換するとき、+infinity になってしまう障害が修正されました。 (Tom Lane) (9.4)</li>
<pre>(修正前の誤った振る舞い例)
db1=# SELECT to_json('-Infinity'::date);
  to_json
------------
 "infinity"
(1 row)
</pre>
<li>numeric型データの除算で内部オーバーフローが生じる可能性があり、修正されました。 (Dean Rasheed) (9.4)(9.3)(9.2)(9.1)</li>
<li>正規表現で先行検索制約の制限が無視される誤りがあり、修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
マニュアル記載では、先行検索制約には、後方参照（1、2 など）を含むことが許されておらず、また、先行検索制約の中の括弧は常に捕捉されないとされていますが、これらの仕様に反する動作がありました。
</p>
<pre>(修正前動作／括弧を加えた 2番目の SQL も 1番目と同じくエラーになるのが正しい)
db1=# SELECT 'xyz' ~ 'x(w)(?=1)';
ERROR:  invalid regular expression: invalid backreference number

db1=# SELECT 'xyz' ~ 'x(w)(?=(1))';
 ?column?
----------
 t
(1 row)

(修正前動作／括弧を加えると NULL が捕捉されていた)
db1=# SELECT regexp_matches('abcfoo','(abc)(?=foo)');
 regexp_matches
----------------
 {abc}
(1 row)

db1=# SELECT regexp_matches('abcfoo','(abc)(?=((foo)))');
 regexp_matches
----------------
 {abc,NULL}
(1 row)
</pre>
<li>先行参照制約が含まれるとき、正規表現のインデックススキャン範囲への変換で不正確な範囲が生じる可能性があり、修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
インデックスが利用される場合に不正な検索結果が返る可能性がありました。
</p>
<pre>(修正前の動作／正しくは「(v &gt;= 'abcd'::text) AND (v &lt; 'abce'::text)」)
db1=# explain (costs off) SELECT * FROM t1 WHERE v ~ '^abcd(x|(?=ww)q)';
                          QUERY PLAN
--------------------------------------------------------------
 Index Scan using t1_v_idx on t1
   Index Cond: ((v &gt;= 'abcdx'::text) AND (v &lt; 'abcdy'::text))
   Filter: (v ~ '^abcd(x|(?=ww)q)'::text)
(3 rows)

(正しくは以下が返るとして、インデックススキャンでは id=5 の行が欠けることになる)
db1=# SELECT * FROM t1 WHERE v ~ '^abcd(x|(?=ww)q)';
 id |    v
----+---------
  5 | abcdqBB
  2 | abcdx
(2 rows)
</pre>
<li>正規表現のコンパイラが ^、$、先行参照制約のループを扱えるように修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これらを扱えるようにセキュリティ障害 CVE-2007-4772 の修正が以前（7.4.19 など) に適用されていましたが、それは不十分なものでした。</p>
<pre>(以下の正規表現は無限ループやキャンセル時のクラッシュを引き起こしていました)
db1=# SELECT 'a' ~ '(^$)*';
 ?column?
----------
 t
(1 row)

db1=# SELECT 'dd x' ~ '(^(?!aa)(?!bb)(?!cc))+';
 ?column?
----------
 t
(1 row)
</pre>
<li>正規表現のコンパイラにおいてメモリ利用の計算が改善されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで途方もない時間とメモリを要していたいくつかの場合について、「ERROR: invalid regular expression: regular expression is too complex」を出すようになりました。
</p>
<p>
これまでも似た意味で「ERROR: invalid regular expression: nfa has too many states」を出すことはありました。メッセージは前述のものに統合されています。
</p>
<li>正規表現のコンパイラの性能が改善されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<li>Windowsにおいて、共有メモリを必要としない子プロセスで共有メモリマッピングハンドルを確実にクローズするようになりました。 (Tom Lane, Amit Kapila) (9.4)(9.3)(9.2)(9.1)</li>
<p>
この誤りは、logging_collector = on のとき、バックエンドクラッシュ後の自動再起動におけるリカバリの失敗を引き起こしていました。
</p>
<li>Windows のノンブロッキングモードでソケットの EOF を検知するのに失敗する可能性があり、修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
修正対象の 9.4.x 以前の各バージョンで問題が起きるか明らかではありませんが、起きていたとすれば、その症状は walsender プロセスが接続は失われているのに際限なく待つというものであるはずです。
</p>
<p>
9.5.x では既に修正済みです。
</p>
<li>psql で端末ウィンドウのサイズが変更されたとき、確実に libreadline のスクリーンサイズの認識が更新されるようになりました。 (Merlin Moncure) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまでは libreadline は問い合わせ出力中にウィンドウがリサイズされても気づかず、その後での複数行にわたる問い合わせの入力で奇妙な振る舞いをひき起こしていました。
</p>
<li>psql にて、これまでの接続が Unixドメインソケット経由であってc コマンドに新ホスト名と同ユーザ名を指定した場合に、クラッシュする可能性があり、修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<li>pg_ctl start -w で子プロセス状態の検査をヒューリスティックに頼らず直接行うようになりました。 (Tom Lane, Michael Paquier) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで pg_ctl は新たなマスタープロセスは常に 5秒以内に postmaster.pidを作るであろうという仮説に依存していました。これは高負荷システムでは失敗する可能性があり、「could not start server」という誤った報告をひき起こします。
</p>
<p>
Windows 以外では、本修正で、pg_ctl start -w を他の PostgreSQL起動コマンドの直後に実行したときに確実に失敗するようにもなります。これまでは最初のコマンドから 2秒以内に実行したときは (既存のプロセスが自身で起動したプロセスと見做されて) 成功と報告されました。
</p>
<li>pg_ctl start -w で接続試験にワイルドカードのリッスンアドレスを使おうとしないように修正されました。 (Kondo Yuta) (9.4)(9.3)(9.2)(9.1)</li>
<p>
pg_ctl は PostgreSQLサーバプロセスの起動確認にて、listen_addresses に 0.0.0.0 や :: が指定されていると、これらの値をそのままアドレスとして使用しますが、Windows では失敗します。それぞれ代わりに 127.0.0.1、::1 を使うべきでした。
</p>
<p>
Windows 以外では pg_ctl は Unixドメイン接続を使うので問題となりませんでした。
</p>
<li>pg_dump と pg_basebackup で、8GB を超える tarアーカイブ要素を扱うため、GNU 慣例が採用されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
tarフォーマットの POSIX標準では 8GB を超える tarアーカイブの要素を許可していませんが、ほとんどの近代的な tar の実装ではこれを可能とする拡張をサポートしています。
</p>
<p>
本修正で、pg_dump -Ft において 8GB 以上のテーブルが、また、pg_baesbackup -Ft において 8GB 以上のファイルが扱えるようになりました。これまでは 4GB から 8GB の間のサイズの要素についても、一部プラットフォームでは失敗し、リカバリできない問題がありました。
</p>
<li>pg_dump でリレーションのオプション値が確実に適切にクオートされるようになりました。 (Kouhei Sutou, Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
ここでのリレーションのオプション値とは、テーブル、インデックス、ビューの定義に WITH (options) で与えられるものを指します。システムカタログの pg_class.reloptions に定義が格納されます。
</p>
<p>
これまで、オプション値がシンプルな識別子や数値でない場合にダンプ/リロードにて pg_dump による CREATE文の構文エラーで失敗していました。
</p>
<p>
PostgreSQL本体でサポートされているオプション値では問題ありませんが、拡張モジュールによるオプション値で問題が発生しました。
</p>
<li>パラレル pg_dump でパスワードプロンプトが繰り返し出るのが防止されました。 (Zeus Kronion) (9.4)(9.3)</li>
<li>Windows における pg_upgrade のファイルコピーでエラーを適切に扱うようになりました。 (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)</li>
<li>pg_receivexlog と pg_recvlogical でローカライズメッセージ出力の失敗が修正されました。 (Ioseph Kim) (9.4)(9.3)(9.2)</li>
<li>ソケットの EOF を検知したときの libpq 入力バッファの早すぎる消去が修正されました。 (Tom Lane) (9.4)(9.3)</li>
<p>
この誤りにより libpq が、サーバからの予期せぬ切断を報告する手前の、バックエンドの最後のエラーメッセージを報告しないことが起こりまし</p>
<li>libpq のメモリ不足状況での振る舞いが改善されました。 (Michael Paquier, Amit Kapila, Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで libpq が応答データを構成しているときにメモリ不足になると、サーバからのデータを待つ状態でハングアップしてしまいました。これが適切にエラーを出してクライアントに処理を戻すようになりました。
</p>
<li>ecpg が出力する typedef 文の引数順序が修正されました。 (Michael Meskes) (9.4)(9.3)(9.2)(9.1)</li>
<li>ecpg 実装の PGTYPESnumeric_from_double() で sprintf による変換で %f でなく %g を使うように修正されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
バッファオーバランの対策も加えられました。
</p>
<li>contrib/pgcrypto の crypt() 関数で確実に問い合わせキャンセルが可能となりました。 (Andreas Karlsson) (9.4)(9.3)(9.2)(9.1)</li>
<li>flex バージョン 2.5.x 以降に対応しました。 (Tom Lane, Michael Paquier) (9.4)(9.3)(9.2)(9.1)</li>
<p>
現在 flex 2.6.0 がリリースされていて、ビルドスクリプトにおけるバージョンチェックを調整する必要がありました。
</p>
<li>config/missing スクリプトをインストールするようになりました。 (Jim Nasby) (9.4)(9.3)(9.2)(9.1)</li>
<p>
bison などのビルドツールが無いマシン上で PGXSビルドを正常に行えるようになります。
</p>
<li>現在の libxml2 の振る舞いに適合する、別種のリグレッションテスト想定出力ファイルが追加されました。 (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
libxml2 ライブラリは、セキュリティ障害 CVE-2015-7499 に対する修正で、ある種の場合にエラーコンテキストレポートが出力されなくなりました。これに対応した追加となります。
</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>
