<?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.3 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-9-3/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Fri, 30 Oct 2026 08:07:32 +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.3 &#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.3.25 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-25/</link>
		
		<dc:creator><![CDATA[高塚 遥 (Haruka Takatsuka)]]></dc:creator>
		<pubDate>Thu, 06 Dec 2018 12:28:42 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=922</guid>

					<description><![CDATA[このリリースは 9.3.24 からの修正リリース（2018年11月8日リリース）です。 9.3.x からのアップデートではダンプ、リストアは不要です。 しかしながら、9.3.23 より前のバージョンからアップデートを行う ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.24 からの修正リリース（2018年11月8日リリース）です。</p>
<p>9.3.x からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、9.3.23 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-23/">9.3.23 に関する技術情報</a>を参照してください。</p>
<p><span id="more-922"></span></p>
<h3>PostgreSQL 9.3.24 から 9.3.25 への変更点</h3>
<p>11.1、10.6、9.6.11、9.5.15、9.4.20、9.3.25 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>pg_dump が CREATE TRIGGER ... REFERENCING コマンドを出力するときに遷移テーブル名を確実にクォートするようになりました。  (Tom Lane) (11)(10)</li>
<p>
この見逃しは、ダンプのリストアや pg_upgrade実行で権限の無いユーザがスーパーユーザ権限を得るようにする攻撃を可能にしていました。(CVE-2018-16850)
</p>
<li>各パーティションの子インデックスを作るときに、パーティションインデックスに対して指定されたテーブルスペースを適用するようになりました。  (&Aacute;lvaro Herrera) (11)</li>
<p>
これまでは、子インデックスは常にデフォルトテーブルスペースに作られていました。
</p>
<li>複数バッチ動作のパラレルハッシュ左外部結合で NULL の扱いが修正されました。  (Andrew Gierth, Thomas Munro) (11)</li>
<p>
ハッシュキーに NULL値を伴う外側リレーションの行が、結合結果から抜け落ちていました。本障害のため enable_parallel_hash = on のときに、誤った問い合わせ結果が返る可能性がありました。
</p>
<li>定数テスト式を持った CASE句の中にある配列型のキャスト式の不正な処理が修正されました。  (Tom Lane) (11)</li>
<p>
以下のような奇妙な動作が発生していました。
</p>
<pre>
（enum_range関数は配列 '{e,f,g}' を返すので '{a,b,c,d,e,f,g}' が正しい結果）
db=# CREATE TYPE typ_efg AS ENUM ('e', 'f', 'g');
db=# SELECT
       CASE 'foo'::text WHEN 'foo'
         THEN ARRAY['a', 'b', 'c', 'd'] || enum_range(NULL::typ_efg)::text[]
         ELSE ARRAY['x', 'y']
       END;
         array
-----------------------
 {a,b,c,d,foo,foo,foo}
(1 row)
</pre>
<li>最近に追加した列が欠けた不正なタプル展開が修正されました。  (Andrew Dunstan, Amit Langote) (11)</li>
<p>
本障害により、最近に追加された列をもつテーブルの制約トリガ動作でクラッシュをひき起こすことが知られています。また、その他の症状を示す可能性もあります。
</p>
<pre>
（知られている障害発生パターン）
db=# CREATE TABLE leader (a int PRIMARY KEY, b int);
db=# CREATE TABLE follower (a int REFERENCES leader ON DELETE CASCADE, b int);
db=# INSERT INTO leader VALUES (1, 1), (2, 2);
db=# ALTER TABLE leader ADD c int;
db=# ALTER TABLE leader DROP c;
db=# DELETE FROM leader;
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
</pre>
<li>CALLの引数リストで、名前付けされた引数やデフォルト値が付与された引数での誤りが修正されました。  (Tom Lane, Pavel Stehule) (11)</li>
<p>
CALLでそのような引数をもつプロシージャを実行するときに、エラーが発生する動作が報告されていました。
</p>
<li>「ORDER BY 列」を伴う STRICTな集約で、STRICT検査が修正されました。  (Andrew Gierth, Andres Freund) (11)</li>
<p>
STRICTな集約とは NULLを処理対象から除外する動作をするものです。ORDER BY を付与したときこの動作が働きませんでした。
</p>
<pre>
（1 が返るのが正しいが、NULLが返っていた）
 db=# SELECT min(x ORDER BY y) FROM (VALUES(1, NULL)) AS d(x,y);
  min
 -----
 
 (1 row)
</pre>
<li>recheck_on_update の最適化が無効にされました。  (Tom Lane) (11)</li>
<p>
これはバージョン11から登場した最適化機能ですが、クラッシュをひき起こすとがあり、ひとまず無効化されました。
</p>
<li>親テーブル（＝パーティションテーブル）のトリガによるパーティション作成が防止されました。  (Amit Langote) (11)(10)</li>
<p>
クラッシュをひき起こすことがありました。理想的にはこのような使い方も可能とすべきですが当面は禁止とされました。トリガ駆動時に以下のようなエラーが出るようになります。
</p>
<pre>
ERROR:  cannot ALTER TABLE "..." because it is being used by active queries in this session

ERROR:  cannot CREATE TABLE .. PARTITION OF "..." because it is being used by active queries in this session
</pre>
<li>ON COMMIT DELETE ROWS を一時パーティションテーブルに適用する場合の問題が修正されました。  (Amit Langote) (11)(10)</li>
<p>
このような一次パーティションテーブルを作るときに以下のようなエラーが発生していました。
</p>
<pre>
db1=# CREATE TEMP TABLE t10 (id int, v text)
        PARTITION BY RANGE (id) ON COMMIT DELETE ROWS;
ERROR:  could not open file "base/16543/t3_45678": No such file or directory
</pre>
<li>Windows において、U+FFFF より上の Unicode文字に対してエラーを起こさないように、文字クラス検査が修正されました。  (Tom Lane, Kenji Uno) (11)(10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この障害はテキスト検索、contrib/ltree、contrib/pg_trgm に影響があります。絵文字に対して pg_trgm の関数を実行して以下エラーが出る例が報告されました。
</p>
<pre>
ERROR: invalid multibyte character for locale
</pre>
<li>既に受け取っている NOTIFY や SIGTERM割り込みの処理を、クライアント入力を待つより前に実行するようになりました。  (Jeff Janes, Tom Lane) (11)(10)(9.6)(9.5)</li>
<p>
以前はより早くに処理されていたのが、9.6.3、9.5.7 のリリースから本修正前まででは、後回しに処理されるようになっていました。
</p>
<li>繰り返して SP-GiSTインデックスをスキャンする場合のメモリリークが修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
SP-GiST を使った排他制約が一つのコマンドで多数の新たなインデックスエントリを受け付ける場合に、大きなリーク量が生じることが知られています。
</p>
<li>既存のレプリケーションスロットに対応するには低すぎる wal_level が設定されているときには、サーバ起動しないようになりました。  (Andres Freund) (11)(10)(9.6)(9.5)(9.4)</li>
<li>各 PQnotifies() を呼ぶ前に PQconsumeInput() を呼ぶように psql が修正され、libpq のドキュメントのサンプルも修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)</li>
<p>
これは psql が NOTIFYメッセージ受信を次コマンドまで報告しないケースを修正します。
</p>
<li>pg_verify_checksums で、どのファイルをチェックサム検査すべきかの判断が修正されました。  (Michael Paquier) (11)</li>
<p>
一部ケースでチェックサムを持つと想定されないファイルについて、問題報告されることがありました。
</p>
<li>contrib/pg_stat_statements でpg_read_all_statsロールが pg_stat_statements_reset() を実行することが禁止されました。  (Haribabu Kommi) (10) (11)</li>
<p>
pg_read_all_stats は全ての統計情報が参照できるという意味であるため、データを変更できることは不適切でした。変更の反映には導入先の各データベースで以下コマンド実行が必要です。
</p>
<pre>
ALTER EXTENSION pg_stat_statements UPDATE;
</pre>
<li>赤黒木のサポート関数のプレフィックスが rb ではなく rbt に変更されました。  (Tom Lane) (11)</li>
<p>
Ruby の関数との名前衝突を回避します。PL/Ruby を導入する場合に問題がありました。
</p>
<li>macOS 10.14 でのビルドの問題が修正されました。  (Tom Lane) (11)(10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
PL/Perl と PL/Tcl のビルドに失敗していました。対応として、configureスクリプトが CPPFLAGS に -isysroot を加えるようになりました。そのほか、macOS むけにビルドスクリプトがいくつか修正されました。
</p>
<li>MSVC でのビルドとリグレッションテストのスクリプトが最近の Perlバージョンで動作するように修正されました。  (Andrew Dunstan) (11)(10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
Perlは最早カレントディレクトリをデフォルトではサーチパスに含めず、本修正はこれに対応したものです。
</p>
<li>Windows で Administratorアカウントによるリグレッションテストが可能になりました。  (Andrew Dunstan) (11)(10)(9.6)(9.5)</li>
<p>
Administratorアカウントから駆動したとしても安全であるように、実行プロセスは制約された権限で動作するようになっています。
</p>
<li>タイムゾーンデータファイルが tzdata release 2018g に更新されました。   (11)(10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
チリ、フィジー、モロッコ、ロシア（ヴォルゴグラード）の夏時間法の変更と、中国、ハワイ、日本、マカオ、北朝鮮の歴史的修正が含まれています。
</p>
<li>has_*_privilege() 関数群が、稀なケースでエラーになる障害が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これら関数はオブジェクトの不正な OID与えられたときエラーではなく NULLを返すことが期待されていますが、一部においてそうなっていませんでした。さらに、has_column_privilege() 関数は一部プラットフォームでクラッシュする可能性がありました。
</p>
<li>pg_get_partition_constraintdef() が、不正なリレーション OID を渡されたときに、エラーを出すのではなく NULL を返すように修正されました。  (Tom Lane) (10)</li>
<li>長い文字列に対して正規表現でマッチングする関数や分割する関数を使うとき、O(N^2) オーダーで遅延するのを回避するように修正されました。  (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>標準の複数文字演算子のパース処理が修正されました。  (Andrew Gierth) (10)(9.6)(9.5)</li>
<p>
この障害によりパースエラーや不正な優先順位が生じる可能性がありました。演算子の後に数値の + や -、あるいはコメント開始記号の -- や /* が続いている場合に誤認されるケースがありました。
</p>
<pre>
（報告された障害動作例）
db=# CREATE FUNCTION f26(a int) RETURNS int LANGUAGE sql
        AS $$ SELECT a; $$;
db=# SELECT f26(a =&gt; -1);
 f
----
 -1
(1 row)

db1=# select f(a =&gt;-1);
ERROR:  column "a" does not exist
</pre>
<li>+ や - 文字による長い文字列の字句解析で O(N^3) オーダーでの遅延を回避するように修正されました。  (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>外側の問い合わせが逆向きにスキャンされているときの SubPlans の誤った実行が修正されました。  (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
カーソルを使って FETCH BACKWARD で結果を取得する場合に誤った SELECT結果が返る動作が報告されていました。実行プランとして逆向きスキャンが選ばれる場合にも問題が起きる可能性があります。
</p>
<li>カーソルを巻き戻した後に「UPDATE/DELETE ... WHERE CURRENT OF ...」コマンドがエラーになる動作が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
複数のリレーション（特に親テーブルを継承した複数のテーブルなど）をスキャンするカーソルは、手前のリレーションに巻き戻された場合に誤動作を起こす可能性がありました。
</p>
<li>EvalPlanQual が条件実行される InitPlans を適切に扱えるように修正されました。  (Andrew Gierth, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
同時更新をしたときに、なかなか再現しないクラッシュや誤った問い合わせ結果が生じていました。CASE や COALESCE の中にある無関係な副SELECT を含む更新SQL（例えば以下のような形状）で該当します。
</p>
<pre>
WITH d(val) AS (SELECT 'Val'::text FROM generate_series(1,1))
  UPDATE t30 SET v = COALESCE(v, (SELECT val FROM d)) WHERE id = 1;
</pre>
<li>ウィンドウ関数、LIMIT、OFFSET を含む副SELECT のパラレルワーカへのプッシュができなくなりました。  (Amit Kapila) (10)(9.6)</li>
<p>
このような場合、行順序の変化により不確定な結果となって、ワーカごとに異なる応答を得ることから、整合性に欠けた振る舞いが生じることがありました。
</p>
<li>外部テーブルに所有されているシーケンスが、そのテーブルに対する ALTER OWNER で確実に処理されるようになりました。  (Peter Eisentraut) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
所有者変更はこのようなシーケンスにも伝播すべきでしたが、外部テーブルについて見逃されていました。
</p>
<li>配列データ型の出力関数 array_out() が結果文字列用に過大なメモリを確保していたものが、修正されました。  (Keiichi Hirobe) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
特に多次元配列のときに確保サイズが大きくなっていました。
</p>
<li>xmltable関数で問い合わせの間のメモリリークがあり、修正されました。  (Andrew Gierth) (10)</li>
<li>内部実装関数 ApplyLogicalMappingFile() がマッピングファイルを伴って実行されたとき、ファイルを確実に閉じるように修正されました。  (Tomas Vondra) (10)(9.6)(9.5)(9.4)</li>
<p>
これまでファイル記述子のリークがあり、結果としてロジカルデコーディングでのエラーをひき起こしていました。
</p>
<pre>
（エラー例）
ERROR:  53000: exceeded maxAllocatedDescs (492) while trying to open file "pg_logical/mappings/map-4000-4eb-1_60DE1E08-5376b5-537c6b"
LOCATION:  OpenTransientFile, fd.c:2161
</pre>
<li>ロジカルデコーディングで割り当てられたカタログテーブルが繰り返し書き直される場合に処理できるように修正されました。  (Andres Freund) (10)(9.6)(9.5)(9.4)</li>
<p>
VACUUM FULL や CLUSTER コマンドで以下のようなエラーが生じる可能性がありました。
</p>
<pre>
ERROR, "could not map filenode "base/16543/19876" to relation OID"
</pre>
<li>SQL実行にて EXECUTEコマンドなどのユーティリティコマンドが無限再帰を起こした場合にバックエンドがクラッシュする動作が回避されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>ホットスタンバイを初期化する時に、プライマリでの二相トランザクションで生じる重複した XID に対応できるようになりました。  (Michael Paquier, Konstantin Knizhnik) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでスタンバイで以下のエラーが出ることがありました。
</p>
<pre>
FATAL:  out-of-order XID insertion in KnownAssignedXids
</pre>
<li>入れ子の ALTER TABLE を扱えるようにイベントトリガが修正されました。  (Michael Paquier, &Aacute;lvaro Herrera) (10)(9.6)(9.5)</li>
<p>
本障害について、イベントトリガが働く状態で入れ子のパーティションテーブルを作成するときのクラッシュが報告されました。
</p>
<li>親プロセスのトランザクションと文の開始タイムスタンプがパラレルワーカに伝播するようになりました。  (Konstantin Knizhnik) (10)(9.6)(9.5)</li>
<p>
これにより、transaction_timestamp() などの関数がワーカ上で実行されたときの誤動作が防止されます。
</p>
<li>拡張された値のパラレルワーカへの転送が修正されました。  (Tom Lane, Amit Kapila) (10)(9.6)</li>
<p>
配列型の値などが該当します。SQL実行時に Bus error によるクラッシュが発生していました。
</p>
<li>WALファイル再利用のロジックがスタンバイサーバで正しく動作するように修正されました。  (Michael Paquier) (10)(9.6)(9.5)</li>
<p>
archive_mode の設定によってはスタンバイで一部の本来削除可能なWALファイルの削除に失敗することがありました。
</p>
<li>リカバリ中のコミットタイムスタンプ追跡の処理が修正されました。  (Masahiko Sawasa, Michael Paquier) (10)(9.6)(9.5)</li>
<p>
コミットタイムスタンプ追跡が有効または無効に変更されると、それを記録していないトランザクションに対してコミットタイムスタンプを取得しようとしてリカバリに失敗することがありました。
</p>
<pre>
（本障害でリカバリ起動に失敗した報告例）
FATAL: could not access status of transaction 3003911820
DETAIL: Could not read from file "pg_commit_ts/6FEE" at offset 557056: Success.
</pre>
<li>ブートストラップとスタンドアローンバックエンドのプロセスで、また、initdb で、random() 関数のシードを時刻やプロセスID でランダムに設定するようになりました。  (Noah Misch) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この変更により、常に同じランダムシードを使うことで生じる名前衝突によって、initdb が POSIX共有メモリが無効であると誤って判断するのを回避できます。
</p>
<li>DSA（動的共有メモリ領域）の処理で共有メモリ破壊の可能性があり、修正されました。  (Thomas Munro) (10)</li>
<p>
主として問い合わせの並列処理で問題が不具合が発生します。
</p>
<li>DSM（動的共有メモリ）の割り当てが割り込み可能になりました。  (Chris Travers) (10)(9.6)(9.5)(9.4)</li>
<p>
SQLのパラレル処理とキャンセルで無限ループが生じる可能性がありました。
</p>
<li>初期化関数でシステムキャッシュにアクセスを試みる拡張モジュールを読み込むときに発生する、パラレルワーカでのエラーが回避されました。  (Thomas Munro) (10)(9.6)</li>
<p>
本障害により以下のエラーが発生するケースが報告されました。
</p>
<pre>
ERROR:  invalid cache ID: 11
LOG: worker process: parallel worker for PID 12345 (PID 12354) exited with exit code 1
</pre>
<li>full_page_writes を動的に on に変える処理を適切に行うようになりました。  (Kyotaro Horiguchi) (10)(9.6)(9.5)</li>
<p>
off から on に変えた後もフルページ書き出しが行われない動作が報告されました。
</p>
<li>SP-GiST の再スキャンでメモリ二重解放によるクラッシュの可能性があり、修正されました。  (Andrew Gierth) (10)(9.6)</li>
<li>ELFベースのBSDプラットフォームや HP-UX、Solaris で、src/port と src/common の関数の誤ったリンクが防止されました。  (Andrew Gierth, Tom Lane) (10)</li>
<p>
バックエンドのアドレス空間にロードされた共有ライブラリは、関数のリンク先に意図しているそれらが持つコピーではなく、バックエンドにあるバージョンを使う可能性がありました。両関数実装が一致していない場合、この振る舞いのために障害がひき起こされます。
</p>
<p>
クラッシュが発生する例が報告されています。
</p>
<li>GINページの再圧縮処理を WALから再生するときにバッファオーバーランの可能性があり、修正されました。  (Alexander Korotkov, Sivasubramanian Ramasubramanian) (10)(9.6)(9.5)(9.4)</li>
<p>
本障害によりデータ破壊の可能性があります。
</p>
<li>ブロックサイズをデフォルトよりも小さくしていた場合の、ハッシュインデックスのメタページのバッファオーバーランが回避されました。  (Dilip Kumar) (10)</li>
<p>
該当する場合、本障害によりデータ破壊をひき起こす可能性があります。
</p>
<li>ハッシュインデックスでページチェックサムの更新が行われないことがあり、修正されました。  (Amit Kapila) (10)</li>
<li>レプリケーションスロットのディレクトリに対する fsync が行われておらず、修正されました。  (Konstantin Knizhnik, Michael Paquier) (10)(9.6)(9.5)(9.4)</li>
<li>wal_sender_timeout を遅いサーバで使った場合の予期せぬタイムアウトが修正されました。  (Noah Misch) (10)(9.6)(9.5)(9.4)</li>
<p>
サーバ側（WAL送出側）の遅延をタイムアウト判定に含めないように調整されました。
</p>
<li>ホットスタンバイのプロセスが確実に正しいWAL整合状態到達点を用いるようになりました。  (Alexander Kukushkin, Michael Paquier) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この修正は、スタンバイサーバが WALリプレイでデータベース整合状態に達した直後の誤動作を防止します。
</p>
<p>
スタンバイサーバのクラッシュ後の起動で、以下メッセージが出て失敗する動作が報告されました。
</p>
<pre>
PANIC:  WAL contains references to invalid pages
DETAIL:  xlog redo at AB3/50323E78 for Btree/DELETE: 182 items
</pre>
<li>サーバ起動中にマスタプロセス(postmaster)が fastシャットダウン要求を受け取ったとき、バックグラウンドワーカが適切に停止されるようになりました。  (Alexander Kukushkin) (10)(9.6)(9.5)</li>
<li>ページの可視性フラグ、凍結済フラグを変更する WAL を再生するときに、空き領域マップを更新するようになりました。  (&Aacute;lvaro Herrera) (10)(9.6)</li>
<p>
これまで FSM（空き領域マップ）は重要なデータではないと考えられていましたが、FSM が古くなりすぎるとサーバがスタンバイからプライマリに昇格した後、パフォーマンスが大幅に低下する可能性がありました。
</p>
<li>問い合わせ終了時、または、タプルカウント上限に到達した時の、パラレル問い合わせ用リソースの早すぎる解放を回避するようになりました。  (Amit Kapila) (10)(9.6)</li>
<p>
呼び出し側が後で逆向きスキャンを求める場合を考慮する必要がありました。
</p>
<li>SIGQUIT を処理するときに atexit() によるコールバックを実行しないようになりました。  (Heikki Linnakangas) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
シグナルを受けてハングアップする可能性がありました。
</p>
<li>外部サーバのユーザマッピングを拡張の要素として記録しないようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
拡張のスクリプトで CREATE USER MAPPING を実行すると、ユーザのマッピングに対して予期せぬ拡張依存関係が作成されました。ロールは拡張の要素にすることはできないため、ユーザマッピングも含めるべきではありませんでした。
</p>
<li>loggerプロセス（組み込みのロガー）が CSV ログファイルを開く際に、失敗しにくくなりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまではファイルを開けなかった場合にそれを報告しようとして無限再帰ループに陥る可能性がありました。
</p>
<li>libpq に複数のターゲットホスト名が指定されている場合、1度に1つずつ名前解決をするようになりました。  (Tom Lane) (10)</li>
<p>
これにより、リスト内の手前にあるサーバに正常に接続できる場合の不要な障害や接続遅延を防止します。
</p>
<li>libpq の接続タイムアウト処理がホスト名またはIPアドレスごとに正しく適用されるように修正されました。  (Tom Lane) (10)</li>
<p>
以前は、次の対象ホストに切り替える際にタイマーがリセットされないことがあり、設定よりも早くタイムアウトとなる可能性がありました。
</p>
<li> pg_dump の --no-publications オプションがパブリケーションテーブルを無視するように修正されました。  (Gilles Darold) (10)</li>
<p>
pg_dump で本オプションが機能していませんでした。
</p>
<li>pg_dump で親テーブルがダンプから除外されているときには、その子テーブルの IDENTITY のシーケンスも除外するようになりました。  (David Rowley) (10)</li>
<li>pg_dump が異なるオブジェクト名をソートする際に起こり得る一貫性の欠如が修正されました。  (Jacob Champion) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>pg_restore が DISABLE/ENABLE TRIGGER コマンドを出力する際にテーブル名をスキーマ修飾するようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これにより制限された検索パスでリストアを実行する場合の障害を回避します。
</p>
<li>pg_upgrade が拡張に属するイベントトリガを正しく処理するように修正されました。  (Haribabu Kommi) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以前の pg_upgrade はイベントトリガが拡張に属することを維持できせんでした。
</p>
<li>pg_upgrade のクラスタ状態チェックがスタンバイサーバで正しく動作するように修正されました。  (Bruce Momjian) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>すべての contrib/cube 関数に cube型の次元数の制限が適用されるようになりました。  (Andrey Borodin) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以前は、一部の cube 関連関数が cube_in（cube型の入力関数）で拒否される値を生成する可能性があり、ダンプ/リストアの失敗をひき起こしました。
</p>
<li>contrib/postgres_fdw では、変数を持たない ORDER BY句をリモートサーバへ送信しないようになりました。  (Andrew Gierth) (10)(9.6)</li>
<p>
use_remote_estimate = on の場合に「ORDER BY 0」がリモートで実行されて、「ERROR: ORDER BY position 0 is not in select list」が生じるケースがありました。
</p>
<li>contrib/unaccent の unaccent() 関数が、関数と同じスキーマにある非アクセントテキスト検索辞書を使用するように修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは search_path を使用して辞書を探していましたが、search_path が制限的な設定であるとき失敗する可能性がありました。
</p>
<li>btree比較関数が INT_MIN を返せるようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは、データ型固有の比較関数が INT_MIN を返すことを禁止していました。これにより関数の呼び出し元は、比較結果を否定するだけでソート順を逆転させることができました。しかし、POSIX はそのような制限を設けていないので、memcmp() や strcmp() などの結果を直接返す比較関数では、これは安全ではありませんでした。少なくとも最新のバージョンの memcmp() は INT_MIN を返すことがあり、誤った並べ替え順序が発生します。
</p>
<p>
この制限は削除されました。ソート順を逆にする場合は、INVERT_COMPARE_RESULT() マクロを使用する必要があります。
</p>
<li>共有無効化のメッセージ処理における再帰障害が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この障害で VACUUM FULL によって処理されたばかりのシステムカタログやインデックスへのアクセスに失敗することがあります。以下のエラーが報告されました。FATALが生じることもあります。
</p>
<pre>
ERROR:  could not read block 3 in file "base/16384/2662": read only 0 of 8192 bytes
</pre>
<p>
本修正で、待機イベントである LockAcquire に対する新しい結果コードが追加されました。このイベントの外部呼出し元に影響を与える可能性があります。しかし、これは非常に珍しい使われ方でのみ発生する問題です。
</p>
<li>SPI_connect() 及び SPI_finish() の中に SPI のグローバル変数を保存および復元するようになりました。  (Chapman Flack, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これにより、1つの SPI を使用する関数が、別の関数を呼び出すときに起こり得る干渉を防ぎます。
</p>
<li>潜在的にアラインメント調整されたページバッファの使用を避けるようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
新しく UNION型の PGAlignedBlock、PGAlignedXLogBlock を設けて、これらを 単なる char配列の代わりに使用して、コンパイラがアラインメントを外れた開始アドレスにバッファを置くことがないようになりました。これにより一部プラットフォームでのクラッシュを回避します。問題がなかったプラットフォームでもパフォーマンス向上が期待できます。
</p>
<li>Make src/port/snprintf.c の結果が、C99 標準の snprintf() の結果の定義に沿うようになりました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは C99 以前の振る舞いをしていました。主にWindowsなど、このコードが使われているプラットフォームでは、呼び出しコードが C99 のセマンティクスを前提としていた場合にバッファオーバーランを検出できない可能性がありました。
</p>
<li>i386 アーキテクチャにおいて clang コンパイラを使ってビルドする際は、-msse2 オプションが必須になりました。  (Andres Freund) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
configure スクリプトの修正です。これにより浮動小数点のオーバーフローチェックが失敗することを回避できます。
</p>
<li>configrue における strerror_r() 結果型の検知が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以前のリリースでは、Linux 上で icc を使ってビルドする際、間違った結果となりました（恐らく他の組み合わせでも）。これにより、システムから報告されたエラーに対して libpq が有用なエラーメッセージを返さない動作が生じました。
</p>
<li>Visual Studio 2015 と Visual Studio 2017 でのビルドがサポートされるようになりました。  (Michael Paquier, Haribabu Kommi) (9.5)(9.4)(9.3)</li>
<li>ALLOCSET_DEFAULT_SIZES および関連のマクロが旧バージョン系列にも提供されました。  (Tom Lane) (9.5)(9.4)(9.3)</li>
<p>
これらのマクロは 9.6 以降は存在していましたが、古いバージョンにも追加して、固有のコーディングなしで拡張機能を利用したいという要望がありました。
</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.3.24 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-24/</link>
		
		<dc:creator><![CDATA[高塚 遥 (Haruka Takatsuka)]]></dc:creator>
		<pubDate>Thu, 23 Aug 2018 00:56:11 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=446</guid>

					<description><![CDATA[このリリースは 9.3.23 からの修正リリース（2018年8月9日リリース）です。 9.3.x からのアップデートではダンプ、リストアは不要です。 また、9.3.23 より前のバージョンからアップデートを行う場合は 9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.23 からの修正リリース（2018年8月9日リリース）です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.3.23 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-23/">9.3.23 に関する技術情報</a>を参照してください。</p>
<p><span id="more-446"></span></p>
<h3 class="background">PostgreSQL 9.3.23 から 9.3.24 への変更点</h3>
<p>10.5、9.6.10、9.5.14、9.4.19、9.3.24 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>libpq にて接続を試行するごとに状態を完全にはリセットできておらず、修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
ある種の攻撃方法で dblink や postgres_fdw の権限の無いユーザが、サーバを実行する OSユーザが所有する ~/.pgpass などのサーバ側の認証情報ファイルの使用を防止する検査を迂回できました。ローカル接続に peer認証を許可しているサーバは特に影響を受けます。postgres_fdw セッションへの SQLインジェクションなどの他の攻撃も可能です。
</p>
<p>
この方法で postgres_fdw を攻撃するには指定の接続パラメータで外部サーバオブジェクトが作成できる必要があります。一方、dblink に対しては、dblink にアクセスできる任意のユーザで攻撃可能です。一般に libpq を使ったアプリケーションに対して接続パラメータを選べると攻撃可能になると考えられます。(CVE-2018-10915)
</p>
<li>単純な「SELECT * FROM ...」ではないビューを通した「INSERT ... ON CONFLICT UPDATE」が修正されました。  (Dean Rasheed, Amit Langote) (10)(9.6)(9.5)</li>
<p>
ビューの SELECTリストが元のテーブルの列と1対1で対応していない場合に、更新可能ビューの誤った展開がクラッシュや「ERROR:  attribute ... has the wrong type」エラーをもたらす可能性がありました。
</p>
<p>
さらにセキュリティ上の問題もありました。攻撃者が同テーブルの他の列にINSERTとUPDATE権限を持っている場合に、この障害を利用してUPDATE権限の無い列を更新できました。また、あらゆるユーザがこの障害を使ってサーバメモリの読み取りが可能でした。(CVE-2018-10925)
</p>
<pre>
障害動作例:
（以下のようなテーブル、ビューで）
db1=# CREATE TABLE t2 (id int primary key, c1 int, c2 int);
db1=# CREATE VIEW v2 AS SELECT id, c2 FROM t2;
db1=# GRANT UPDATE (id, c2) ON t2 TO foo;
db1=# GRANT INSERT (id, c2) ON t2 TO foo;
db1=# GRANT ALL ON v2 TO foo;
db1=# INSERT INTO t2 VALUES (1,1,1), (2,2,2);

（一般ユーザ foo で INSERT ... ON CONFLICT ... を実行）
db1=&gt; INSERT INTO v2 (id, c2) VALUES (1,100)
        ON CONFLICT (id) DO UPDATE SET c2 = EXCLUDED.c2;
INSERT 0 1

（奇妙な結果: c2 が更新されず、権限が無い c1 が NULL に更新）
db1=# SELECT * FROM t2;
 id | c1 | c2
----+----+----
  2 |  2 |  2
  1 |    |  1
(3 rows)
</pre>
<li>固定されたシステムカタログに対する relfrozenxid値と relminxid値の更新が、遅れることなく処理されるようになりました。  (Andres Freund) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
過剰に楽観的なキャッシュ処理方式は、これらの更新が他のセッションから見えなくなるおそれがあり、偽性エラー、あるいは/および、データ破損をもたらす可能性がありました。古いキャッシュデータが既存セッションのみならず新たなセッションにまで残り続ける可能性があるため、この問題は pg_authid などの共有カタログにおいて特に悪質です。
</p>
<p>
以下のエラーが報告されて問題が発見されました。</p>
<pre>
ERROR:  found xmin 2906288382 from before relfrozenxid 740087784
</pre>
<p>これは、テーブルに凍結したXID値（relfrozenxid）よりも手前のxmin値を持つレコードが見つかったという意味です。キャッシュ処理の誤りで実際の relfrozenxid値よりもずっと古い値が参照されていました。<br />
同様に「ERROR: found multixact ... from before relminmxid ...」も起こる可能性があります。
</p>
<li>昇格したばかりのスタンバイが昇格後の最初のチェックポイント処理を終える前にクラッシュした場合について、修正されました。  (Michael Paquier, Kyotaro Horiguchi, Pavan Deolasee, &Aacute;lvaro Herrera) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
本障害により、そのクラッシュ後のリカバリ起動でWALを適用する際に一貫性をもったデータベース状態に到達していないと判断され、起動に失敗しました。
</p>
<p>
クラッシュ後の起動失敗のときに「PANIC:  WAL contains references to invalid pages」が出る動作が報告されています。
</p>
<li>内容が全てゼロのBtreeインデックスのページを再利用する際に不適切なWALレコードを出力しないように修正されました。  (Amit Kapila) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この誤りはアサート失敗として現れます。また、潜在的にホットスタンバイサーバで不必要な問い合わせキャンセルを起こすおそれがありました。
</p>
<li>WALリプレイにて、1GBを超える破損したレコード長から保護されるようになりました。  (Michael Paquier) (10)(9.6)(9.5)</li>
<p>
このような場合には破損したデータとして扱えるようになりました。これまでは、WALレコード内に書かれたレコード長の通りに大きいメモリ領域を確保しようと試みていました。その結果、以下のような強いエラーが生じてリカバリ不能になっていました。
</p>
<pre>
FATAL:  invalid memory alloc request size ...
</pre>
<p>
本修正でWALの再読み込みを促す弱いエラーを出すように変更されました。
</p>
<li>リカバリの終わりに、タイムラインヒストリファイルへの書き込みをできるだけ遅らせるようになりました。  (Heikki Linnakangas) (10)(9.6)(9.5)</li>
<p>
これにより、リカバリクリーンアップ中のエラー（二相コミットの状態ファイルの問題など）でディスク上に一貫性の無いタイムライン状態が生じるのを回避します。
</p>
<p>
以下のようにリカバリ完了時にrecovery.confが無いというエラーが出て、失敗する動作が報告されていました。
</p>
<pre>
LOG: selected new timeline ID: 2
FATAL: could not open file "recovery.conf": No such file or directory
LOG: startup process (PID 23456) exited with exit code 1
</pre>
<li>多数のリレーションを削除するトランザクションに対して、WALリプレイの性能が改善されました。  (Fujii Masao) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この変更はファイル削除を一括して行うことで、共有バッファがスキャンされる回数を減らして、特に shared_buffers 設定が大きい場合に処理を効率化します。
</p>
<li>スタンバイサーバのWALリプレイにてロック解放の性能が改善されました。  (Thomas Munro) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>wal sender がロジカルデータのストリーミング状態を正しく報告するようになりました。  (Simon Riggs, Sawada Masahiko) (10)(9.6)(9.5)(9.4)</li>
<p>
これまでは上流サーバに追いついているかどうかを誤判定していました。上流側（sender側）の起動時に、既に追いついているのに "streaming" でなく"catchup" 状態と報告することがありました。
</p>
<li>ロジカルレプリケーションのサブスクライバにおいて、データ型の入力関数を実行するときにスナップショットが確実に提供されるようになりました。  (Minh-Quan Tran, &Aacute;lvaro Herrera) (10)</li>
<p>
この遺漏により、SQL言語の関数を使った制約を持つドメイン型などの一部の場合でクラッシュを起こしていました。
</p>
<li>ロジカルデコーディングのときのスナップショット処理について誤りが修正されました。  (Arseny Sher, &Aacute;lvaro Herrera) (10)(9.6)(9.5)(9.4)</li>
<p>
稀な場合において誤ったデコーディング結果を許容していました。ロジカルレプリケーション対象テーブルへのDDL操作や、サブトランザクション(SAVEPOINT)操作があるときに誤動作を起こすおそれがありました。
</p>
<li>ロジカルレプリケーションのテーブル同期ワーカにサブトランザクションを考慮した処理が加わりました。  (Amit Khandekar, Robert Haas) (10)</li>
<p>
これまで、いくつかのサブトランザクションが同期テーブルを更新した後に中止(ABORT)された場合に、テーブル同期が誤った振る舞いをする可能性がありました。
</p>
<li>インデックス作成が途中で失敗した後、テーブルのキャッシュされたインデックスリストが正しく再構築されるように修正されました。  (Peter Geoghegan) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは、作成に失敗したインデックスの OID がリストに残り、同セッション内でその後に問題をひき起こしました。
</p>
<p>
インデックス作成失敗後に当該テーブルに対するSQL実行で「ERROR: could not open relation with OID 16567」エラーが出るケースが報告されました。
</p>
<li>GINインデックスの圧縮されていない空のポスティングリストページの誤った処理が修正されました。  (Sivasubramanian Ramasubramanian, Alexander Korotkov) (10)(9.6)(9.5)(9.4)</li>
<p>
これは 9.4 より前の GINインデックスを pg_upgrade した後にアサート失敗をもたらします。9.4 以降のバージョンで GINインデックスを作った場合には問題ありません。
</p>
<li>キャッシュライン共用を減らすために、無名POSIXセマフォの配列を埋めこむようになりました。  (Thomas Munro) (10)</li>
<p>
これは多CPUシステムでの競合を減らし、Linux と FreeBSD での旧リリースと比較しての性能退行を修正します。
</p>
<li>パラレルインデックススキャンをしているプロセスが確実にシグナルに応対するようになりました。  (Amit Kapila) (10)</li>
<p>
これまで、パラレルワーカはインデックスページのロックを待機して止まったままとなる可能性がありました。
</p>
<li>VACUUM が Btreeインデックスのページ削除のループ内にあるとき、確実にシグナルに応対するように修正されました。  (Andres Freund) (10)(9.6)(9.5)(9.4)</li>
<p>
破損したBtreeインデックスがここでの無限ループをもたらす可能性があり、その場合、これまでは強制クラッシュさせる以外には割り込み不能となっていました。
</p>
<li>inner_unique最適化を加えた際に入り込んだ、ハッシュ結合のコスト計算の誤りが修正されました。  (David Rowley) (10)</li>
<p>
本障害により、この最適化が適用できる場合に悪いプランが選択される可能性がありました。
</p>
<p>
inner_unique最適化とは、PostgreSQL 10 で導入されたユニーク保証を使った最適化の一つで、内部結合に適用されます。
</p>
<li>複合型の列に関する同値クラスの誤った最適化が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
本障害のために、複合列のインデックスがマージ結合に対してそれら列のソート順序を提供するかもしれないことが、見落とされていました。
</p>
<p>
以下のように複合列のインデックスが使われない動作が報告されました。
</p>
<pre>
（このようなテーブルに対して）
db1=# CREATE TYPE typ20c AS (c1 int, c2 int);
db1=# CREATE TABLE tbl20a (c3 typ20c PRIMARY KEY);
db1=# CREATE TABLE tbl20b (c3 typ20c PRIMARY KEY);
db1=# INSERT INTO tbl20a SELECT ROW(g, g)::typ20c
        FROM generate_series(1, 100000) as g;
db1=# INSERT INTO tbl20b SELECT ROW(g, g)::typ20c
        FROM generate_series(1, 100000) as g;
db1=# ANALYZE;

（以下の問い合わせで Merge Join の場合にインデックスが使われない）
db1=# explain SELECT * FROM tbl20a a, tbl20b b WHERE a.c3 = b.c3;
</pre>
<li>複数行を返す関数を使った一部のクエリでの「ERROR:  ORDER/GROUP BY expression not found in targetlist」エラーを回避するようにプランナが修正されました。  (Tom Lane) (10)(9.6)</li>
<li>キーのデータ型が配列型のような多態のBtree演算子クラスを使っているものである場合の、パーティションキーの処理が修正されました。  (Amit Langote, &Aacute;lvaro Herrera) (10)</li>
<p>
配列型のパーティションキーを使った場合に、検索におけるパーティション除外（pruning）が働かない動作が報告されていました。
</p>
<li>SQL標準の FETCH FIRST 構文が標準で期待される通り、パラメータを受け付けるように修正されました。  (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまではプリペアドステートメントでパラメータとすることができませんでした。
</p>
<pre>
（修正前の動作例、LIMIT/OFFSETでは可能だが FETCH FIRSTはエラーになる）
db1=# PREPARE p1 (int, int) AS
        SELECT * FROM t23 LIMIT $2 OFFSET $1;
PREPARE
db1=# PREPARE p2 (int, int) AS
        SELECT * FROM t23 OFFSET $1 ROWS FETCH FIRST $2 ROWS ONLY;
ERROR:  syntax error at or near "$2"
</pre>
<li>パーティションキー列の重複に対するドキュメント化されていない制限が除去されました。  (Yugo Nagata) (10)</li>
<p>
これまで「PARTITION BY RANGE (x, x)」のように同じ列を複数指定すると「ERROR:  column "x" appears more than once in partition key」エラーが生じていました。
</p>
<li>一時テーブルを非一時テーブルのパーティションにすることが禁止されました。  (Amit Langote, Michael Paquier) (10)</li>
<p>
これまでは許されていましたが、そのような場合は信頼できる動作をしません。
</p>
<li>特にバッファアクセスについて、パラレルワーカーにおける EXPLAIN のリソース使用集計が修正されました。  (Amit Kapila, Robert Haas) (10)(9.6)</li>
<p>
クエリがパラレル動作をするときに EXPLAIN (ANALYZE,BUFFERS) で出力される「Buffers: ...」値が不正確になる動作が報告されました。
</p>
<li>SHOW ALL が pg_read_all_settings のメンバーであるロールに対して全ての設定を出力するように修正されました。また、そのようなロールは設定ファイル名と行番号を pg_settings ビューで参照できるようになりました。  (Laurenz Albe, &Aacute;lvaro Herrera) (10)</li>
<li>内部実装関数 getObjectDescription の出力で、一部オブジェクト名のスキーマ修飾に失敗していたものが修正されました。  (Kyotaro Horiguchi, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
照合順序、符号化方式変換、テキスト検索のオブジェクト名が、スキーマ修飾されるべきケースで修飾されませんでした。
</p>
<p>
PostgreSQL 10.x 系列においては、パブリケーション、拡張統計のオブジェクトも該当します。また、内部実装関数 getObjectIdentity も修正されています。
</p>
<li>並列化支援関数として VARIADIC を使った集約を与えることができるようにCREATE AGGREGATE の型チェックが修正されました。  (Alexey Bashtanov) (10)(9.6)</li>
<li>COPY FROM の現在行番号カウンタを 32bit から 64bitに拡張しました。  (David Rowley) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これにより、COPYの入力が4G（約42.9億、2の32乗）行を超える場合の二つの問題を回避します。一つは COPY FROM WITH HEADER で先頭行のみならず4G行毎に行が捨てられてしまうことで、一つはエラー報告が誤った行番号を報告する可能性があることです。
</p>
<li>シングルユーザモードでレプリケーションスロットを削除できるようになりました。  (&Aacute;lvaro Herrera) (10)</li>
<p>
シングルユーザモードで「SELECT pg_drop_replication_slot('p');」を実行したときに「ERROR:  epoll_ctl() failed: Bad file descriptor」となる動作が報告されました。10.0 で埋め込まれてしまった障害です。
</p>
<li>パラレル集約が動作するときの variance(int4)関数および関連する集約関数からの誤った結果が修正されました。  (David Rowley) (10)</li>
<p>
varianceは入力値に対する標本分散を返す集約関数です。
</p>
<li>xmltable()の列式でTEXTノード、CDATAノードを適切に処理するようになりました。  (Markus Winand) (10)</li>
<li>起こりうる OpenSSL の RAND_bytes()関数の失敗を適切に処理するようになりました。  (Dean Rasheed, Michael Paquier) (10)</li>
<p>
稀な状況で本障害により「LOG:  could not generate random cancel key」が繰り返し発生して、新たな接続が受け付けられない状態になり、PostgreSQLをサービス再起動する以外では解消できませんでした。
</p>
<li>hostaddr が指定されたときの一部の場合について libpq が修正されました。  (Hari Babu, Tom Lane, Robert Haas) (10)</li>
<p>
PQhost() が一部の場合に誤解を招く結果または誤った結果を返していました。これからは一定の様式で応答します。ホスト名が指定されていたならホスト名を、ホストアドレスだけ指定されていた場合に限ってホストアドレスを、いずれも指定されていない場合にはデフォルトホスト名（典型的には /tmp かlocalhost）を返すようになりました。
</p>
<p>
また、SSL証明書を検証するときに誤った値が証明書のサーバ名と比較されるかもしれませんでした。同様に、誤った値が ~/.pgpass のホスト名欄と比較されるかもしれませんでした。これからは、ホスト名が指定されていたならホスト名、ホストアドレスだけ指定されていたならホストアドレス、いずれも指定されていないなら「localhost」が比較対象の値となります。
</p>
<p>
また、hostaddr値がパース不能であるとき以下のような不適切な（"(null)"部分）エラーメッセージが報告されていたものが修正されました。
</p>
<pre>
$ psql "hostaddr=999.999.999.999"
psql: could not parse network address "(null)": Name or service not known
</pre>
<p>
また、host、hostaddr、portパラメータにカンマ区切りのリストが含まれる場合、libpq はデフォルト動作指定を意味するリスト内の空要素を注意深く扱うようになりました。
</p>
<li>ecpg の pgtypesライブラリに文字列解放関数が追加されました。これによりWindowsでのモジュールをまたがるメモリ管理問題を回避できます。  (Takayuki Tsunakawa) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
Windows で同じ DLLにて malloc して確保したのではないメモリを free すると、クラッシュが発生することがあります。pgtypesライブラリはときどき呼び出し側が解放する想定の文字列を返しますが、そのように使用することは不可能となっていました。PGTYPESchar_free() 関数が追加され、アプリケーションによる呼び出し側でのメモリ解放が可能となりました。
</p>
<li>Windows での ecpg の long long 変数サポートが修正されました。必要な strtoll/strtoull ライブラリ関数を非標準的に宣言していたり、全く宣言していない他のプラットフォームも同様に修正されました。  (Dang Minh Huong, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
Windows上の ecpg を使用した DBクライアント実行でクライアント側エラー「unsupported type "long long" on line ...」が出るケースが報告されました。
</p>
<li>RULE変更を行った場合の PL/pgSQL でSQLステートメントタイプの誤識別が修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この障害はアサート失敗をひき起こします。また、稀な場合に INTO STRICTオプションが期待通りに動作しなくなります。
</p>
<li>Windows で標準入力がターミナルでないとき、エコー出力が適切に無効化されるようにクライアントプログラムのパスワードプロンプトが修正されました。  (Matthew Stickney) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>ダンプ出力でリスト値になっているGUI変数値のクォーティングがさらに修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以前の pg_dump出力での search_path や他のリスト値変数のクォーティングに対する修正は、空文字列リスト要素に対して誤動作をしていて、長いファイルパスが切り捨てられる危険性がありました。
</p>
<li>pg_dump で制約インデックスに対する REPLICA IDENTITY 属性のダンプに失敗していたものが修正されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)</li>
<p>
手動で作成したユニークインデックスは適切に属性が付与されますが、UNIQUE や PRIMARY KEY 制約を宣言して作られる場合にはそうなりませんでした。
</p>
<li>pg_upgrade で古いサーバが正常にシャットダウンしたか検査するようになりました。  (Bruce Momjian) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは immediateモードのシャットダウンを誤って正常シャットダウンと判断していました。
</p>
<li>contrib/hstore_plperl が Perlスカラ参照を調べて、あるはずのハッシュ参照が見つからないときにクラッシュしないように修正されました。  (Tom Lane) (10)(9.6)(9.5)</li>
<p>
以下のように hstore型にならない値を渡すときにクラッシュしていました。
</p>
<pre>
db1=# CREATE EXTENSION hstore;
db1=# CREATE EXTENSION plperl;
db1=# CREATE EXTENSION hstore_plperl;
db1=# CREATE FUNCTION test43() RETURNS hstore LANGUAGE plperl
        TRANSFORM FOR TYPE hstore AS $$ return 43; $$;
db1=# SELECT test43();
server closed the connection unexpectedly
</pre>
<li>contrib/ltree の lca() 関数で入力配列が空であるときのクラッシュが修正されました。  (Pierre Ducroquet) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>誤ったエラーコードが報告されるかもしれない、様々なエラー処理のコードパスが修正されました。  (Michael Paquier, Tom Lane, Magnus Hagander) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
ライブラリ関数で使われる errno変数の退避やリセットが不十分な箇所が修正されました。ユーザに対しては、エラーメッセージ中のエラー理由を示す部分に誤ったメッセージが出力されるという形で問題があらわれます。
</p>
<li>プログラムが既存のシステムライブラリディレクトリにあるものではなく、ビルドされたばかりのライブラリ（libpq.so など）に確実にリンクするように、Makefile が整理されました。  (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これにより、古いPostgreSQLライブラリのあるプラットフォームでビルドするときの問題を回避します。
</p>
<li>タイムゾーンデータファイルが tzdata release 2018e に更新されました。北朝鮮の夏時間法の変更とチェコスロバキアの歴史的修正が含まれます。   (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この更新には、過去のナミビアとチェコスロバキアと同様の、アイルランド夏時間の再定義が含まれます。これらの管区では、法律上標準時間が夏で、冬に変更された時間帯が適用されるため、それにあわせた変更が適用されました。実際のUTCオフセットや使われているタイムゾーン略記法に変更はありませんが、pg_timezone_namesビューのis_dst列の値が変わり、冬にtrue、夏にfalseとなります。
</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.3.23 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-23/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 15 May 2018 01:00:28 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=473</guid>

					<description><![CDATA[このリリースは 9.3.22 からの修正リリース(2018/5/10リリース)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 また、9.3.22 より前のバージョンからアップデートを行う場合は 9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.22 からの修正リリース(2018/5/10リリース)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.3.22 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-22/">9.3.22 に関する技術情報</a>を参照してください。</p>
<p><span id="more-473"></span></p>
<h3 class="background">PostgreSQL 9.3.22 から 9.3.23 への変更点</h3>
<p>10.4、9.6.9、9.5.13、9.4.18、9.3.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>contrib/adminpack の pg_logfile_rotate() 関数から全ユーザに与えられていた実行権限が削除されました。 (Stephen Frost) (10)(9.6)</li>
<p>
adminpack がインストールされている場合、全てのユーザがログファイルのローテーションをリクエストすることができ、セキュリティ的な問題がありました。
</p>
<p>
今回のアップデートを適用後、運用管理者は「ALTER EXTENSION adminpack UPDATE;」を実行して adminpack を更新する必要があります。これは adminpack がインストールされているすべてのデータベースが対象となります。(CVE-2018-1115)
</p>
<li>いくつかの組み込み関数の誤った変動性区分の指定が修正されました。 (Thomas Munro, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以下の関数は VOLATILE とすべきでした。変動する操作を含むかもしれないユーザから与えられた問い合わせを実行するためです。そうなっていなかったためプラン作成での誤った最適化が行われる危険がありました。
</p>
<pre>
query_to_xml
cursor_to_xml
cursor_to_xmlschema
query_to_xmlschema
query_to_xml_and_xmlschema
</pre>
<p>
既存データベースクラスタの関数定義はバージョンアップしただけでは修正されません。使用している各データベースにおいて管理者ユーザにて以下の SQLを実行して、修正することができます。
</p>
<pre>
ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.cursor_to_xml(refcursor, int, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.cursor_to_xmlschema(refcursor, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xmlschema(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xml_and_xmlschema(text, boolean, boolean, text) VOLATILE;
</pre>
<li>いくつかの組み込み関数で間違って parallel-safe とされていたものが修正されました。 (Thomas Munro, Tom Lane) (10)(9.6)</li>
<p>
以下の関数が該当します。
</p>
<pre>
brin_summarize_new_values
brin_summarize_range (10.x のみ)
brin_desummarize_range (10.x のみ)
gin_clean_pending_list
cursor_to_xml
cursor_to_xmlschema
ts_rewrite
ts_stat
binary_upgrade_create_empty_extension
pg_import_system_collations
</pre>
<p>
これらの関数は今まで parallel-restricted とされており予期せぬクエリエラーを発生させる可能性がありました。本修正は新規インストールの場合は問題ないですが、既にインストールされているものに関しては paralle-restricted のままになります。修正のためには、管理者ユーザで以下のように関数の pg_proc エントリを修正するか（全てのデータベースで実行する必要があります）、pg_upgrade を使用して本修正がされているバージョンに変更する必要があります。
</p>
<pre>
（brin_summarize_new_values 関数に対する補正 SQL 例：）
ALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE;
</pre>
<li>削除済みで未 VACUUM の TOAST エントリに一致する TOAST 値 OID の再利用を回避するようになりました。 (Pavan Deolasee) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
一度 OID カウンタが周回していると、同じ TOAST テーブルで以前に削除されたエントリと OID が一致する TOAST 値を割り当てる可能性があります。そのエントリが未だ VACUUM されていない場合、以下のエラーがもたらされ、これが削除済みエントリが VACUUM で除去されるまで持続します。
</p>
<pre>
ERROR: unexpected chunk number 0 (expected 1) for toast value nnnnn
</pre>
<p>
新たな TOAST エントリを作るときにそのような OID を選ばないように修正されました。
</p>
<li>パーティション化されたテーブルに COPY をするときに、構成要素の個々パーティション上で正しくあらゆる CHECK 制約を強制するようになりました。 (Etsuro Fujita) (10)</li>
<p>
これまではパーティション化されたテーブル全体にむけて宣言された制約のみが検査されていました。
</p>
<li>パーティションキー比較関数むけのメモリ管理が修正されました。 (&Aacute;lvaro Herrera, Amit Langote) (10)</li>
<p>
この誤りにより、パーティションキーにユーザ定義演算子クラスを使うときにクラッシュをひき起こす恐れがありました。
</p>
<li>パーティション化されたテーブル内の同一の行型を持たないいくつかの要素パーティションに問い合わせがタプルを挿入するときクラッシュする可能性があり、修正されました。 (Etsuro Fujita, Amit Langote) (10)</li>
<li>ANALYZE の pg_class.reltuples を更新するアルゴリズムが変更されました。 (David Gould) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは ANALYZE により実際にはスキャンされないページは、元のタプル密度を維持していると見做されていました。ANALYZE が全体の一部のみサンプリングする大きなテーブルでは、これは全体のタプル密度見積りが大幅に変化しないことを意味し、そのためテーブルの実際の変動にかかわらず、reltuples はテーブルの物理サイズ（relpages）におよそ比例する形で変化しました。これにより、事実上自動 VACUUM が遮断されるほど reltuples が実際より大きくなりすぎる動作がみられました。
</p>
<p>
ANALYZE で抽出したサンプルが統計的に偏りの無いものと仮定して、観測されたサンプルのタプル密度をテーブル全体に外挿推定するように、修正されました。
</p>
<li>拡張統計オブジェクトが、CREATE TABLE ... LIKE ... INCLUDING ALL で複製されたテーブルの属性に含まれるようになりました。 (David Rowley) (10)</li>
<p>
また、この個別制御をする INCLUDING STATISTICS オプションが追加されました。
</p>
<li>bigint型の IDENTITY列を伴う CREATE TABLE ... LIKE が修正されました。 (Peter Eisentraut) (10)</li>
<p>
long が 32 ビットのプラットフォーム（大部分の 32 ビットマシンのみならず 64ビット Windows が含まれます）では、コピーされたシーケンスパラメータが 32 ビットに切り捨てされていました。
</p>
<li>SERIALIZABLE または REPEATABLE READ トランザクション隔離レベルで同時実行する CREATE INDEX CONCURRENTLY コマンドでのデッドロックが回避されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)</li>
<li>REFRESH MATERIALIZED VIEW CONCURRENTLY が遅く実行される可能性があり、修正されました。 (Thomas Munro) (10)(9.6)(9.5)(9.4)</li>
<li>参照されるカーソルが IndexOnlyScan 実行プランを使うときにUPDATE/DELETE ... WHERE CURRENT OF が失敗しないように修正されました。 (Yugo Nagata, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
予期せぬエラー「ERROR: cannot extract system attribute from virtual tuple」が発生する例が報告されていました。
</p>
<li>パラメタ化されたパスにプッシュされたJOIN句の不正なプラン作成が修正されました。 (Andrew Gierth, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
この間違いは、単純なフィルタ条件であるべきときに外部結合に対する結合フィルタ条件の誤まった分別が生じ、誤った結合結果をもたらしました。
</p>
<p>
以下の誤動作例が報告されました。
</p>
<pre>
db=# CREATE TABLE t AS SELECT 1 AS x, '{10,20}'::int[] AS ys;
db=# SELECT * FROM t
LEFT JOIN (VALUES (1, 10), (2, 20)) AS q1 (x, y) ON q1.x = t.x
LEFT JOIN unnest(ys) q2 (y) ON q2.y = q1.y;
x | ys | x | y | y
---+---------+---+----+----
1 | {10,20} | 1 | 10 | 10
1 | {10,20} | 2 | 20 |
(2 rows)
</pre>
<li>複合インデックスの列に同じテーブルの列が現れて、これらインデックス列の一部だけが列の値を返せる演算子クラスを使うときに、誤った IndexOnlyScan プランが生成される可能性があり、修正されました。 (Kyotaro Horiguchi) (10)(9.6)(9.5)</li>
<p>
以下のようなインデックスで該当します。
</p>
<pre>
CREATE INDEX ON text_tbl USING gist (text_col gist_trgm_ops, text_col);
CREATE INDEX ON inet_tbl USING gist (inet_col gist_inet_ops, inet_col inet_ops);
</pre>
<li>トップレベルに AND/OR 条件の NULL と証明可能な副句を持つ CHECK 制約の、誤った最適化が修正されました。 (Tom Lane, Dean Rasheed) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
例えば以下のように「制約による除外」の最適化で除外すべきでない子テーブルが除外されてしまうことがあり得ました。
</p>
<pre>
db=# CREATE TABLE cnullp (f1 int);
db=# CREATE TABLE cnullc (check (f1 = 1 OR f1 = null)) INHERITS (cnullp);
db=# INSERT INTO cnullc VALUES (1), (2), (null);
db1=# EXPLAIN SELECT * FROM cnullp ;
QUERY PLAN
----------------------------------------------------------------
Append (cost=0.00..35.50 rows=2551 width=4)
-&gt; Seq Scan on cnullp (cost=0.00..0.00 rows=1 width=4)
-&gt; Seq Scan on cnullc (cost=0.00..35.50 rows=2550 width=4)
(3 rows)

db1=# EXPLAIN SELECT * FROM cnullp WHERE f1 = 2;
QUERY PLAN
------------------------------------------------------------
Append (cost=0.00..0.00 rows=1 width=4)
-&gt; Seq Scan on cnullp (cost=0.00..0.00 rows=1 width=4)
Filter: (f1 = 2)
(3 rows)
</pre>
<li>問い合わせが複数 GROUPING SETS を持ち、それらのいずれもがソートによる実行プランがとれないときのプランナのクラッシュが防止されました。 (Andrew Gierth) (10)</li>
<pre>
(大小比較ができないのでソート不能な xid 型によるクラッシュをひき起こす SQL 例)
db=# CREATE TABLE t18 (id int, x1 xid, x2 xid);
db=# INSERT INTO t18 VALUES (1, '1', '1'), (2, '2', '2'), (3,'3','3');
db=# SELECT x1, x2, count(*) FROM t18 GROUP BY GROUPING SETS ((x1), (x2));
</pre>
<li>GROUPING SETS の一部の使用法において、エグゼキュータのメモリ二重解放によるクラッシュが修正されました。 (Peter Geoghegan) (10)(9.6)(9.5)</li>
<li>トリガ関数内における遷移テーブルを自己結合する問い合わせの誤実行が修正されました。 (Thomas Munro) (10)</li>
<p>
UNION で遷移テーブルへの SELECT を繋ぐ場合なども該当します。
</p>
<li>テーブル書き換えのイベントトリガ追加が、そのようなトリガを呼び出すかもしれないコマンドと同時に行われた場合のクラッシュが回避されました。 (&Aacute;lvaro Herrera, Andrew Gierth, Tom Lane) (10)(9.6)(9.5)</li>
<li>準備されたトランザクションのコミットをしているときに、問い合わせのキャンセルやセッション終了割り込みが起きた場合の障害が回避されました。 (Stas Kelvich) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>繰り返し実行されているハッシュ結合での問い合わせ処理の間のメモリリークが修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>ビジビリティマップのバッファピンでメモリのリークまたは二重解放の可能性があり、修正されました。 (Amit Kapila) (10)(9.6)</li>
<li>ページに全て可視であると偽性の印付けするのを回避しました。 (Dan Wood, Pavan Deolasee, &Aacute;lvaro Herrera) (10)(9.6)</li>
<p>
これは一部タプルがロックされている（しかし削除されていない）場合に起きる可能性がありました。問い合わせが未だ正しく実行中の間、VACUUM は通常そのようなページを無視します。これはタプルがずっと凍結されないという長期の影響を伴います。
</p>
<p>
最近のリリースでは、これによりエラー「ERROR: found multixact nnnnn from before relminmxid nnnnn」を出しました。
</p>
<li>heap_prepare_freeze_tuple の厳格すぎるサニティチェックが修正されました。 (&Aacute;lvaro Herrera) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これは pg_upgrade で 9.2 以前のバージョンからアップグレードされたデータベースにて、誤った「ERROR: cannot freeze committed xmax ...」エラーをひき起こしました。
</p>
<li>C 言語で記述された更新前に実行される行トリガが OLD タプルを返すときのダングリングポインタ参照が防止されました。 (Rushabh Lathia) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>自動 VACUUM ワーカをスケジューリングする間のロックが軽減されました。 (Jeff Janes) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでの振る舞いは多テーブルデータベースにおいて潜在的なワーカの同時実行性を大幅に削いでいました。
</p>
<li>pg_stat_activity のデータをローカルメモリにコピーするときに、クライアントホスト名（client_hostname）が確実にコピーされるようになりました。 (Edmund Horner) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまでは、ローカルとされるスナップショットが共有メモリへのポインタを含んでおり、いずれかの存在するセッションが切断された場合に client_hostname が予期せず変わることがあり得ました。
</p>
<li>補助プロセスに対する pg_stat_activity の情報を正しく扱うようになりました。 (Edmund Horner) (10)</li>
<p>
各種補助プロセス（autovacuum launcher や background writer など）に対する application_name、client_hostname、query 属性が正しくないデータを見せる可能性がありました。
</p>
<li>ispell 辞書で不正な複合接辞の処理が修正されました。 (Arthur Zakirov) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
未初期化メモリアクセスが生じていました。
</p>
<li>テキスト列に対する SP-GiST インデックスで照合を伴う検索（不等演算子を使うインデックススキャン）が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
C ロケール以外の場合に該当する検索では誤った行が選択されました。マルチバイト文字でも影響があります。
</p>
<pre>
（報告された例）
db=# CREATE TABLE t32 (a text collate "cs_CZ");
db=# INSERT INTO t32 VALUES ('c'), ('ch'); -- チェコ語では ch で１文字
db=# SELECT * FROM t32 where a &lt; 'd';
a
----
c
(1 row)

db=# CREATE INDEX ON t32 USING spgist (a);
db=# SET enable_seqscan TO off;
db=# SELECT * FROM t32 where a &lt; 'd';
a
----
c
ch
(2 rows)
</pre>
<li>探索値(traversalValue)を使う SP-GiST 演算子クラスでの問い合わせの間のメモリリークが防止されました。 (Anton Dign&ouml;s) (10)(9.6)</li>
<li>SP-GiST インデックスの初期構築時に、インデックスタプルの数を正しく数えるようになりました。 (Tomas Vondra) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまで、タプル数はインデックス対象のテーブルと同じと報告されていましたが、これは部分インデックスの場合には誤りでした。
</p>
<li>GiST インデックスの VACUUM 中にインデックスタプル数を正しく数えるようになりました。 (Andrey Borodin) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これまではヒープタプルの見積数を返していました。それは単なる推測であり、間違っている場合もありましたし、インデックスが部分的なものである場合は必ず間違っていました。
</p>
<li>ストリーミングレプリケーションのスタンバイが継続している WAL レコード内で滞ってしまった場合の動作が修正されました。 (Kyotaro Horiguchi) (10)(9.6)(9.5)(9.4)</li>
<p>
今までは XLogPageRead() が既に読み込みを終えた部分であったとしても、WAL の最初からストリーミングレプリケーションを再開していました。これにより稀にストリーミングレプリケーションが止まってしまう現象が生じました。
</p>
<li>walsender が再起動した際に、WAL データを二重に処理してしまう可能性が排除されました。 (Craig Ringer) (10)(9.6)(9.5)(9.4)</li>
<p>
walsender が $PGDATA/pg_replslot 内にデータを残した状態で終了してしまった場合、次の walsender がそこに残ったデータを捨てることなく開始して、データが重複する可能性がありました。
</p>
<li>ロジカルレプリケーションにおいて、型の OID がローカルとリモートで一致すると仮定しないように修正されました。 (Masahiko Sawada) (10)</li>
<p>
リモートのものをローカルのものとして使用しており、「ERROR: cache lookup failed for type XYZ」エラー、もしくはランダムに意図していないものが選択される可能性がありました。
</p>
<li>scalarltsel と scalargtsel が組み込みデータ型以外の型も受け付けるようになりました。 (Tomas Vondra) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
ユーザ定義の数値データ型で予期せぬ「ERROR: unsupported type: nnnnn」が生じることが報告されました。
</p>
<li>大量のクエリ結果が収集された後にサーバエラーが報告された時のlibpq が消費するメモリ量が削減されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
エラーメッセージをパース後にクエリ結果を捨てていましたが、事前に捨てるようになりました。その結果メモリ消費量を抑え out-of-memory になる危険性が軽減されました。
</p>
<li>ecpg 内の連続した free() によるクラッシュが修正されました。 (Patrick Krecker, Jeevan Ladhe) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>MSVC を使用したビルドにて ecpg が long long int 変数を扱えるように修正されました。 (Michael Meskes, Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>ダンプ内でリストを値とする GUC 変数に対する間違ったクォーテーションが修正されました。 (Michael Paquier, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
pg_dump の結果で local_preload_libraries、session_preload_libraries、shared_preload_libraries と temp_tablespaces 変数に対するクォーテーションの付け方が間違っていました。もしもこれらの設定が CREATE FUNCTION ... SET や ALTER DATABASE/ROLE ... SET にある場合に問題になる可能性がありました。
</p>
<li>pg_recvlogicalが v10より前のPostgreSQLに対して失敗しないように修正されました。 (Michael Paquier) (10)(9.6)(9.5)(9.4)</li>
<p>
前回のリリースにて変更された search_path へのプロテクトが追加されていましたが、10 より前のバージョンではレプリケーション接続で SQL を受け付けないため有効でなく、構文エラーが発生する可能性がありました。
</p>
<li>pg_rewind 起動中にソースサーバで削除されたファイルがターゲットサーバでも確実に削除されるようになりました。 (Takayuki Tsunakawa) (10)(9.6)(9.5)</li>
<p>
失敗していた場合、ターゲットサーバがデータ不整合に陥っていました。
</p>
<li>pg_rewind がデフォルト以外のテーブルスペースにあるテーブルデータを正しく扱えるように修正されました。 (Takayuki Tsunakawa) (10)(9.6)(9.5)</li>
<li>PL/pgSQL 整数 FOR ループのオーバーフロー処理が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以前のコードではいくつかの GCC 以外のコンパイラではオーバーフローが検知されず、無限ループに陥っていました。
</p>
<li>PL/Python のリグレッションテストが Python 3.7 の環境でも成功するように調整されました。 (Peter Eisentraut) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>MSVC ビルドにて PL/Python と関連モジュールのリグレッションテストが Python 3 でもサポートされました。 (Andrew Dunstan) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>contrib/bloom インデックスの初期ビルドでのエラーが修正されました。 (Tomas Vondra, Tom Lane) (10)(9.6)</li>
<p>
インデックス内のタプル数を推測でなく確実にカウントすることで最後のタプルが取りこぼされる可能性がなくなりました。
</p>
<li>b64_encode と b64_decode 内部関数の名前が Solaris 11.4 の組み込み関数名と被らないように変更されました。 (Rainer Orth) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
b64_encode は pg_base64_encode に、b64_decode は pg_base64_decode に名前変更されました。
</p>
<li>タイムゾーンライブラリが IANA の tzcode release 2018e と同期されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
これは zic タイムゾーンデータコンパイラが負の夏時間オフセットで動作するように修正します。PostgreSQL はこのようなタイムゾーンデータに直ちには対応しませんが、zic を IANA から直接取得したタイムゾーンデータで使う可能性がありますので、確実を期してアップデートされました。
</p>
<li>タイムゾーンデータファイルが tzdata release 2018d に更新されました。 (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
パレスチナと南極（ケーシー基地）の DST 法の変更、ポルトガルとその植民地、エンダーベリー島、ジャマイカ、タークス・カイコス諸島、ウルグアイの歴史的修正が加えられています。
</p>
<li>Microsoft Visual Studio 2015 でのビルドがサポートされました。 (Michael Paquier) (9.5)</li>
<p>
以前のリリースでも修正が行われていましたが、修正もれがありました。
</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.3.22 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-22/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 08 Mar 2018 01:00:57 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=482</guid>

					<description><![CDATA[このリリースは 9.3.21 からの修正リリース(2018/3/1リリース)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 しかしながら、下記 1 番、2 番の項目を確認して、必要に応じて対応を行 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.21 からの修正リリース(2018/3/1リリース)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、下記 1 番、2 番の項目を確認して、必要に応じて対応を行うことを推奨します。</p>
<p>また、9.3.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-18/">9.3.18 に関する技術情報</a>を参照してください。</p>
<p><span id="more-482"></span></p>
<h3>PostgreSQL 9.3.21 から 9.3.22 への変更点</h3>
<p>10.3、9.6.8、9.5.12、9.4.17、9.3.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>他ユーザからの search_path を使った「トロイの木馬」攻撃を防御する PostgreSQL とアプリケーションの設定方法がドキュメントに記載されました。 (Noah Misch) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
害意あるユーザから書き込み可能なスキーマを含む search_path 設定を使うことは、そのユーザが問い合わせの制御を取ること、そして、攻撃されたユーザの権限で任意の SQL コードを実行することをきわめて容易に可能にします。
</p>
<p>
そのため、search_path に信用できないスキーマを含めないようにすることが推奨されます。ドキュメントのスキーマ、libpq、拡張および CREATE FUNCTION の各ページについて記載を改定しました。
</p>
<p>
特に public スキーマはデフォルトで存在し、デフォルトで search_path に含まれており、全てのユーザでスキーマ上でオブジェクト作成が可能となっています。同じデータベースにアクセスする信用できない（本来制限されている）ユーザがいて、それでいて public スキーマと search_path 設定がデフォルト状態のままである場合には明らかに本脆弱性に該当します。(CVE-2018-1058)
</p>
<li>pg_dump や他のクライアントプログラムで安全でない search_path 設定の使用が回避されました。 (Noah Misch, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
pg_dump、pg_upgrade、vacuumdb、およびその他各種の PostgreSQLで提供されるクライアントプログラム自体に前項で記載した類のハイジャックに対する脆弱性がありました。これらプログラムはたいてい管理者ユーザで実行されるので狙われやすいターゲットです。これらを安全にするため、動作時の search_path 設定に pg_catalog スキーマだけ含まれるようになりました。また、autovacuum worker も同様に動作するようになりました。なお、pgbench と psql は本修正の対象外です。
</p>
<p>
これは非互換箇所のある修正です。これらのプログラムから間接的に実行されるユーザ定義関数（例えばインデックス式の関数）が search_path 設定に依存して記述されている（例えば public スキーマ下の関数をスキーマ修飾無しに参照している）場合、エラーが生じるようになります。(CVE-2018-1058)
</p>
<li>ロジカルレプリケーションで伝播不可能なリレーションに対して伝播しようとするのを防ぐようになりました。 (Peter Eisentraut) (10)</li>
<p>
FOR ALL TABLES と指定されたパブリケーションが誤ってマテリアライズドビューや information_schema テーブルの変更を伝播していました。これらは変更ストリームから無視されるべきものです。
</p>
<li>サブプラン内の CTE 参照で同時更新再チェック動作の間違いが修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
CTE（WITH 句参照）が InitPlan や SubPlan で使われていて、問い合わせが同時更新された行に更新やロックをするために再チェックを必要とする場合に、誤った結果が返ることがありました。
</p>
<li>外部結合でマージ結合句が重複した場合にプランナが失敗する問題が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
コードの誤りにより稀なケースで「ERROR: left and right pathkeys do not match in mergejoin」や「ERROR: outer pathkeys do not match mergeclauses planner」といったエラーが生じていました。
</p>
<pre>
（10.2 でのエラーが発生する SQL を実行）
test=# EXPLAIN (COSTS off)
SELECT * FROM j1 FULL OUTER JOIN
(SELECT * FROM j2 ORDER BY j2.id DESC, j2.num asc) j2
ON j1.id = j2.id AND j1.id = j2.num;
ERROR: left and right pathkeys do not match in mergejoin

（10.3 での応答）
QUERY PLAN
------------------------------------------------------
Merge Full Join
Merge Cond: ((j2.id = j1.id) AND (j2.num = j1.id))
-&gt; Sort
Sort Key: j2.id DESC, j2.num
-&gt; Seq Scan on j2
-&gt; Sort
Sort Key: j1.id DESC
-&gt; Seq Scan on j1
(8 rows)
</pre>
<li>pg_upgrade でマテリアライズドビューのための relfrozenxid の保存に失敗する問題が修正されました。 (Tom Lane, Andres Freund) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
アップグレード後にマテリアライズドビューのデータが破損する可能性がありました。「ERROR: could not access status of transaction ...」や「ERROR: found xmin ... from before relfrozenxid ...」というエラーが現れます。
</p>
<p>
この問題は、めったに更新されない、もしくは REFRESH MATERIALIZED VIEW CONCURRENTLY のみで更新をしていたマテリアライズドビューで発生しやすいものと見られます。
</p>
<li>pg_dump の出力の誤りが修正されました。 (Alexey Bashtanov) (10)</li>
<p>
シーケンスの MAXVALUE や MINVALUE がデフォルト値であるなら、ダンプ出力で省略しますが、その判断が間違っていました。
</p>
<p>
大きな値を指定した場合に以下のような誤動作が報告されました。
</p>
<pre>
（誤動作例）
db=# CREATE SEQUENCE foo INCREMENT BY -1
MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807;
db=# q
$ pg_dump db
: 中略
CREATE SEQUENCE foo
START WITH 9223372036854775807
INCREMENT BY -1
NO MINVALUE
NO MAXVALUE
CACHE 1;
: 後略
</pre>
<li>pg_dump の STATISTICS オブジェクトに対する扱いが修正されました。 (Tom Lane) (10)</li>
<p>
拡張統計のオブジェクトが正しいスキーマにリストアされなかったり所有者が正しくない状態になる可能性がありました。
</p>
<li>エラーコンテキストスタックで間違った PL/Python の関数名が報告されていた問題が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以下のように入れ子で PL/Python を呼び出している場合において該当します。
</p>
<pre>
(障害がおきる例)
db=# CREATE FUNCTION notice_innerfunc() RETURNS int AS $$
plpy.execute("DO LANGUAGE plpythonu $x$ plpy.notice('inside DO') $x$")
return 1
$$ LANGUAGE plpythonu;

db=# CREATE FUNCTION notice_outerfunc() RETURNS int AS $$
plpy.execute("SELECT notice_innerfunc()")
return 1
$$ LANGUAGE plpythonu;
</pre>
<p>
また、入れ子になった PL/Python の DO ブロックは一部のプラットフォームで NULL ポインタ参照によるクラッシュをひき起こす可能性がありました。
</p>
<li>contrib/auto_explain の log_min_duration の最大値が約 35 分から、およそ 24 日間までに引き伸ばされました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>拡張モジュールを Windows に容易に移植できるようにするために、関連する GUC 変数が PGDLLIMPORT としてマークされました。 (Metin Doslu) (10)(9.6)</li>
</ol>

<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 9.3.21 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-21/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 15 Feb 2018 01:00:19 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=490</guid>

					<description><![CDATA[このリリースは 9.3.20 からの修正リリース(2018/2/8リリース)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 また、9.3.18 より前のバージョンからアップデートを行う場合は 9. ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.20 からの修正リリース(2018/2/8リリース)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.3.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-18/">9.3.18 に関する技術情報</a>を参照してください。</p>
<p><span id="more-490"></span></p>
<h3>PostgreSQL 9.3.20 から 9.3.21 への変更点</h3>
<p>10.2、9.6.7、9.5.11、9.4.16、9.3.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>複数の式を含むパーティションキーの処理が修正されました。  (&Aacute;lvaro Herrera, David Rowley) (10)</li>
<p>
本障害はクラッシュをひき起こす他、攻撃を意図した作りこまれた入力によってサーバプロセス上の任意のメモリが露出してしまう可能性がありました。
</p>
<p>
PARTITION BY 構文を使ったテーブルパーティショニングで「PARTITION BY RANGE ((col1 / 1000), substr(col2, 1, 5))」など、複数の式でパーティションキーを指定した場合に問題が生じます。 (CVE-2018-1052)
</p>
<pre>
（クラッシュ発生例 - CREATE TABLE でクラッシュします）
db1=# CREATE TABLE ptest (col1 int, col2 text, col3 text)
        PARTITION BY RANGE ((col1 / 1000), substr(col2, 1, 5));
db1=# CREATE TABLE ptest_1 PARTITION OF ptest
        FOR VALUES FROM (0,'00000') TO (1, '10000');
db1=# CREATE TABLE ptest_2 PARTITION OF ptest
        FOR VALUES FROM (0,'10000') TO (1, '20000');
server closed the connection unexpectedly
</pre>
<li>pg_upgrade で作られる全ての一時ファイルが誰でも見れるパーミッションにならないように修正されました。  (Tom Lane, Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
pg_upgrade は通常は一時ファイルを実行ユーザのみ読み書きできるように制限します。しかしながら、実行したユーザの umask 設定で許可されていると、「pg_dumpall -g」の出力を含む一時ファイルがグループ参照可能、または、全ユーザ参照可能、更には書き込み可能になることがありました。
</p>
<p>
複数ユーザで使用するマシンにおいて、umask 設定や実行するディレクトリのパーミッションによっては、データベースのパスワードが露出することになります。(CVE-2018-1053)
</p>
<li>KEY SHARE 行ロック中に更新されたタプルの VACUUM 処理が修正されました。  (Andres Freund, &Aacute;lvaro Herrera) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
一部のケースで VACUUM はこのようなデッドタプルの除去に失敗していました。これによりデータ破損を起こすことがあります。
</p>
<li>新たなオーバーフローページを追加した後にハッシュインデックスのメタページを壊してしまう障害が修正されました。  (Lixian Zou, Amit Kapila) (10)</li>
<p>
インデックス破損をもたらす可能性があります。
</p>
<li>VACUUM が常に GIN インデックスのペンディングリストをクリーンアップするようになりました。  (Masahiko Sawada) (10) (9.6)</li>
<p>
これには削除済みのインデックスエントリが確実に除去されることが必要です。従来コードでは他プロセスが同時にクリーンアップを実行しているとき VACUUM がクリーンアップをスキップするのを許していて、その結果、無効なエントリがインデックスに置き去りにされてしまう危険がありました。
</p>
<li>一部の LSN 取得で不十分なバッファロックが修正されました。  (Jacob Champion, Asim Praveen, Ashwin Agrawal) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
この誤りにより同時データ読み込みにおいて誤動作のおそれがありました。どのような結果が生じるか完全には分かっていません。
</p>
<li>結果が GROUPING SETS で使われるサブクエリの平坦化を伴う場合に生じる誤った問い合わせ結果が修正されました。  (Heikki Linnakangas) (10) (9.6) (9.5)</li>
<li>リストパーティショニング制約の boolean または配列型によるパーティションキーに対する扱いが修正されました。  (Amit Langote) (10)</li>
<p>
必ず col = ANY(ARRAY[val1, val2, ...]) という式で制約が書かれていたものが、col = val1 OR col = val2 という形でも生成されるようになります。
</p>
<li>ALTER TABLE .. NO INHERIT での子テーブル削除が同時実行されたとき、継承テーブルの問い合わせで、不要なエラーを回避するようになりました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
以下のエラーが発生していました。
</p>
<pre>
ERROR:  could not find inherited attribute "col1" of relation "tbl1"
</pre>
<li>CREATE INDEX CONCURRENTLY を複数同時実行したときに本来必要のない偽性のデッドロックエラーが生じていたのが修正されました。  (Jeff Janes) (10) (9.6) (9.5) (9.4)</li>
<li>VACUUM FULL において、pg_class のテーブルサイズ属性をより早くに更新するようになりました。  (Amit Kapila) (10)</li>
<p>
テーブルのハッシュインデックスを再構築するとき、初期ハッシュサイズを定めるのに pg_class 統計情報が使われます。本修正で古い情報が使われるのを防ぐことができます。
</p>
<li>列がない場合における UNION/INTERSECT/EXCEPT が修正されました。  (Tom Lane) (10)</li>
<p>
例えば以下は同じ行内容（列なし行）なので結果は「1 row」であるべきです。
</p>
<pre>
（修正前バージョンの動作例）
db1=# SELECT FROM generate_series(1,5) UNION SELECT FROM generate_series(1,3);
--
(8 rows)
</pre>
<li>TYPE を指定するテーブルやパーティションで IDENTITY 列が使えなくなりました。  (Michael Paquier) (10)</li>
<p>
使用したときクラッシュが生じていました。このような使い方は今のところサポートされない仕様とします。
</p>
<pre>
（クラッシュ発生例）
db1=# CREATE TYPE type13 AS (f1 integer, f2 text, f3 bigint);
db1=# CREATE TABLE tbl13 OF type13 (f1 WITH OPTIONS GENERATED ALWAYS AS IDENTITY);
The connection to the server was lost. Attempting reset: Failed.
</pre>
<li>IDENTITY 列に挿入するときに正しいデフォルト値を適用するように様々な誤りが修正されました。  (Michael Paquier, Peter Eisentraut) (10)</li>
<p>
いくつかの場合、特に COPY、ALTER TABLE .. ADD COLUMN において、期待されたデフォルト値が適用されず、NULL 値が挿入されていました。
</p>
<li>継承テーブルに外部子テーブルが含まれている場合のエラーが修正されました。  (Etsuro Fujita) (10) (9.6) (9.5)</li>
<p>
通常テーブルと外部テーブルが継承テーブルのツリーに混在していると、UPDATE、DELETE の問い合わせで不正なプランが作られました。一部のケース、特に行レベルトリガが外部子テーブルにある場合に、目に見えるエラーとしてあらわれます。
</p>
<p>
UPDATE 文で以下のエラーが出るケースが報告されました。
</p>
<pre>
ERROR:  could not open file "base/12345/34567": No such file or directory
</pre>
<li>LATERAL 中の VALUES の中の相関サブクエリで生じていたエラーが修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<pre>
（サブクエリ無しで実行できる例とエラー例）
db2=# SELECT * FROM generate_series(1, 2) g,
        LATERAL (VALUES (g*3), (g*5)) AS v(x);
 g | x
---+----
 1 |  3
 1 |  5
 2 |  6
 2 | 10
(4 rows)

db2=# SELECT * FROM generate_series(1, 2) g,
        LATERAL (VALUES ((SELECT g*3)), ((SELECT g*5))) AS v(x);
ERROR:  SubPlan found with no parent plan
</pre>
<li>LATERAL サブクエリ内の入れ子になった UNION ALL を伴う場合にプランナが「ERROR:  could not devise a query plan for the given query」でエラーになるのが修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>関数依存性の統計が boolean 列にも使えるようになりました。  (Tom Lane) (10)</li>
<p>
これまでは拡張統計の定義ができて情報収集も行われるにもかかわらず、プランナがこれらを適用しませんでした。
</p>
<li>グルーピング列において複数行を返す関数を含むサブクエリにより出力されたグループの数を過小評価しないようになりました。  (Tom Lane) (10)</li>
<p>
PostgreSQL 10.0、10.1 では「SELECT DISTINCT unnest(foo)」のようなケースで旧リリース系列よりもより少ない行数見積が得られており、最適でないプランが選択される可能性がありました。
</p>
<li>ロジカルレプリケーションワーカでのトリガ利用が修正されました。  (Petr Jelinek) (10)</li>
<li>ロジカルデコーディングがクラッシュしたトランザクションのファイルを正しくクリーンアップするように修正されました。  (Atsushi Torikoshi) (10) (9.6) (9.5) (9.4)</li>
<p>
ロジカルデコーディングは多数の WAL レコードを生成するトランザクションのために、溢れた WAL レコードをディスクに書き出すことがあります。通常これらのファイルはトランザクションのコミットまたはアボートのレコードに達した後にクリーンアップされます。しかし、そのようなレコードがずっと見つからない場合、削除を行うコードは不適切な動作をしていました。
</p>
<li>大きいトランザクションの処理中に wal sender がタイムアウトせず、割り込みに応答しない動作が修正されました。  (Petr Jelinek) (10) (9.6) (9.5) (9.4)</li>
<li>レプリケーション起点を削除する間の競合状態が修正されました。  (Tom Lane) (10)</li>
<p>
削除処理が無期限に待たされる可能性がありました。
</p>
<li>pg_read_all_stats ロールのメンバーは wal sender の統計を pg_stat_replication ビューで見れるようになりました。  (Feike Steenbergen) (10)</li>
<p>
pg_read_all_stats ロールはあらかじめ用意されているロールの一つです。
</p>
<li>ベースバックアップ送出中の wal sender が pg_stat_activity ビューで active として見えるようになりました。  (Magnus Hagander) (10)</li>
<p>
これまで idle と表示されていました。
</p>
<li>pg_hba_file_rules ビューでの scram-sha-256 認証メソッドの報告が修正されました。  (Michael Paquier) (10)</li>
<p>
これまでは「scram-sha256」と表示されていて、ユーザに混乱をもたらす恐れがあるので綴りが修正されました。
</p>
<li>他の権限検査関数と同様に WITH GRANT OPTION に対応するように has_sequence_privilege() 関数が修正されました。  (Joe Conway) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>UTF8 エンコーディングを使うデータベースで、異なるエンコーディングを主張するあらゆる XML 宣言を無視するようになりました。  (Pavel Stehule, Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
XML 文字列は常にデータベースのエンコーディングで格納されます。そのため、libxml に他のエンコーディング宣言で動作できるようにすることは誤った結果をもたらしました。UTF8 以外のエンコーディングでは何にせよ非 ASCII の XML データのサポートは保証されませんので、バグ互換性のために以前の振る舞いを維持します。
</p>
<p>
この変更は xpath() と関連する関数のみに影響があります。他の XML 処理コードは既にこのように振舞います。
</p>
<li>将来のマイナープロトコルバージョンに対する前方互換性が提供されました。  (Robert Haas, Badrul Chowdhury) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
本変更でクライアントがバージョン 3.x を要求できるようになりました。これにより将来のプロトコルのマイナーバージョンアップを迅速に適用できるようになるはずです。
</p>
<p>
これまで、プロトコルバージョン番号のメジャー部とマイナー部の間で機能的な違いがなく、PostgreSQL サーバは 3.0 より新しいバージョンの使用を単に拒絶していました。
</p>
<li>SCRAM チャンネルバインドに対応したクライアント（バージョン 11 以降の libpq など）がバージョン 10 サーバに接続できるようになりました。  (Michael Paquier) (10)</li>
<p>
バージョン 10 にはこの機能はありません。加えて、接続時のこれを使うかどうかのネゴシエーションが誤って行われていました。
</p>
<li>内部実装関数 ConditionVariableBroadcast() が書き換えられました。  (Tom Lane, Thomas Munro) (10)</li>
<p>
繰り返し不運なタイミングが生じるとプロセスが無限ループに陥る恐れがありました。バージョン 10 では条件変数の使用が限定されているため、これはパラレルインデックススキャンと一部のレプリケーションスロット上の操作にだけ影響があります。
</p>
<li>サブトランザクション（SAVEPOINT 等）がアボートするときに、条件変数の待機を正しくクリーンアップするようになりました。  (Robert Haas) (10)</li>
<li>条件変数を待機している子プロセスは postmaster プロセスが終了したなら確実に直ちに終了するようになりました。  (Tom Lane) (10)</li>
<li>二つ以上の Gather ノードを使う並列問い合わせでのクラッシュが修正されました。  (Thomas Munro) (10)</li>
<li>並列インデックススキャンでの削除された、あるいは half-dead のインデックスページを処理しているときのハングアップが修正されました。  (Amit Kapila) (10)</li>
<li>並列ビットマップスキャンで共有メモリセグメントを割り当てできなかったときのクラッシュが回避されました。  (Robert Haas) (10)</li>
<li>パラレルワーカプロセスの開始失敗をうまく処理できるようになりました。  (Amit Kapila, Robert Haas) (10) (9.6) (9.5) (9.4)</li>
<p>
これまで並列問い合わせは、fork() の失敗や他の低確率な問題でワーカが開始できないときにハングアップしがちでした。
</p>
<li>並列問い合わせを開始する際にパラレルワーカを一つも取得できなかった場合の不要な失敗を回避するようになりました。  (Robert Haas) (10)</li>
<li>パラレルワーカからの EXPLAIN 統計の収集が修正されました。  (Amit Kapila, Thomas Munro) (10) (9.6)</li>
<li>パラレルワーカに渡される問い合わせ文字列が確実に正しく NULL 終端するようになりました。  (Thomas Munro) (10)</li>
<p>
パラレルワーカからの postmaster ログ出力でゴミが吐き出されるのを防止します。
</p>
<li>__int128 を使う場合に安全でないアライメントの想定を回避するようになりました。  (Tom Lane) (10) (9.6) (9.5)</li>
<p>
これまでに知られている症状は一部の並列集約問い合わせでクラッシュすることです。
</p>
<li>非常に深く入れ子になった集合操作 (UNION/INTERSECT/EXCEPT) のプラン作成での、スタックオーバーフローによるクラッシュが防止されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>マージ結合内側のインデックススキャンにおける EvalPlanQual リチェック処理中のクラッシュを回避しました。  (Tom Lane) (10)</li>
<p>
これは同時に選択された行の更新が行われているときに、結合を伴う UPDATE または SELECT FOR UPDATE を行った場合にのみ発生します。
</p>
<li>テーブルに計算不能な拡張統計が定義されているときの、autovacuum のクラッシュが修正されました。  (&Aacute;lvaro Herrera) (10)</li>
<li>pg_hba.conf にある種の LDAP URL が現れた場合の NULL ポインタによるクラッシュが修正されました。  (Thomas Munro) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
LDAP URL としてホスト名の無い「ldap://」やベース DN の無い「ldap://localhost」などがあると、pg_hba.conf を読み込む際にクラッシュが発生します。バインド DN が無い設定の場合は NULL ポインタをエラーメッセージで出力しようとして、一部のプラットフォームではクラッシュするかもしれません。
</p>
<li>単純ハッシュテーブルの過度な成長によるモリ不足エラーが防止されました。  (Tomas Vondra, Andres Freund) (10)</li>
<p>
以下のような単純な SELECT 文で応答が無くなったり、メモリ不足エラーになる動作が報告されていました。
</p>
<pre>
SELECT DISTINCT bigint_val FROM tbl46 ;
</pre>
<li>PL/pgSQL ドキュメントにおける INSTR() 関数のサンプルコードが修正されました。  (Yugo Nagata, Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
Oracle のものと同じ動作をする instr 関数と記載されていますが、第 3 引数が負の値であった場合、第 4 引数がゼロまたは負の値であった場合の動作が Oracle の instr 関数と異なっていて、修正されました。
</p>
<li>ACL（アクセス制御）、コメント、およびセキュリティラベルのエントリをアーカイブ出力フォーマットで確実に識別できるように pg_dump が修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
アーカイブするエントリに付与するタグが修正されました。修正前の動作は、LARGE OBJECT で始まるタグを見てラージオブジェクト関連のエントリと認識しようとします。このため、スキーマ（オブジェクト定義）ではなくデータとして間違って分類されて、スキーマのみ、あるいは、データのみのダンプの際に望ましくない結果になる可能性があります。
</p>
<p>
この変更は pg_restore --list の出力で目に見える結果としてあらわれます。
</p>
<li>pg_rewind の実装関数 copy_file_range の名前が、新たな Linux システムコール名との競合を回避するため変更されました。  (Andres Freund) (10) (9.6) (9.5)</li>
<li>ecpg で、正しい長さを持たない指示子の配列を見つけてエラーを出すようになりました。  (David Rader) (10) (9.6) (9.5) (9.4) (9.3) </li>
<li>contrib/cube の cube ~&gt; int 演算子の振る舞いが KNN 検索と互換性を持つように変更されました。  (Alexander Korotkov) (10) (9.6)</li>
<p>
第二引数（次元指定）の意味が、様々な次元数であっても、どの値が選ばれるか予想可能になるように変更されました。
</p>
<p>
これは非互換の変更です。これを使った式インデックスは再作成が必要ですし、マテリアライズドビューはリフレッシュが必要です。
</p>
<li>contrib/hstore で、ソースと宛先を同一にして memcpy() を使ったことによる libc のアサート発生が回避されました。  (Tomas Vondra) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>contrib/pageinspect でタプルの NULL ビットマップの誤った表示が修正されました。  (Maksim Milyutin) (10) (9.6)</li>
<li>contrib/pageinspect の hash_page_items() 関数の誤った出力が修正されました。  (Masahiko Sawada) (10)</li>
<li>contrib/postgres_fdw でリモート結合を伴うプラン作成時に「ERROR:  outer pathkeys do not match mergeclauses」というプランナエラーが出るのが回避されました。  (Robert Haas) (10) (9.6)</li>
<li>contrib/postgres_fdw で、GROUP BY が重複している場合のプランナのエラーが回避されました。  (Jeevan Chalke) (10)</li>
<p>
GROUP BY の重複とは以下のようなケースです。選択リストの1番目も2番目もc1列で同一列ですが、どちらも GROUP BY 対象です。
</p>
<pre>
SELECT c1, c1 FROM ft56 WHERE c1 &gt; 5 GROUP BY 1, 2;
</pre>
<p>
以下のエラーが報告されました。
</p>
<pre>
ERROR:  targetlist item has multiple sortgroupref labels
</pre>
<li>macOS むけの PostgreSQL 自動起動のやり方について、現代的なサンプルが提供されるようになりました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
contrib/start-scripts/osx は廃れた基盤を使っていて近年の macOS リリースでは動作しません。新たに contrib/start-scripts/macos にて新たな起動基盤を使ったスクリプトが提供されます。
</p>
<li>Windows でビルド時に設定で指定する OpenSSL ライブラリの誤選択が修正されました。  (Andrew Dunstan) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>libperl の MinGW ビルドバージョンのリンクに対応しました。  (Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
これはいくつかの一般的な Windows むけ Perl 配布物で PL/Perl をビルド可能にします。
</p>
<li>MSVC ビルドが 32bit libperl が -D_USE_32BIT_TIME_T を必要とするかを検査するように修正されました。  (Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>Windows で postmaster 起動時にクラッシュダンプハンドラをより早期にインストールするようになりました。  (Takayuki Tsunakawa) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
これにより起動時初期の従来ダンプが生成されなかった障害で、コアダンプ取得が可能になるでしょう。
</p>
<li>Windows で postmaster 起動時の早い時点でメッセージを出力するときの、文字エンコーディング変換関連のクラッシュが回避されました。  (Takayuki Tsunakawa) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>既存の NetBSD の Motorola 68K のスピンロックのコードを OpenBSD むけにも使用するようになりました。  (David Carlier) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>Motorola 88K のスピンロックに対応しました。  (David Carlier) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>タイムゾーンデータファイルが tzdata release 2018c に更新されました。   (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
ブラジル、サントメ・プリンシペの夏時間法の変更、ボリビア、日本、南スーダンの歴史的な修正が含まれます。US/Pacific-New ゾーンは削除されました（これは America/Los_Angeles の別名にすぎません）。</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.3.20 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-20/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 24 Nov 2017 01:00:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=503</guid>

					<description><![CDATA[このリリースは 9.3.19 からの修正リリース(リリース日 2017/11/9)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 ただし、項目4番に該当する場合は追加の対処が必要です。 最終更新： ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.19 からの修正リリース(リリース日 2017/11/9)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目4番に該当する場合は追加の対処が必要です。</p>
<p>最終更新：2018/2/27</p>
<p><span id="more-503"></span></p>
<h3>PostgreSQL 9.3.19 から 9.3.20 への変更点</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.3.19 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-19/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 05 Sep 2017 09:15:50 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=582</guid>

					<description><![CDATA[このリリースは 9.3.18 からの修正リリース(リリース日 2017/8/31)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 ただし、項目1番には追加の対処が必要です。 また、9.3.18 よ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.18 からの修正リリース(リリース日 2017/8/31)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目1番には追加の対処が必要です。</p>
<p>また、9.3.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-18/">9.3.18 に関する技術情報</a>を参照してください。</p>
<p><span id="more-582"></span></p>
<h3>PostgreSQL 9.3.18 から 9.3.19 への変更点</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.3.18 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-18/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 21 Aug 2017 05:07:23 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=659</guid>

					<description><![CDATA[このリリースは 9.3.17 からの修正リリース(リリース日 2017/8/10)です。 9.3.x からのアップデートではダンプ、リストアは不要です。 ただし、項目1番には追加の対処が必要です。 また、9.3.16 よ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.17 からの修正リリース(リリース日 2017/8/10)です。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目1番には追加の対処が必要です。</p>
<p>また、9.3.16 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-16/">9.3.16 に関する技術情報</a>を参照してください。</p>
<p><span id="more-659"></span></p>
<h3>PostgreSQL 9.3.17 から 9.3.18 への変更点</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.3.17 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-17/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 26 May 2017 04:31:49 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=724</guid>

					<description><![CDATA[このリリースは 9.3.16 からの修正リリースです。 9.3.x からのアップデートではダンプ、リストアは不要です。 ただし、項目1番、4番、23番に該当する場合、追加の対処が必要です。 また、9.3.16 より前のバ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.16 からの修正リリースです。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、項目1番、4番、23番に該当する場合、追加の対処が必要です。</p>
<p>また、9.3.16 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-16/">9.3.16 に関する技術情報</a>を参照してください。</p>
<p><span id="more-724"></span></p>
<h3>PostgreSQL 9.3.16 から 9.3.17 への変更点</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.3.16 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-3-16/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 06:24:26 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=762</guid>

					<description><![CDATA[このリリースは 9.3.15 からの修正リリースです。 9.3.x からのアップデートではダンプ、リストアは不要です。 ただし、下記の 1 番目を確認してください。追加でインデックス再作成が必要な場合があります。 また、 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.3.15 からの修正リリースです。<br />
9.3.x からのアップデートではダンプ、リストアは不要です。<br />
ただし、下記の 1 番目を確認してください。追加でインデックス再作成が必要な場合があります。</p>
<p>また、9.3.15 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-3-15/">9.3.15 に関する技術情報</a>を参照してください。</p>
<p><span id="more-762"></span></p>
<h3>PostgreSQL 9.3.15 から 9.3.15 への変更点</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>
	</channel>
</rss>
