<?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.0 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-9-0/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:11:25 +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.0 &#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.0.23 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-23/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 08 Oct 2015 01:00:36 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1864</guid>

					<description><![CDATA[このリリースは 9.0.22 からの修正リリース（2015年10月8日リリース）です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.22 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.22 からの修正リリース（2015年10月8日リリース）です。</p>
<p>9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.22 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-22/">9.0.22 に関する技術情報</a> を参照してください。</p>
<p><span id="more-1864"></span></p>
<h3>PostgreSQL 9.0.22 から 9.0.23 への変更点</h3>
<p>9.4.5、9.3.10、9.2.14、9.1.19、9.0.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。<br />
<hr />
<ol>
<li>jsonのパースでスタックオーバーフローが防止されました。  (Oskari Saarenmaa) (9.4)(9.3)</li>
<p>
アプリケーションが PostgreSQL の json や jsonb の値を任意のユーザ入力から構成する場合、アプリケーションユーザは確実にサーバをクラッシュさせることができて、一時的なサービス不能をひき起こせます。
</p>
<li>pgcrypto拡張モジュールが crypt()関数の短すぎるソルトを検出して報告するように修正されました。  (Josh Kupershmidt) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ある種の無効なソルト引数はサーバーをクラッシュさせるか、数バイトのサーバメモリを露出させました。露出した数バイトに秘密情報が在るように仕込む攻撃の可能性は排除しませんが、実現性は低いと見られます。(CVE-2015-5288)
</p>
<li>外側サブトランザクションに属するポータル（カーソル）が失敗した後のサブトランザクションのクリーンアップが修正されました。  (Tom Lane, Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
外側サブトランザクションのカーソルで実行された関数が、内側サブトランザクションで作られたリレーション（一時テーブル等）を参照することで、アサート失敗かクラッシュを引き起こすことがありました。
</p>
<li>commit_delay が有効であるとき WAL挿入の際にデッドロックする可能性があり、修正されました。  (Heikki Linnakangas) (9.4)</li>
<p></p>
<li>UPDATE実行時に更新可能ビューから参照されている全てのリレーションが適切にロックされるようになりました。  (Dean Rasheed) (9.4)(9.3)</li>
<p></p>
<li>リレーションのリレーションキャッシュinitファイルへの格納について修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
直近のマイナーリリースでの不注意により、システムインデックスpg_trigger_tgrelid_tgname_index が initファイルで除外されていました。その後のセッションでこのことが検出され、initファイルが壊れていると見なされ、initファイルが無視されます。この結果、新規接続での所要時間が顕著に劣化しました。
</p>
<p>
本バグ修正では加えて、将来の類似の誤りが見つかるようにする防止策がいくつか導入されました。
</p>
<li>SPIクエリ結果に多数の行を投入するとき、O(N^2) の所要時間を要する振る舞いを回避するようになりました。  (Neil Conway) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
SPIクエリで結果行数が多いSQLを実行した場合に該当します。これまで必要メモリを追加するのに固定増分での追加確保をしていたため、処理回数が不要に多くなっていました。
</p>
<li>読まれない通知が多数ある場合の LISTEN 開始の所要時間が改善されました。  (Matt Newell) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
LISTEN/NOTIFY利用時において、一部の遅れたリスナーのために通知が大量に溜まっている状態で新たなリスナーを加えると、それらの溜まった通知を読み飛ばしていくのに処理コストを要していました。
</p>
<li>多数の外部キー制約を変更したセッションでの性能問題が修正されました。  (Jan Wieck, Tom Lane) (9.4)(9.3)</li>
<p>
これは主に数千テーブルを持つデータベースのダンプをリストアするときに見られます。
</p>
<li>SSL再ネゴシエーションがデフォルトでは無効となりました。  (Michael Paquier, Andres Freund) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
理論的には SSL再ネゴシエーションを使うことは良い考えですが、実際のところ OpenSSLライブラリに起因するもの、PostgreSQLにおけるライブラリの使い方に起因するもの、の双方で多数の障害が見られました。
</p>
<p>
再ネゴシエーションは PostgreSQL 9.5 以降では削除されます。9.4 以前のバージョン系列では、postgresql.conf の ssl_renegotiation_limit のデフォルト値が無効を意味する 0 に変更されます。
</p>
<li>*_freeze_max_age パラメータの下限値が引き下げられました。  (Andres Freund) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
主としてこれらパラメータに関するテストで時間がかからないようにするためですが、少ないディスクスペースにインストールする際にも価値があるかもしれません。
</p>
<p><pre>
autovacuum_freeze_max_age               100000  →      10000
autovacuum_multixact_freeze_max_age  100000000  →  100000000 (9.3以降)
</pre>
<p>上記のように変更されました。
</p>
<li>サーバクラッシュを避けるため wal_buffers の上限を 2GB までに限定しました。  (Josh Berkus) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
巨大な値を指定したとき整数オーバーフローによるクラッシュをひき起こしていました。なお、上限値 2GB は、実際には INT_MAX / XLOG_BLCKSZ の計算結果です。XLOG_BLCKSZ はビルド時の --with-wal-blocksize 指定値 × 1024 となります。
</p>
<li>postgresql.conf の読み込みについて修正されました。  (Tom Lane) (9.4)(9.3)</li>
<p>
サーバ開始時にしか指定できないパラメータが postgresql.conf の中に複数回あらわれた場合に苦情がログ出力されないようになりました。pg_ctl reload を行ったときに以下のようなメッセージが出ていました。
</p>
<pre>
LOG:  parameter "..." cannot be changed without restarting the server
</pre>
<p>
また、postgresql.conf のエラーを報告する際に include_dir 指定の後では行番号が誤って出力されており、修正されました。
</p>
<li>NUMERIC 値の掛け算における稀な内部オーバーフローが修正されました。  (Dean Rasheed) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
NUMERIC型の掛け算の結果に誤った値が返る可能性がありました。
</p>
<li>レコード型、範囲型、json型、jsonb型、tsquery型、ltxtquery型、および、query_int型に関連する稀なスタックオーバーフローを防ぐようになりました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
欠けていた max_stack_depth 設定値を超えていないかのチェック処理が、これらデータ型の各処理箇所に加えられました。
</p>
<li>日付時刻の入力において DOW と DOY の扱いが修正されました。  (Greg Stark) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これらのトークンは日付時刻値では使えないはずですが、これまでは「invalid input syntax」でなく、意味の分からない内部エラーが出ていました。
</p>
<pre>
(以前の誤ったエラーメッセージ)
db1=# SELECT 'doy'::timestamptz;
ERROR:  unexpected dtype 33 while parsing timestamptz "doy"

(修正後の本来のエラーメッセージ)
db1=# SELECT 'doy'::timestamptz;
ERROR:  invalid input syntax for type timestamp with time zone: "doy"
</pre>
<li>正規表現照合中にクエリキャンセルのチェックをさらに追加しました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
正規表現処理がより迅速に中断要求に応じるようになります。
</p>
<li>正規表現、SIMILAR TO、LIKE の照合に再帰深度の保護が加えられました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ある種の検索パターンと低いスタック深度制限により、スタックオーバーランによるクラッシュに至るおそれがありました。
</p>
<li>正規表現の実行で無限ループをひき起こす可能性があり、修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
一見ゼロ長文字列にマッチするけれども実際は後方参照によりマッチしないという検索パターンで無限ループに至る可能性がありました。
</p>
<p><pre>
SELECT 'a' ~ '$()|^1';  -- f
SELECT 'a' ~ '.. ()|1'; -- f
SELECT 'a' ~ '()*1';    -- t
SELECT 'a' ~ '()+1';    -- t
</pre>
<p>修正前バージョンでは上記のパターンマッチで無限ループに陥ります。
</p>
<li>正規表現の実行で、たとえマッチがゼロ長であったとしても、数量指定を含む括弧で捕捉されたマッチデータを正しく記録するようになりました。  (Tom Lane) (9.4)(9.3)(9.2)</li>
<p></p>
<li>正規表現のコンパイルでメモリ不足によるクラッシュの可能性があり、修正されました。  (Andreas Seltenreich) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
メモリ取得に失敗した場合の処理に不備があり、メモリ不足状態のサーバにおいて、NULLポインタ参照によるクラッシュを招く可能性がありました。
</p>
<li>低確率で生じる正規表現の実行時のメモリリークが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>トランザクションがアボートした際のロック解放処理における、稀なメモリ不足時の障害が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
メモリ不足時にアサート失敗またはクラッシュをひき起こす可能性がありました。
</p>
<li>小さい work_mem設定でタプルストアを使用する場合に「unexpected out-of-memory situation during sort」エラーが生じる問題が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
タプルストアとは SQL処理過程で一時的にデータを保持する内部的な仕組みです。
</p>
<li>qsort におけるごく稀なスタックオーバーランが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ここでの qsort は、ソート処理の内部実装の一つで、いわゆるクイックソートを実装しています。本障害によりクラッシュの可能性がありました。
</p>
<li>大きな work_mem 設定でのハッシュ結合にて、無効なメモリ割り当て要求サイズでエラーになることがあり、修正されました。  (Tomas Vondra, Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
「ERROR: invalid memory alloc request size」をひき起こすことがありました。
</p>
<li>プランナ関連の各種障害が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これら誤りは、間違った応答を返したり、アサート失敗したり、奇妙なプランナエラーを出したりするであろう不適切なクエリ実行プランを導きます。
</p>
<pre>
(本障害のプランナエラー例)
 ERROR: could not devise a query plan for the given query
 ERROR: could not find pathkey item to sort
 ERROR: plan should not reference subplan's variable
 ERROR: failed to assign all NestLoopParams to plan nodes
</pre>
<li>大きな継承セットにおける UPDATE/DELETE のプランナ性能が改善しました。  (Tom Lane, Dean Rasheed) (9.4)(9.3)(9.2)</li>
<p>
これまで、継承テーブル数に対して O(N^2) 処理を要する箇所がありました。
</p>
<li>スタンバイ昇格トリガファイルがマスタプロセス(postmaster)起動時に確実に削除されるようになりました。  (Michael Paquier, Fujii Masao) (9.4)(9.3)(9.2)(9.1)</li>
<p>
新たなスタンバイサーバを作るためのデータベースバックアップにトリガファイルが含まれていた場合に、望まない昇格が起きるのを防ぎます。
</p>
<li>マスタプロセス(postmaster) がシャットダウンするとき、pidファイルが削除される前に、確実にソケット毎のロックファイルが削除され、リッスンソケットが閉じられるようになりました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
外部スクリプトが pg_ctl stop のすぐ後に PostgreSQL を起動した場合に、競合して起動に失敗するのを防ぎます。
</p>
<li>たとえ immediate シャットダウンであっても、全ての子プロセスがいなくなるまではマスタプロセス(postmaster) は終了しないようになりました。  (Tom Lane) (9.4)</li>
<p></p>
<li>クラッシュリカバリ中にクラッシュしたスタートアッププロセスの扱いが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
クラッシュリカバリ処理はスタートアッププロセスの中で行われます。これまで、データベース一貫性が無い状態でスタートアッププロセスがクラッシュした場合、新たにスタートアッププロセス起動を試みていましたが、これは通常は再度クラッシュすることになり、無限ループに至ります。
</p>
<p>
スタートアップ中のクラッシュの後は自動再起動せず、終了するようになります。
</p>
<li>マルチトランザクション周回に対する緊急自動VACUUM がより頑健になりました。  (Andres Freund) (9.4)(9.3)</li>
<p>
これまでは必要でも必ずしも自動VACUUM が駆動されないというケースがありました。
</p>
<li>シグナルを送ろうとしたら autovacuum worker プロセスが既にいなくなっていた場合に警告を出さないようになりました。また、自動VACUUM 関連シグナルのログ出力が減りました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
相手プロセスが居ない場合に「WARNING: could not send signal to process ...」が出ていました。 また、ロック競合した自動VACUUM をキャンセルする際に発生する「LOG: sending cancel to blocking autovacuum PID ...」メッセージが、DEBUG1 レベルに変更されました。
</p>
<li>サーバ時計が大きく戻ったときに、autovacuum launcherプロセスが過度に長く休止するのが防止されました。  (&Aacute;lvaro Herrera) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>GIN インデックスの挿入保留リストのクリーンアップがキャンセル要求により確実に割り込み可能になりました。  (Jeff Janes) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
このクリーンアップ処理は通常 GIN インデックスを持つカラムの INSERT、UPDATEで発生します。
</p>
<li>GIN インデックスで全てゼロのページが再利用可能になりました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
このようなページはクラッシュ後にできることがあります。これまで全てゼロのページは再利用されず、無駄に領域を占めていました。
</p>
<li>SP-GiST インデックスにおける全てゼロのページの扱いが修正されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)</li>
<p>
VACUUM でこのようなページを再利用しようとしますが、WAL出力を伴うクラッシュセーフな方法で処理していませんした。
</p>
<li>サブトランザクション、マルチトランザクションの切捨て処理が修正されました。  (Thomas Munro) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
「LOG: could not truncate directory "...": apparent wraparound」メッセージが不必要に出力されることがありました。なお、修正前においてもログメッセージを出す以外は無害です。
</p>
<li>PL/pgSQL エラーのコンテキストメッセージで CONTINUE と MOVE のステートメントタイプを誤って報告していたのが修正されました。  (Pavel Stehule, Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
CONTINUE であるべきところが EXIT と、MOVE であるべきところが FETCH と報告されていました。
</p>
<pre>
ERROR:  ...(何らかメッセージ)...
CONTEXT:  PL/pgSQL function myfunc() line 123 at FETCH (← この部分)
</pre>
<li>PL/Perl が非ASCII のエラーメッセージ文面を正しく扱うように修正されました。  (Alex Hunsaker) (9.4)(9.3)(9.2)(9.1)</li>
<p></p>
<li>PL/Python でレコード結果の文字列表現を返すときにクラッシュする障害が修正されました  (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p></p>
<li>PL/Tcl で malloc() 呼び出し失敗のチェックを怠っているいくつかの箇所が修正されました。  (Michael Paquier, &Aacute;lvaro Herrera) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>contrib/isn で 979 から始まる ISBN-13 番号の出力が修正されました。  (Fabien Coelho) (9.4)(9.3)(9.2)(9.1)</li>
<p>
(9790 ではなく) 979 から始まる EAN は ISBN と見做せますが、10桁形式ではなく、新しい13桁の形式で出力される必要がありました。
</p>
<pre>
(修正前)
db1=# SELECT ('9791234567896'::EAN13)::ISBN;
    isbn
-------------
 123456789-X
(1 row)

(修正後)
db1=# SELECT ('9791234567896'::EAN13)::ISBN;
      isbn
-----------------
 979-123456789-6
(1 row)
</pre>
<li>contrib/pg_stat_statements の問い合わせ文字列のガベージコレクションが改良されました。  (Peter Geoghegan) (9.4)</li>
<p>
問い合わせ文字列が格納される外部ファイルは巨大なサイズに膨らむことがありえました。これまではファイルサイズが一度 1GB を超えると読み込みできませんでした。このサイズ上限が引き上げられ、また、読み込み失敗したときにファイルをリセットするようになりました。
</p>
<li>contrib/postgres_fdw で照合関連の判定処理が改善されました。  (Tom Lane) (9.4)(9.3)</li>
<p>
目に見える変化としては、varcharカラムを含む比較が以前より多くのケースでリモートサーバに送られて実行されるようになります。
</p>
<li>libpq でメモリ不足状態のときの処理が改善されました。  (Michael Paquier, Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでそのように報告していなかった箇所でメモリ割り当てに失敗したときに「out of memory」とエラーメッセージを出すようになりました。
</p>
<li>ecpg でメモリリークと、メモリ不足ケースのチェックが欠けている箇所があり、修正されました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>psql でロケールを意識した数の出力形式について修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
「pset numericlocale on」を指定した場合に一部のケースで誤動作をしていました。
</p>
<pre>
(修正前の障害動作例)
=# pset numericlocale on
Locale-adjusted numeric output is on.

=# SELECT 1000000::real;
 float4
--------
 1e,+06
(1 row)

=# SELECT 10000::money;
    money
--------------
 $,10,,000.00
(1 row)
</pre>
<li>psql で現在の接続が無いときに c コマンドでクラッシュするのが防止されました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<pre>
(クラッシュ例 - サーバ側からの強制切断後に c 実行)

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.

!&gt; c db1 dbuser1 localhost 5432
セグメンテーション違反です (コアダンプ)
</pre>
<li>pg_dump が継承されたテーブルの NOT VALID の CHECK制約を正しく扱うようになりました。  (Tom Lane) (9.4)(9.3)(9.2)</li>
<p>
リストアするとエラーが生じる誤ったダンプを出力することがありました。
</p>
<li>pg_dump のディレクトリ出力フォーマットでデフォルトの zlib 圧縮レベル指定について修正されました。  (Andrew Dunstan) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまでマニュアルに記載された「中間レベル」ではなく、速さ優先の圧縮レベルがデフォルト動作になっていました。
</p>
<li>tarフォーマット出力の pg_dump で作られる一時ファイルのファイルモードが誰でも読み取り可能とならないようになりました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>pg_dump と pg_upgrade が postgres や template1 データベースがデフォルトテーブルスペース以外にある場合に対応するように修正されました。  (Marti Raudsepp, Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>pg_dump が旧バージョン PostgreSQL からのダンプでオブジェクト権限を正常に扱うように修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<p>
PostgreSQL 9.2 より前のサーバからデータ型をダンプするとき(※1)、あるいは、7.3 より前のサーバから関数や手続き言語をダンプするとき、pg_dump は、所有者の権限を剥奪して代わりに PUBLIC に全ての権限を与えるようなGRANT/REVOKE コマンドを出力していました。
</p>
<p>
該当するのは USAGE と EXECUTE 権限だけですのでセキュリティ問題ではありません。この場合はデフォルト権限状態のままにするように修正しました。
</p>
<pre>
※1 これは 9.2.x、9.3.x、9.4.x の場合のみ
</pre>
<li>pg_dump がシェル型をダンプするように修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
シェル型は未だ定義が無いプレースホルダとして名前だけ与えられたデータ型です。
</p>
<li>pg_dump ほかいくつかのクライアントプログラムで影響度の低いメモリリーク等が修正されました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)</li>
<p></p>
<li>クエリや pgbench自身が固まった場合の pgbench の進捗報告の振る舞いが修正されました。  (Fabien Coelho) (9.4)</li>
<p></p>
<li>Alpha アーキテクチャむけのスピンロックのアセンブリコードが修正されました。  (Tom Lane) (9.4)</li>
<p></p>
<li>PPC アーキテクチャむけのスピンロックのアセンブリコードが AIX のネイティブアセンブラに対応するように修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>AIX でこれまで単に使えるものと想定していた -qlonglong コンパイラオプションをテストするようになりました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>AIX で実行時にシンボル解決できるようにする -Wl,-brtllib リンクオプションを使うようになりました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>コンパイラバグのため 32bit xlc でインライン関数展開を使わないようになりました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>必要に応じて sched_yield() むけに librt を使うようになりました。いくつかの Solaris バージョンで該当します。  (Oskari Saarenmaa) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>UHC エンコーディングを Windows コードページ 949 として変換するようになりました。  (Noah Misch) (9.4)</li>
<p>
これにより、データベースに紐づかないプロセス(postmaster等)から非ASCII のログメッセージが出るのを修正しました。
</p>
<li>Windows でトランザクション外での UTF16 への文字エンコーディング変換(ログメッセージ用など) で失敗するのが防止されました。  (Noah Misch) (9.4)</li>
<p></p>
<li>setlocale() の返し値をコピーしないことによる、マスタープロセス(postmaster) の起動失敗が修正されました。  (Noah Misch) (9.4)</li>
<p>
本現象は ANSI コードページを CP936 (中国語 簡体字/PRC) に設定した Windows で報告され、他のマルチバイトコードページでも発生するとみられます。
</p>
<li>Windows の install.bat スクリプトについて、空白文字を含む対象ディレクトリ名の処理が修正されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>PostgreSQLバージョン番号の数値表現(90405 など) が、拡張モジュールのMakefile で VERSION_NUM 変数として利用可能になりました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p></p>
<li>タイムゾーンデータファイルが tzdata release 2015g に更新されました。   (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ケイマン島、フィジー、モルドバ、モロッコ、ノーフォーク島、北朝鮮、トルコ、ウルグアイの夏時間方式が変更されました。新しいタイムゾーン名としてカナダ・ノーザンロッキーの America/Fort_Nelson が加わりました。
</p>
<li>9.3 以降で加わったリソース所有者ごとのロックキャッシュが後方適用されました。  (Jeff Janes) (9.2)(9.1)</li>
<p>
pg_dump で多数のテーブルをダンプするときの性能を改善します。
</p>
<li>contrib/sepgsql の SELECT INTO 命令の扱いが修正されました。  (Kohei KaiGai) (9.2)</li>
<p></p>
<li>プランナにおけるあいまいパスコストの同点決勝ルールが後方適用されました。  (Tom Lane) (9.1)(9.0)</li>
<p>
本変更により、同コストプランの選択においてプラットフォーム固有の振る舞いを避けることができます。
</p>
</ol>
</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 9.0.22 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-22/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2015 01:00:09 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2051</guid>

					<description><![CDATA[このリリースは 9.0.21 からの修正リリース（2015年6月12日リリース）です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.18 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.21 からの修正リリース（2015年6月12日リリース）です。</p>
<p>9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-18/">9.0.18 に関する技術情報</a> を参照してください。</p>
<p><span id="more-2051"></span></p>
<h3>PostgreSQL 9.0.21 から 9.0.22 への変更点</h3>
<p>9.4.4、9.3.9、9.2.13、9.1.18、9.0.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。 各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。<br />
<hr />
<ol>
<li>一貫性のないデータベース状態からのリカバリに失敗する可能性があり、修正されました  (Robert Haas) (9.4) (9.3)</li>
<p>
最近のPostgreSQLリリースでマルチトランザクション周回を防ぐ仕組みが導入されましたが、実装の一部において発生する可能性をつぶせていませんでした。一貫性の無い状態データベースをクラッシュリカバリする際に漏れることがあります。この結果、クラッシュ後の再起動やスタンバイサーバの最初の起動に失敗する可能性がありました。バージョン 9.3.0 から 9.3.4 の pg_upgrade を使ったインストールでも、同様の障害をひき起こします。
</p>
<p>
pg_upgrade の誤りは、pg_control の oldestMultiXid をもっと大きい値にすべき場合でも 1 に設定していたことです。本リリースの修正後は、このような状況では緊急自動VACUUM となり、oldestMultiXid の正しい値が定まるまで実行されます。アップグレードを開始する前にあらかじめ VACUUM を実行しておくことで、このような動作を避けることができます。
</p>
<li>稀におきるリレーションキャッシュ初期化ファイル(pg_internal.init)の無効化失敗が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
同時実行のタイミングによっては、システムカタログの VACUUM FULL が、新たなセッションでキャッシュローディングを避けるのに使われる初期化ファイルの更新に、失敗することがありえました。結果として、後のセッションがそのシステムカタログにまったくアクセスできなくなってしまいます。
</p>
<p>
障害発生時には「cache lookup failed」や「could not open file」といったエラーが発生すると考えられ、解消には pg_internal.init ファイルを手動で削除するほかありません。
</p>
<li>新たなセッション開始と CREATE/DROP DATABASE のデッドロックを回避するようになりました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
DROP DATABASE で削除するデータベースや、CREATE DATABASE でテンプレートに使うデータベースに新たなセッションを開始すると、これらコマンドは 5秒待って（競合するセッションがその前に終了していたとしても）エラーになっていました。
</p>
<li>内側のインデックススキャンを伴う semi-join、anti-join についてプランナのコスト見積もりが改善されました。  (Tom Lane, Tomas Vondra) (9.4)(9.3)</li>
<p>
全ての結合節がインデックススキャン条件として使われている場合、たとえ内側スキャンが見かけ上多数の行を読み出すとしても、エグゼキュータは一行を取得した後に止まるので、低コストなプランとなります。
</p>
<p>
プランナはこの効果について部分的にしか考慮しておらず、結果としてコストを過大評価して、劣った別のプランが選択される原因となっていました。
</p>
</ol>
</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 9.0.21 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-21/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 04 Jun 2015 01:00:11 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2107</guid>

					<description><![CDATA[このリリースは 9.0.20 からの修正リリース(2015年6月4日リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.18 より前のバージョンからアップデートを行う場合は 9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.20 からの修正リリース(2015年6月4日リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-18/">9.0.18 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2107"></span></p>
<h3 class="background">PostgreSQL 9.0.20 から 9.0.21 への変更点</h3>
<p>9.4.3、9.3.8、9.2.12、9.1.17、9.0.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>クラッシュ後の再起動でデータディレクトリに fsync をかけるときの失敗を回避するようになりました。  (Abhijit Menon-Sen, Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
一つ前のマイナーリリースで、クラッシュ後にデータディレクトリ内の全てに fsync をかける修正が加わりましたが、これは全ての状況に対応できていませんでした。これにより、無害な問題であってもサーバの起動が妨げられてしまいます。
</p>
<p>
具体的には、書き込み不能なファイルが含まれていた場合に一部プラットフォームでは再起動できなくなってしまいます。とはいえ、サーバで SSL証明書ファイルを書き込み不能にするのは一般的です。
</p>
<p>
本修正は改定され、全体的にパーミッションによる失敗は無視されるようになりました。また、他の失敗もログ出力されますが、処理の継続は止めないようになりました。
</p>
<p>
PostgreSQL 9.4系については、重要度は低いですが同様に振る舞うべきであるため、initdb の --sync-only オプションも同じ規則で動作するようになりました。
</p>
<li>pg_get_functiondef() 関数が、設定されているならLEAKPROOF属性を出力するように修正されました。  (Jeevan Chalke) (9.4)(9.3)(9.2)</li>
<p>
pg_get_functiondef() 関数は psql の ef コマンドで使われます。
</p>
<li>内部実装用の pushJsonbValue()関数が jbvBinaryオプジェクトを展開するように修正されました。  (Andrew Dunstan) (9.4)</li>
<p>
jbvBinary とは JSONBデータ型の内部格納データ区分の一つです。本変更による PostgreSQL本体の振る舞い変更はありませんが、拡張モジュールからの呼び出しにおける例外的な問題ケースを回避します。
</p>
<li>configure の OpenBSD におけるスレッド対応したlibpythonへのリンクを禁止する検査が除去されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
最近のテストでは問題なく動作しており、禁止する必要がないと判断されました。
</p>
<li>libpq で TLSプロトコルバージョン v1 以上が利用可能になりました。  (Noah Misch) (9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで libpq は SSLプロトコルとして TLS v1 のみが使えました。現在ではより新しいバージョンが一般的です。PostgreSQLサーバでは既に対応しており、サーバ側の変更はありません。
</p>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 9.0.20 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-20/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 22 May 2015 01:00:45 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2133</guid>

					<description><![CDATA[このリリースは 9.0.19 からの修正リリース(2015年5月22日リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.19 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.19 からの修正リリース(2015年5月22日リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.19 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-19/">9.0.19 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2133"></span></p>
<h3 class="background">PostgreSQL 9.0.19 から 9.0.20 への変更点</h3>
<p>9.4.2、9.3.7、9.2.11、9.1.16、9.0.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>認証タイムアウトになる直前にクライアントが切断した時に、クラッシュする可能性が回避されました。  (Benkocs Norbert Attila) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
タイムアウトの割り込みが、セッション切断処理中に発生すると、SSL 関連情報が二重解放されクラッシュし、その結果、他のセッションへの DoS となります。実験では認証されていないリモート攻撃者が、一貫してバグを引き起こすことが可能なため、セキュリティ上の問題として扱っています。(CVE-2015-3165)
</p>
<li>システムコール失敗の判定が改善されました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
snprintf() などの代替実装では、下位のシステムライブラリ呼び出しでのエラーチェックに間違いがありました。主な問題は、メモリ不足の状況での対応不足にあります。最悪の場合、実装コードでは、バッファが上書きされていないのに、上書きされたとみなすことにより、情報が漏洩する可能性があります。
</p>
<p>
他の *printf() ファミリ関数呼び出しにも、悪い時にメモリ不足を起こすと、情報漏洩する脆弱性が残っている可能性があります。開発コミュニティは、大きなリスクではないと判断していますが引続き解析を続けるとのことです。(CVE-2015-3166)
</p>
<li>contrib/pgcrypto の復号失敗時のメッセージを、間違ったキーか不正なデータかによらず統一しました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
以前は、間違ったキーによる復号では、異なったエラーメッセージが報告されていました。その様なエラーメッセージの違いは、他のシステムを使ってキーを見つけようとする攻撃者への助けになることが知られています。pgcrypto のこの振る舞いが攻撃に利用できるかは不明ですが、単一のメッセージを使う方が、リスクを避けるのに良いと考えられます。(CVE-2015-3167)
</p>
<li>マルチトランザクションID 処理の周回対策が行われました。  (&Aacute;lvaro Herrera, Robert Haas, Thomas Munro) (9.4)(9.3)</li>
<p>
特定の利用パターンだと、既存の対策が不十分なため pg_multixact/members ファイルが早くに削除されてしまい、結果としてデータを損失します。<br />
サーバ側修正として、古いマルチトランザクションメンバ ID を上書きしそうな場合、トランザクションを「multixact "members" limit exceeded」エラーで失敗させるようになります。<br />
autovacuum の改良として、トランザクション ID の周回と同様、マルチトランザクション ID の周回防止の活動を行なうようになります。
</p>
<li>contrib/citext モジュールの regexp_matches() 関数の間違っていた宣言が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)</li>
<p>
この関数は text 型に対する定義と同様に citext型に対しても setof text[] を返すべきですが、text[] を返すように宣言されていました。このため、マッチしない場合に 0 行が返るのでなく NULL が返る、'g' フラグを指定しても実質的には無視される、という振る舞いになっていました。
</p>
<pre>
db1=# SELECT id, v AS v_is_citext FROM t5;
 id |  v_is_citext
----+----------------
  1 | pgsql is PGSQL
  2 | pgSQL
(2 rows)

db1=# SELECT id, regexp_matches(v, 'xxxxx'::citext) FROM t5;
【本来期待された振る舞い】
 id | regexp_matches
----+----------------
(0 rows)

【これまでの振る舞い】
 id | regexp_matches
----+----------------
  1 |
  2 |
(2 rows)

db1=# SELECT id, regexp_matches(v, 'pgsql'::citext, 'g') FROM t5;
【本来期待された振る舞い】
 id | regexp_matches
----+----------------
  1 | {pgsql}
  1 | {PGSQL}
  2 | {pgSQL}
(3 rows)

db1=# SELECT id, regexp_matches(v, 'pgsql'::citext, 'g') FROM t5;
【これまでの振る舞い】
 id | regexp_matches
----+----------------
  1 | {pgsql}
  2 | {pgSQL}
(2 rows)
</pre>
<p>
これまでの振る舞いに依存するアプリケーションが存在する可能性があるため、デフォルトの宣言は PostgreSQL 9.4 以前では変更されません。9.4 以前では、従来の宣言は拡張モジュールのバージョン 1.0 として提供され、正しい宣言は拡張モジュールのバージョン 1.1 として提供されます。以下のようにしてバージョン 1.1 に上げることができます。
</p>
<pre>
db1=# ALTER EXTENSION citext UPDATE TO '1.1';
db1=# dx
                           List of installed extensions
  Name   | Version |   Schema   |                   Description
---------+---------+------------+--------------------------------------------------
 citext  | 1.1     | public     | data type for case-insensitive character strings
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)
</pre>
<li>json 型への変換で、無限大の日付や時刻はエラーにせず 'infinity' にするようになりました。  (Andrew Dunstan) (9.4)</li>
<li>json/jsonb の populate_record() と to_record() 関数が、空の入力を正しく扱うようになりました。  (Andrew Dunstan) (9.4)</li>
<li>HOT 更新後の遅延された排他制約の誤った検査が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
本来は無視されるべき排他制約違反が報告されることがありました。
</p>
<p>
遅延された排他制約に違反する可能性のある新しい行が同トランザクションで後に HOT更新された場合、後に削除される行が新たな行と当初に衝突していた場合でも、排他制約違反が最後のチェックで報告されることがありえました。
</p>
<li>ALTER TABLE ... ALTER CONSTRAINT で外部キー制約の遅延可能状態を変更するときの振る舞いが修正されました。  (Tom Lane) (9.4)</li>
<p>
これまで、後に続く同セッションでの操作、または同時実行の別セッションにて、変更を即座に尊重しないことがありました。
</p>
<li>スタースキーマ式クエリのプラン作成が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)</li>
<p>
大きなテーブルの効果的なスキャンでは、インデックスパラメータが複数の結合テーブルから提供されることがしばしば必要となります。プランナはこのような計画を発見できないといけませんが、これまで、あまりに制限的なヒューリスティック検索がこれを妨げていました。
</p>
<p>
t10_fact が行数の非常に多いテーブル、t10_dim_a と t10_dim_b が行数の少ないテーブルであるとしたときの、以下のようなクエリであって、a.c1 = 1 と b.c1 = 2 の二つの条件で選択行を大幅に限定できるという場合が該当します。
</p>
<pre>
SELECT * FROM t10_fact f, t10_dim_a a, t10_dim_b b
  WHERE f.aid = a.id AND f.bid = b.id AND a.c1 = 1 AND b.c1 = 2;
</pre>
<li>他の外部結合に対する anti-join (NOT EXISTS 結合) の不適切な配置換えを防止するようになりました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
プランナにおける本障害により「could not find RelOptInfo for given relids」エラーがあらわれます。しかし時には、誤ったクエリプランが一貫性チェックをパスして、エラーを出すことなく誤ったクエリ実行結果を返す可能性もあります。
</p>
<li>外部結合プランノードでの部分式の誤ったマッチングが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでは、外形上同一の STRICT でない(すなわち NULL入力が認められる) 部分式が外部結合の上位と下位とで使われているとき、プランナが結合の下位で計算した値を再利用しようとすることがありました。<br />エグゼキュータは外部行にマッチしない場合は値を NULL にするため、これは誤った動作でした。
</p>
<p>
以下に障害動作例を示します。
</p>
<pre>
db1=# CREATE TABLE t12 (c1 int, c2 int);
db1=# INSERT INTO t12 VALUES (1,NULL),(NULL,2);
db1=# SELECT a.c1 AS a_c1, b.c2 AS b_c2 FROM t12 a
        LEFT JOIN t12 b ON a.c2 = coalesce(b.c1, 1)
        WHERE coalesce(b.c1, 1) &gt; 0;
【9.4.2 での結果】
 a_c1 | b_c2
------+------
      |
    1 |
(2 rows)

【9.4.1 での誤った結果】
 a_c1 | b_c2
------+------
(0 rows)
</pre>
<li>結合順序のヒューリスティック手法が失敗した場合に対応できるように GEQO プランナが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
本障害により、LATERALを含むクエリでエラー「failed to join all relations together」が出ます。また、その他の場合でも発生する可能性があります。
</p>
<li>UPDATE、DELETE 対象がセキュリティバリアビューであるとき、適切に行ロックが確実に生じるように修正されました。  (Stephen Frost) (9.4)</li>
<p>
これまで行ロック処理が欠落してしまうことがありました。
</p>
<li>PostgreSQL 起動時にレプリケーションスロットのデータを同期するとき、ファイルを read/write で開くようになりました。  (Andres Freund) (9.4)</li>
<p>
一部のプラットフォームでは、これまでのコードでは「could not fsync file "pg_replslot/...": Bad file descriptor.」というエラーをひき起こしていました。
</p>
<li>max_prepared_transactions が小さすぎる場合に PostgreSQL 起動時のデッドロックの可能性があり、修正されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
未コミットのプリペアドトランザクションよりも小さい max_prepared_transactions を指定して、再起動すると、PostgreSQL のマスタプロセスが残ったまま起動に失敗する例が報告されました。
</p>
<li>タイムラインが切り替わった後に使えない事前割り当てされた WAL ファイルをアーカイブしないようになりました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>クラッシュ後に再帰的にデータディレクトリの fsync() を行うようになりました。  (Abhijit Menon-Sen, Robert Haas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これにより、別のシステムレベルのクラッシュがすぐ後に起きた場合でも、一貫性を確実にします。
</p>
<li>autovacuum ランチャープロセスが、SIGTERM シグナルを受け取った後にエラーが起きた場合に、シャットダウンに失敗していたものが修正されました。  (&Aacute;lvaro Herrera) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>セッション開始初期のシステムカタログに対する無効化メッセージの扱いが修正されました。  (Tom Lane) (9.4)</li>
<p>
本障害は システムカタログに対する VACUUM FULL を同時に開始するセッションで失敗をひき起こしていました。
</p>
<li>BackendIdGetTransactionIds() で、ちょうど終了したバックエンドプロセスの状態取得を試みたときのクラッシュが修正されました。  (Tom Lane) (9.4)</li>
<li>LockBufferForCleanup() での予期せぬシグナルに対処するようになりました。  (Andres Freund) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
この誤りは「multiple backends attempting to wait for pincount 1」という偽性の（本来はエラーではない）エラーをひき起こしていました。
</p>
<p>
なお、ピンとはバッファページに対するアクセスを排他制御する内部的なロック機構の一つです。
</p>
<li>行全体を参照するチェック制約の付いたテーブルに対する COPY IN 実行時のクラッシュが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)</li>
<p>
クラッシュすることが知られているのは 9.4 以上だけですが、同様のコードが 9.3、9.2 にあるため、合わせて修正されています。
</p>
<pre>
(障害再現例)
db1=# CREATE TABLE t23 (id int primary key , c1 int, c2 int);
db1=# CREATE FUNCTION check_con_func(t23) RETURNS boolean
  LANGUAGE plpgsql IMMUTABLE AS $$ BEGIN RETURN ($1.c1 &gt; 0); END $$;
db1=# ALTER TABLE t23 ADD CHECK (check_con_func(t23.*));
db1=# COPY check_con_tbl FROM STDIN;
&gt;&gt; 0      0       0
&gt;&gt; 1      1       1
&gt;&gt; .
server closed the connection unexpectedly
</pre>
<li>read-only であるトランザクションのコミットでは、そのユーザに限り、WAL フラッシュや同期レプリケーションを待たないようになりました。  (Andres Freund) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでは（参照処理でも）HOT ページ掃除のために WALを書くトランザクションにおいて遅延がありえ、全スタンバイがダウンしている場合には、固まってしまいました。また、同期レプリケーションのときのキャッチアップ割り込み処理でも固まることがありました。本修正はこれらの問題を解消します。
</p>
<li>recovery_min_apply_delay に短い時間が設定されているときのビジーウェイトを回避するようになりました。  (Andres Freund) (9.4)</li>
<p>
ミリ秒以下の遅延設定は無視されるようになります。
</p>
<li>一時テーブル上のハッシュインデックスを操作するときに生じるクラッシュが修正されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>他プロセスが同時にインデックスを変更している場合、ハッシュインデックスのバケツ分割に失敗する可能性があり、修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>GIN インデックスの VACUUM におけるメモリリークが修正されました。  (Heikki Linnakangas) (9.4)</li>
<li>インデックス式の ANALYZE 中に割り込みをチェックするようになりました。  (Jeff Janes) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ANALYZE ではインデックスの式を多数実行します。この式の中に遅い関数があった場合、ANALYZE を処理ループが終わる前にキャンセルできることが望まれます。
</p>
<li>行ロック後に READ COMMITTED 再チェックが生じたときに、外部テーブルのテーブルOID が確実に正しく報告されるようになりました。  (Etsuro Fujita) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで外部テーブルのテーブルOID には無効な値が設定されていましたが、上記ケースでは意味のある値が必要とされ、適切に動作しませんでした。
</p>
<li>外部サーバユーザマッピングのオブジェクト説明文字列にターゲットサーバ名が追加されました。  (&Aacute;lvaro Herrera) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
出力メッセージにあらわれる「user mapping for {ユーザ名}」が、「user mapping for {ユーザ名} on server {サーバ名}」となります。
</p>
<li>符号化方式変換オブジェクトのオブジェクト識別文字列にスキーマ名が含まれるようになりました。  (&Aacute;lvaro Herrera) (9.4)(9.3)</li>
<li>Kerberos/GSSAPI/SSPI 認証でオプション設定に include_realm=1 を推奨するようになりました。  (Stephen Frost) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ドキュメントのみ修正されています。PostgreSQL 9.5 からデフォルトで include_realm=1 となる予定です。
</p>
<li>IPv4 の pg_hba.conf 項目を IPv4-in-IPv6 アドレスと照合する機能が除去されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
本機能は 2003年に追加されましたが、9.0 で適切に動作していませんでした。この壊れたコードが一部のシステムでクラッシュをひき起こすことが報告されました。
</p>
<li>実際には起動しなかったバックグラウンドワーカが終了したときの状態報告が修正されました。  (Robert Haas) (9.4)</li>
<p>
拡張モジュール作成用の API の動作変更となります。GetBackgroundWorkerPid() の応答が変更されました。
</p>
<li>データベースクラッシュ後、BGW_NEVER_RESTART 属性が指定されているバックグラウンドワーカは再起動しないようになりました。  (Amit Khandekar) (9.4)</li>
<p>
PostgreSQLソースコードに含まれる機能や拡張モジュールの中で、contrib/worker_spi と contrib/test_shm_mq 以外で本変更の影響を受けるものはありません。
</p>
<li>レプリケーションコマンド IDENTIFY_SYSTEM の応答で WAL 挿入でなく、WALフラッシュの位置を報告するようになりました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これにより pg_receivexlog が、取得しようとしたデータがまだ WALファイルに書き込まれていないことで、起動失敗する可能性を回避します。
</p>
<li>Windows でサービス停止するときに、サービスが早くに強制終了されてしまうのを防ぐために、サービスコントロールマネージャに周期的に状態を送るようになりました。  (Krystian Bigaj) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
また、pg_ctl が確実にシャットダウンを待つようになりました。
</p>
<li>libpq でノンブロッキングモードを使うときのネットワークデッドロックの危険性が軽減されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
大きいデータを送るとき、サーバが出力をブロックするほどの応答データを送ってくることに備えて、入力バッファが時々に捌けることが重要となります。典型的なシナリオは、サーバが COPY FROM STDIN の実行中に連続して NOTICE メッセージを送ってくる場合です。このとき、通常のブロッキングモードなら問題ありませんが、ノンブロッキングモードの場合、デッドロックの危険性があります。
</p>
<p>
libpq は日和見的に可能であれば入力を排出するように修正されました。完全にネットワークデッドロックを防ぐためには、アプリケーションの協力が必要です。アプリケーションは write-ready 状態だけでなく、read-ready に気を付けなければならず、read-ready 状態で確実に PQconsumeInput() を呼ばなければいけません。
</p>
<li>libpq でURI接続文字列の空値の解析の誤りが修正されました。  (Thomas Fanghaenel) (9.4)(9.3)(9.2)</li>
<p>
1文字分の配列オーバーラン参照が生じていました。クライアント側のメモリ読み取りであり、セキュリティ上の危険性はありません。
</p>
<li>ecpg で配列の扱いが修正されました。  (Michael Meskes) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
一次元配列について C 言語の配列へのマッピングがサポートされました。
</p>
<li>psql が connect の最初の引数として URI と接続文字列を正常に扱えるように修正されました。  (David Fetter, Andrew Dunstan, &Aacute;lvaro Herrera) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
本構文はドキュメント化されていませんが、永らく受け入れられてきました。本修正でドキュメント記載されました。
</p>
<p>
本構文を使った場合に、一部のパラメータで与えられた値でなく旧の接続の値が使われる誤りがあり、修正されました。
</p>
<pre>
(本構文の実行例)
postgres=# connect "dbname=db1 user=postgres"
You are now connected to database "db1" as user "postgres".
db1=# c postgresql://localhost:5432/db2
You are now connected to database "db2" as user "postgres" on host "localhost"
at port "5432".
db2=#
</pre>
<li>一部プラットフォームにおいて、終了時に ~/.psql_history を書くのに失敗した、という psql の誤ったメッセージを抑止するようになりました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
この誤動作は 2006 年以前の古いバージョンの libedit の障害を回避するために生じていました。回避策のコードを除去することで修正しました。そのため、古い libedit では再び問題が生じます。libedit をバージョンアップをするか、libreadline を使うことを推奨します。
</p>
<li>pg_dump にて、システム提供されたダンプ不要のキャストを判断する規則が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
キャスト名が「pg_」で始まっているかではなく、キャストの OID で判断するようになりました。
</p>
<li>pg_dump で -Fd が指定されたとき -Z で指定した圧縮レベルを尊重するように修正されました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)</li>
<p>
修正前には常にデフォルト圧縮レベルになっていました。
</p>
<li>pg_dump がダンプ順序の選択において、拡張モジュールの設定テーブル間の外部キー関係を考慮するようになりました。  (Gilles Darold, Michael Paquier, Stephen Frost) (9.4)(9.3)(9.2)(9.1)</li>
<p>
本修正前では、一過性の外部キー制約違反によりダンプ読み込み失敗をひき起こすことがありました。
</p>
<li>同時実行で一時関数の作成削除をしている場合に pg_dump が失敗する可能性があり、これを防ぐようになりました。  (Tom Lane) (9.4)(9.3)</li>
<li>定義が VALUES (...) だけでカラム別名を持つビューのダンプが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで、ダンプ内容からカラム名が欠落してしまっていました。
</p>
<li>ダンプ／リストアでビューのレプリケーション識別(pg_class.relreplident) が確実に正しく 'n' (REPLICA_IDENTITY_NOTHING) になるように修正されました。  (Marko Tiikkaja) (9.4)</li>
<p>
これまで、ビューが循環依存している場合、レプリケーション識別属性がおかしくなることがありました。
</p>
<li>pg_upgrade で新データベースクラスタのタイムラインを強制的に 1 にするようになりました。  (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
この変更は、WALヒストリファイルが無いという誤ったエラーによるアップグレード失敗を防ぎます。
</p>
<li>pg_upgrade で不適切な接続不能データベースが無いか検査するようになりました。  (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>pg_upgrade で生成される delete_old_cluster スクリプトの中でディレクトリパスを適切にクオートするようになりました。  (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>pg_upgrade でデータベースレベルの凍結情報を適切に保持するようになりました。  (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
postgres データベースと template1 データベースにて pg_database.datfrozenxid と pg_database.datminmxid が維持されていませんでした。アップグレード後、これらデータベース上のテーブルやインデックスにアクセスすると、pg_clog 下のファイルが無いというエラーをひき起こしていました。
</p>
<li>Windows 上で pg_upgrade と pg_resetxlog を制限された権限で実行するようになりました。  (Muhammad Asif Naeem) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これにより、Administratorユーザから実行されても失敗しなくなります。これまで「Permission denied」が出て失敗するケースが報告されていました。
</p>
<li>initdb と pg_basebackup でディレクトリを読み取るときに readdir() が失敗した場合の扱いが改善されました。  (Marco Nenciarini) (9.4)(9.3)(9.2)(9.1)</li>
<p>
readdir()システムコールが設定する errno 変数値が失われないように修正されました。エラーメッセージに失敗理由が正しく表示されるようになります。
</p>
<li>contrib/intarray モジュールの遅いソートアルゴリズムが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでは挿入ソートで実装されていて、最大で  O(N^2) の処理時間を必要としていました。クイックソートで置き換えられました。
</p>
<li>SPARC V8 機でのコンパイル失敗が修正されました。  (Rob Rowan) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>OS X でビルドする際のいくつかの警告が出なくなりました。  (Tom Lane) (9.4)(9.3)</li>
<li>タイムゾーンデータファイルが tzdata release 2015d に更新されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
エジプト、モンゴル、パレスチナにおける夏時間規則の変更、カナダ、チリの歴史的変更、America/Adak の時間帯省略形の改定（HAST/HADT でなく HST/HDT となる）が、適用されています。
</p>
<li>pg_receivexlog の障害が修正されました。  (Andres Freund) (9.2)</li>
<p>
9.2.10 で障害が入りこみ、エラー「could not create archive status file」をひき起こしていました。
</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.0.19 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-19/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 05 Feb 2015 01:00:08 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2226</guid>

					<description><![CDATA[このリリースは 9.0.18 からの修正リリース(2015/2/5リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.18 より前のバージョンからアップデートを行う場合は 9. ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.18 からの修正リリース(2015/2/5リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.18 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-18/">9.0.18 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2226"></span></p>
<h3 class="background">PostgreSQL 9.0.18 から 9.0.19 への変更点</h3>
<p>9.4.1、9.3.6、9.2.10、9.1.15、9.0.19 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>to_char() 関数のバッファオーバーランが修正されました。  (Bruce Momjian) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
桁数の大きい数値を書式整形するとき、バッファ終端を超えた場所を読み取ってしまうことがありえました。また、作りこまれたタイムスタンプ出力書式において、バッファ終端を超えた位置に書き込むことがあえりました。どちらの場合もバックエンドプロセスのクラッシュを引き起こします。本障害を利用した攻撃での権限昇格の可能性も排除できません。
</p>
<p>
本セキュリティ障害は CVE-2015-0241 として登録されています。
</p>
<li>内部的に使われる *printf() 置き換え関数群でバッファオーバーランが修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
PostgreSQL 実装には printf などの置き換え関数が含まれています。その中で浮動小数点値の整形（指定子 'e'、'E'、'f'、'F'、'g'、'G'）をおよそ 500 以上の精度を指定して行うとき、スタックのバ<br />
ッファオーバーランが生じ、バックエンドプロセスのクラッシュをひき起こします。本障害を利用した攻撃での権限昇格の可能性も排除できません。PostgreSQLコア機能の他、printf族を利用している拡張モジュールにも影響があります。
</p>
<p>
本障害は主として Windows 上で影響があります。Windows においてこれらの置き換え関数が使用されます。 PostgreSQL は適切なシステム実装がある場合には、置き換え関数群でなく、システム実装の関数を使用します。
</p>
<p>
本セキュリティ障害は CVE-2015-0242 として登録されています。
</p>
<li>拡張モジュール contrib/pgcrypto のバッファオーバーランが修正されました。  (Marko Tiikkaja, Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
pgcrypto モジュールにてメモリサイズ追跡の誤りにより、スタックのバッファオーバーランと未初期化メモリ内容への依存が生じる余地がありました。本バッファオーバーランはバックエンドプロセスのクラッシュをひき起こします。本障害を利用した攻撃での権限昇格の可能性も排除できません。
</p>
<p>
本セキュリティ障害は CVE-2015-0243 として登録されています。
</p>
<li>エラー後に PostgreSQLプロトコルの同期が失われる可能性があり、修正されました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
バックエンドプロセスがクライアントからのメッセージを読んでいる途中に何らかエラーが起きた場合、同期が失われ、メッセージの一部分を新たなメッセージとして解釈しようと誤って試みられます。この障害により、攻撃者がコマンドパラメータ中に作りこまれたバイナリデータを送り出すことで、SQL インジェクションを実現できる可能性がありました。
</p>
<p>
本障害ケースをひき起こす「プロトコル処理途中でのエラー」は、代表的には、ステートメントタイムアウトや問い合わせのキャンセルです。タイムアウトを使用していて、かつ、任意のユーザ作成バイナリデータをクエリパラメータで渡せるアプリケーションにおいて、特に脆弱性が生じます。ステートメントタイムアウトを使わないことで完全ではありませんがリスクを軽減できます。
</p>
<p>
本セキュリティ障害は CVE-2015-0244 として登録されています。
</p>
<li>制約違反エラーメッセージを通した情報漏洩が修正されました。  (Stephen Frost) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ユニーク制約違反など、いくつかのサーバエラーメッセージで制約違反した値を出力しています。ユーザが SELECT 権限を持たないとすれば、見ることができないはずの値が見えてしまうことになります。
</p>
<p>
本セキュリティ障害は CVE-2014-8161 として登録されています。
</p>
<pre>
(権限のあるユーザでエラーを出すと、従来通り値も表示される)
db1=# INSERT INTO t1 VALUES (0, 'XX'), (1, 'XX'), (2, 'XX');
ERROR:  duplicate key value violates unique constraint "t1_pkey"
DETAIL:  Key (id)=(1) already exists.

(INSERT 権限はあっても SELECT 権限のないユーザでは、値が表示されないようになる)
db1=&gt; SELECT * FROM t1;
ERROR:  permission denied for relation t1

db1=&gt; INSERT INTO t1 VALUES (0, 'XX'), (1, 'XX'), (2, 'XX');
ERROR:  duplicate key value violates unique constraint "t1_pkey"
</pre>
<li>Windows 上で回帰テスト用の一時的なインスタンスへのアクセスが制限されました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
SSPI 認証を使うことでテストを起動した OS ユーザのみが接続できるようになりました。これまで他のユーザがテスト中の PostgreSQL に接続することができました。
</p>
<p>
本セキュリティ障害は CVE-2014-0067 として登録されています。
</p>
<li>Windows ロケール名「Norwegian (Bokm&aring;l)」に対応しました。  (Heikki Linnakangas) (9.4)(9.3)(9.2)</li>
<p>
非アスキー文字のロケール名はエンコーディングが定まらないと判別できない問題があります。「Norwegian (Bokm&aring;l)」は、ASCII 文字だけで表現される別名「Norwegian_Norway」にマップされます。9.4.0 では「norwegian-bokmal」にマップしていましたが、これは全ての Windows で利用可能な名称ではありませんでした。
</p>
<li>EvalPlanQual処理で解放済みメモリを参照してしまう障害が修正されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
EvalPlanQual処理は、READ COMMITTED トランザクション隔離モードでの行の削除・更新・ロックで使われる内部的な仕組みです。
</p>
<p>
READ COMMITTED トランザクション隔離モードで、行ロックまたは UPDATE を最近更新した行に対して行うとき、バックエンドプロセスがクラッシュする可能性がありました。
</p>
<li>行ロック取得を試みるときの EvalPlanQual処理においてデッドロックになる可能性があり、修正されました。  (&Aacute;lvaro Herrera, Mark Kirkwood) (9.4)(9.3)</li>
<li>複数の他トランザクションが同時に FOR SHARE 行ロックを保持している中で、トランザクションが FOR NO KEY UPDATE 行ロックの取得を試みて待つのに失敗してしまう障害が修正されました。  (&Aacute;lvaro Herrera) (9.4)(9.3)</li>
<p>
後からの FOR NO KEY UPDATE 行ロックの取得で、本来ブロックされるべきところ、取得できてしまう動作ケースがありました。
</p>
<li>テーブルやカラムが多数あるクエリに対する EXPLAIN の性能が改善されました。  (Tom Lane) (9.4)(9.3)</li>
<li>jsonb データ型における Unicode エスケープについて修正され、結論として u0000 は使用できなくなりました。  (Tom Lane) (9.4)</li>
<p>
9.4.0 バージョンでは JSON の Unicode エスケープ「u0000」は受け付けられ6文字のデータとして格納されていました。このことは「\u0000」が入力された場合と区別がつかず、さらに、-&gt;&gt; 演算子などで文字列型に変換して出力するときに「u0000」とエスケープを残した形で出力され、一貫性に欠けた振る舞いになります。一方で PostgreSQL は文字列に x00 を含めることができません。
</p>
<p>
jsonb型への入力で「u0000」は受け付けないものとなりました。既に格納されているデータは「\u0000」が格納されているものとして扱われます。
</p>
<p>
json型では引き続き「u0000」の格納を受け付けます。これは、たとえデータベース文字エンコーディングが UTF8 でなくとも 非ASCII の Unicode エスケープを受け付けるのと同じことです。ただし、テキスト出力時の例外処理は無くなります。
</p>
<pre>
db1=# SELECT '["u0041"]'::json -&gt;&gt; 0;
 ?column?
----------
 A
(1 row)

(9.4.0 の場合)

db1=# SELECT '["u0000"]'::jsonb -&gt;&gt; 0; -- 例外的な出力になる
 ?column?
----------
 u0000
(1 row)

(9.4.1 の場合)

db1=# SELECT '["u0000"]'::jsonb;            -- jsonb型には格納も不可
ERROR:  unsupported Unicode escape sequence

db1=# SELECT '["u0000"]'::json;             -- json型なら格納はできる
    json
------------
 ["u0000"]
(1 row)

db1=# SELECT '["u0000"]'::json -&gt;&gt; 0;  -- テキスト出力ではエラーになる
ERROR:  unsupported Unicode escape sequence
DETAIL:  u0000 cannot be converted to text.
</pre>
<li>xpath() 関数の名前空間の扱いが修正されました。  (Ali Akbar) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで、xpath() 呼び出しから返される XML値は、入力 XML値の祖先要素に名前空間宣言が付加されていたとしても、名前空間宣言を持ちませんでした。修正で祖先要素の宣言が反映されるようになりました。
</p>
<pre>
db1=# SELECT xpath('//loc:piece',
 $$
 &lt;local:data xmlns:local="http://127.0.0.1/"&gt;
  &lt;local:piece id="1"&gt;number one&lt;/local:piece&gt;
  &lt;local:piece id="2" /&gt;
 &lt;/local:data&gt;
 $$,
 ARRAY[ARRAY['loc', 'http://127.0.0.1/']]);

(修正前の応答)
                                    xpath
------------------------------------------------------------------------------
 {"&lt;local:piece id="1"&gt;number one&lt;/local:piece&gt;","&lt;local:piece id="2"/&gt;"}
(1 row)

(修正後の応答)
                                                                    xpath
------------------------------------------------------------------------------------------------------------------------------------------------
 {"&lt;local:piece xmlns:local="http://127.0.0.1/" id="1"&gt;number one&lt;/local:piece&gt;","&lt;local:piece xmlns:local="http://127.0.0.1/" id="2"/&gt;"}
(1 row)
</pre>
<li>範囲演算子の選択率見積で、いくつか軽微な誤りが修正されました  (Emre Hasegeli) (9.4)(9.3)</li>
<p>
プランナエラー「ERROR: unexpected operator NNNN」の発生が修正されます。また、そのほかのいくつかのケースで選択率の見積が改善されます。
</p>
<pre>
(修正前のエラーを起こす例)
db1=# CREATE TABLE t_nr (nr numrange);
db1=# SELECT * FROM t_nr WHERE nr &lt; 'empty';
ERROR:  unexpected operator 3884
</pre>
<li>意図しない GIN インデックスの要素最大サイズの引き下げが元に戻されました。  (Heikki Linnakangas) (9.4)</li>
<p>
9.4.0 では、以前のバージョンでは受け入れられていたデータに対して、「ERROR: index row size &#x301C;  exceeds maximum &#x301C;」エラーが出ることがありました。
</p>
<pre>
(以下は 9.4.0 でエラーになりますが 9.4.1 では INSERT 可能です)

db1=# CREATE TABLE t_gin (tags text[]);
db1=# CREATE INDEX ON t_gin USING gin (tags);
db1=# INSERT INTO t_gin VALUES (ARRAY[repeat('a', 120000)]);
ERROR:  index row size 1400 exceeds maximum 1352 for index "t_gin_tag_idx"
</pre>
<li>GIN インデックスのスキャン繰り返しで、一つのクエリ実行の間のメモリリークがあり、修正されました。  (Heikki Linnakangas) (9.4)</li>
<li>gin_fuzzy_search_limit 設定パラメータにゼロ以外を設定したとき、バックエンドプロセスのクラッシュをひき起こすことがあり、修正されました。  (Heikki Linnakangas) (9.4)</li>
<li>ロジカルデコーディング機能についていくつか修正されました。  (Andres Freund) (9.4)</li>
<li>パラメータ変更をする WALレコードのリプレイが修正されました。  (Petr Jalinek) (9.4)</li>
<p>
wal_log_hints の設定変更が正しくリプレイされませんでした。
</p>
<li>実行時統計情報収集のタイムアウトのログレベルが WARNING から LOG に変更されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
メッセージも「WARNING:  pgstat wait timeout」から、より丁寧な「LOG:  using stale statistics instead of current ones because stats collector is not responding」というものになります。
</p>
<li>OS X (Darwin) の setlocale() ライブラリ関数が PostgreSQL マスタプロセス内で新たにスレッドを起動する場合に警告とヒントを出すようになりました。  (Noah Misch) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
マルチスレッド化すると内部的なシグナル処理で不具合が生じる可能性があります。LC_ALL 環境変数に有効なロケールを設定しておくことが回避策となります。
</p>
<p>
「LOG:  postmaster became multithreaded during startup」「HINT: Set the LC_ALL environment variable to a valid locale.」というメッセージが出力されるようになります。
</p>
<li>/etc/passwd が読めないときの libpq の振る舞いが修正されました  (Tom Lane) (9.4)</li>
<p>
PQsetdbLogin() 関数を実行するとき、libpq は OS 上のユーザ名を確認しようとします。ほとんどの UNIX プラットフォームでは /etc/passwd が参照されます。
</p>
<p>
9.4.0 では /etc/passwd が読めない場合には常にエラーとして扱っていましたが、従来の、データベースロール名が明示されない場合のみエラーにするという振る舞いに戻されました。これにより chroot されて /etc/passwd がない環境に対応します。
</p>
<li>psql 特別変数の値の解析が一貫性を持つように改善されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ECHO_HIDDEN と ON_ERROR_ROLLBACK で on 、off を様々な書き方で与えることができるようになりました（1、0、true、false など）。
</p>
<p>
COMP_KEYWORD_CASE 、ECHO 、ECHO_HIDDEN 、HISTCONTROL 、ON_ERROR_ROLLBACK 、および VERBOSITY で、解釈できない値について警告がでるようになりました。
</p>
<p>
全ての特別変数の値について大文字小文字の区別なく受け付けるようになりました。これまでは区別があるもの、ないものが混在していました。
</p>
<li>pg_dump でイベントトリガーに対するコメントのダンプに失敗していたのが修正されました。  (Tom Lane) (9.4)(9.3)</li>
<pre>
(失敗例)
db1=# COMMENT ON EVENT TRIGGER my_event_trg IS 'comment of event trigger';
db1=# q
$ pg_dump db1 > db1.dump
cannot duplicate null pointer (internal error)
</pre>
<li>pg_dump で並列実行する --jobs (-j) オプションとともに--serializable-deferrable オプションが利用可能になりました。  (Kevin Grittner) (9.4)(9.3)</li>
<p>
これまではエラーとなっていました。
</p>
<li>pg_basebackup の -x / -X オプションで作られた WALファイルが、昇格した際に再度アーカイブされないように修正されました。  (Andres Freund) (9.4)(9.3)(9.2)(9.1)</li>
<p>
これまで -x / -X オプションで取得した WAL ファイルは未アーカイブの扱いになっていました。wal_keep_segment 設定等でオンライン WAL ファイル数が多いとき、昇格後これらをアーカイブするのに時間を要していました。
</p>
<li>contrib/tablefunc の connectby() 関数で、予想外のクエリ結果、特に NULLを安全に扱えるようになりました。  (Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで keyid カラムに NULL があるときクラッシュしていました。
</p>
<li>Coverity の静的コード解析の警告に基づき多数の修正が行われました。  (Andres Freund, Tatsuo Ishii, Marko Kreen, Tom Lane, Michael Paquier) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
ほとんどは表面的な変更ですが、一部においてまれな障害ケースも修正されています。メモリ不足で失敗した際に適切なエラーを出さず、クラッシュしてしまう個所がありました。セキュリティ問題はないものと考えられます。
</p>
<li>configure 実行時の環境変数 CFLAGS で自動設定される値を上書きできるようになりました。  (Tom Lane) (9.4)</li>
<p>
これまでは configure スクリプトにより CFLAGS の末尾にオプションが追記され、コンパイラが先頭から解釈するために、ユーザ定義した内容を上書きしていました。あらかじめ CFLAGS に設定してあった文字列を末尾に置くようになりました。
</p>
<pre>
(従来)
CFLAGS="{あらかじめCFLAGSに設定してあった内容}  {configureで付加される内容} "
(修正後)
CFLAGS="{configureで付加される内容}  {あらかじめCFLAGSに設定してあった内容} "
</pre>
<li>pg_regress が成功終了時には作成する一時インスタンスのファイルを全て削除するようになりました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<li>タイムゾーン省略名 CST (China Standard Time) が追加されました。  (Tom Lane) (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
9.3 以前のバージョン系列では、ADT (Arabia Daylight Time) の削除、CKT (Cook Islands)、FJT、FJST (Fiji) のオフセットの修正も行われています。これらは 9.4.0 時点で適用済みでした。
</p>
<li>タイムゾーンデータが tzdata release 2015a に更新されました。   (9.4)(9.3)(9.2)(9.1)(9.0)</li>
<p>
チリ、メキシコの夏時間法が変更され、アイスランドの歴史的変更が適用されています。
</p>
<p>
9.3 以前のバージョン系列では、オーストラリアのタイムゾーンに略記法 AxST/AxDT を採用、そのほか略記法に SERT (Asia/Srednekolymsk) 、XJT (Asia/Urumqi)、WSST/WSDT (西サモア) を追加、Pacific/Bougainville タイムゾーン追加、という変更が適用さ<br />
れています。これらは tzdata release 2014j での更新内容で、9.4.0バージョンで既に適用されていました。
</p>
<li>ALTER DATABASE .. SET TABLESPACE でデータベースのテーブルスペースを移動して、そのあとすぐに元のテーブルスペースに戻すときにデータ破損の可能性があり、修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<li>トランザクション内で DDL と共に ANALYZE を実行してロールバックするときのテーブル破損を回避するように修正されました。  (Andres Freund, Tom Lane, Michael Paquier) (9.3)(9.2)(9.1)(9.0)</li>
<p>
トランザクション内で ANALYZE に先だってインデックス削除、ルール削除、（制約を含む）トリガー削除を行う場合に該当します。
</p>
<li>UNLOGGEDテーブルが CREATE DATABASE や ALTER DATABASE .. SET TABLESPACE で確実に正しくコピーされるように修正されました。  (Pavan Deolasee, Andres Freund) (9.3)(9.2)(9.1)</li>
<p>
これらコマンドで UNLOGGEDテーブルについてもストレージ同期処理が行われるようになりました。
</p>
<p>
本障害により、テーブルスペース移動後のチェックポイント処理にて、以下メッセージ出て失敗するケースが報告されていました。
</p>
<pre>
ERROR:  checkpoint request failed
ERROR:  could not open file "pg_tblspc/16543/PG_9.3_201411111/16555/16666": No such file or directory
</pre>
<li>CREATE EVENT TRIGGER コマンドの実装誤りが修正されました。  (Petr Jelinek) (9.3)</li>
<p>
本コマンドをプリペアドクエリまたは拡張プロトコルで実行するときに、正しく動作しませんでした。
</p>
<li>テーブルのカラムが再帰的に参照される場合の DROP コマンドの依存性確認動作が修正されました。  (Petr Jelinek, Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
拡張モジュールがデータ型とそのデータ型を使ったテーブルの両方を定義する場合に該当します。これまで CASCADE を付けない DROP EXTENSION が不必要に失敗することがありました。
</p>
<li>部分インデックスが子テーブルにあるときの SELECT .. FOR UPDATE に対する実行プランが修正されました。  (Kyotaro Horiguchi) (9.3)(9.2)(9.1)(9.0)</li>
<p>
READ COMMITED トランザクションモードでの SELECT .. FOR UPDATE を継承を伴う親テーブルに対して行い、その子テーブルの部分インデックスが使われる場合に、本障害で誤った結果行が返る可能性がありました。
</p>
<li>継承テーブルに対して SELECT .. FOR UPDATE が同じ行を２回返すことがあり、修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
READ COMMITTED トランザクションモードで継承テーブル（親テーブル）に対して SELECT .. FOR UPDATE を行うとき、次の子テーブルの行を返すべきところで誤って手前の子テーブルの行を返してしまうことがありえました。
</p>
<li>外部キー制約定義で重複したカラム名を受け入れないようになりました。  (David Rowley) (9.3)(9.2)(9.1)(9.0)</li>
<p>
この制限は SQL標準にしたがったものです。これまでは明確に排除していませんでしたが、後で奇妙なエラーが生じていました。
</p>
<pre>
(修正後バージョンで以下のエラーが出るようになります)
db1=# CREATE TABLE t_mas (id int primary key);
db1=# CREATE TABLE t_ref (id int PRIMARY KEY REFERENCES t_mas (id, id));
ERROR:  foreign key referenced-columns list must not contain duplicates
</pre>
<li>「SELECT .. OFFSET -1」がエラーになるように修正されました。  (Tom Lane) (9.3)</li>
<p>
PostgreSQL 8.4 以降からは OFFSET に負値を与えるとエラーになるのが本来の動作でしたが、9.3 バージョン系列では OFFSET 指定が無いものとして、SELECT が動作してしまっていました。
</p>
<li>ドメインを JSON に変換するときの振る舞いが元に戻されました。  (Tom Lane) (9.3)(9.2)</li>
<p>
numeric型および boolean型に対するドメインのデータを変換するときに、ベース型と同じ扱いで変換するようになります。
</p>
<p>
9.3.5 以前、9.2.9 以前のバージョンではそのように動作していましたが、関連する別の問題を修正する際に振る舞いが変ってしまっていました。
</p>
<pre>
(動作例)
db1=# CREATE DOMAIN d_numeric AS numeric ;
db1=# CREATE DOMAIN d_boolean AS boolean ;
db1=# CREATE TABLE tc (b1 boolean, n1 numeric);
db1=# CREATE TABLE td (b1 d_boolean, n1 d_numeric);
db1=# INSERT INTO tc VALUES (true, 100);
db1=# INSERT INTO td VALUES (true, 100);
db1=# SELECT row_to_json(tc.*) FROM tc;
     row_to_json
----------------------
 {"b1":true,"n1":100}
(1 row)

(9.3.5 / 9.2.9 の場合)
db1=# SELECT row_to_json(td.*) FROM td;
      row_to_json
-----------------------
 {"b1":"t","n1":"100"}
(1 row)

(9.3.6 / 9.2.10 の場合)
db1=# SELECT row_to_json(td.*) FROM td;
     row_to_json
----------------------
 {"b1":true,"n1":100}
(1 row)
</pre>
<li>json_agg() 関数が末尾に余計な右ブラケット(])付けてを返さないように修正されました。  (Tom Lane) (9.3)</li>
<li>整数べき乗計算の誤りが修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
大きいべき乗数を与えた場合に、誤った答えが返ったり、オーバーフローと判別するまでに大量にメモリを消費して長時間を要することがありました。
</p>
<pre>
(障害動作例：以下２つはゼロかゼロに非常に近い値が返るはず)

db1=# SELECT 10.0 ^ -2147483648;
   rounds_to_zero
--------------------
 1.0000000000000000
(1 row)

db1=# SELECT 10.0 ^ -2147483647;
ERROR:  division by zero

(以下は「ERROR:  value overflows numeric format」とならなければいけない)
db1=# SELECT 10.0 ^ 2147483647 ;
     overflows
--------------------
 0.0000000000000000

db1=# SELECT 117743296169.0 ^ 1000000000 ;
 ... 長時間応答なし

</pre>
<li>NUMERICデータ型のバイナリ入力関数 numeric_recv() で表示桁数属性にしたがえば見えない微小桁を切り捨てるようになりました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
クライアントからバイナリデータで投入された numeric 値で、表示される桁より小さな桁の値が保持されていて、値の演算を経て顕在化する奇妙な動作がありました。
</p>
<li>正規表現の最短一致の誤りが修正されました。  (Tom Lane) (9.3)(9.2)</li>
<p>
最短一致指定を付けた場合にマッチに失敗することがありました。
</p>
<pre>
(修正前の障害動作例：最短一致指定で + の後の ? を付けるとマッチしない)
db1=# SELECT regexp_matches('foo/bar/baz',
               '^([^/]+)(?:/([^/]+))(?:/([^/]+))?$', '');
 regexp_matches
----------------
 {foo,bar,baz}
(1 row)

db1=# SELECT regexp_matches('foo/bar/baz',
                '^([^/]+?)(?:/([^/]+?))(?:/([^/]+?))?$', '');
 regexp_matches
----------------
(0 rows)
</pre>
<li>数値による timezone 設定値の指定で範囲外の値を拒絶するようになりました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
timezone に +/- 168時間を超える値を指定可能でしたが、タイムゾーン処理時にクラッシュをひき起こしていました。+/- 167 までに制限されるようになります。
</p>
<pre>
(修正前の障害動作例)
db1=# SET timezone TO '+300';
SET
db1=# SELECT '2015-02-11'::timestamptz;
server closed the connection unexpectedly
(ここでバックエンドクラッシュ)
</pre>
<li>演算子「tsquery @&gt; tsquery」の障害が修正されました。  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
語の一致を CRC 計算値のみで判断していたため、偶然 CRC が一致した異なる語があるとき誤った結果が返っていました。
</p>
<p>
また、右辺の要素の方が多い場合にはマッチしないものとする動作でしたが、語の重複を考慮すると適切な振る舞いではありませんでした。
</p>
<pre>
(以下は修正前バージョンでは f 、修正後バージョンで t となります)
db1=# SELECT to_tsquery('aaa,bbb') @&gt; to_tsquery('aaa,bbb,aaa');
</pre>
<li>全文検索で Ispell辞書を作る際に接辞ファイル(AffFile) に指定したファイルが不適切である場合にクラッシュしないように修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<li>全文検索の類語辞書にて、一つのエントリに 65536 以上の語句を指定できるようになりました。  (David Boutin) (9.3)(9.2)(9.1)(9.0)</li>
<li>行全体の変数値と複合引数の処理が修正されました。  (Tom Lane) (9.3)(9.2)</li>
<p>
行全体の値が空のカラム名を関数に出さないように修正されました。
</p>
<p>
「SELECT row_to_json(tab.*) ...」などを実行した際に予期せぬエラー「ERROR: record type has not been registered」が生じることがありました。
</p>
<li>postgres_fdw のクエリでシステムカラムの扱いについて修正されました。  (Etsuro Fujita) (9.3)(9.2)</li>
<p>
tableoid などの ctid 以外のシステムカラムについて、リモート側でなく呼び出し側で処理するようになりました。
</p>
<li>インデックスの付いたカラムに対して「col = ANY ( array ) 」を実行する際に劣ったプランになるのを避けるようになりました。   (Andrew Gierth) (9.3)(9.2)</li>
<p>
これまで「Filter: (col = ANY (...))」が有利な場合でも、「Index Cond: (col = ANY (...))」が使われることがあり、修正されました。
</p>
<p>
なお「col IN (101, 102, 103) 」のような式も「col = ANY ('{101,102,103}'::integer[])」などと変換されて実行されますので該当します。
</p>
<li>「ERROR: variable not found in subplan target lists」メッセージが出る障害が修正されました。 (Tom Lane) (9.3)</li>
<p>
複合引数を取りインライン展開される SQL関数が、LATERAL 副問い合わせで使われる場合や、その複合引数が LATERAL参照である場合に発生します。
</p>
<li>UNION ALL のサブクエリ内における継承テーブルのように、入れ子で Append 処理が行われる場合のプランナの問題が修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
バックエンドクラッシュをひき起こすことがありました。
</p>
<li>GiST インデックス要素がページに適合していない場合に正常にエラーを出すように修正されました。  (Andrew Gierth) (9.3)(9.2)(9.1)(9.0)</li>
<p>
サイズの大きい要素の投入に対して、無限再帰処理からのバックエンドクラッシュが生じていました。
</p>
<li>自動VACUUM でテーブル毎の cost_limit、cost_delay 指定がある場合、グローバルなこれらコストバランス規則からは除外するようになりました。  (&Aacute;lvaro Herrera) (9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでは、結果としてテーブル毎のこれら設定が無視されていました。本修正により、テーブル毎コスト設定がある場合には、他の autovacuum workerプロセスとは独立に休止の処理が行われるようになり、指定値が反映されます。
</p>
<p>
本変更により、同じ設定であればより休止が少なくなり、I/O 負荷が以前より高まることになります。
</p>
<li>autovacuum = off であるとき、大規模な自動VACUUM 処理を回避するようになりました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
autovacuum = off であっても、XID 周回対策処理が必要であるときには、自動VACUUM が実行される仕様です。このときの対象データベースの全テーブルに通常の自動VACUUM 処理が行われていました。これは、XID 周回の脅威への対応を遅らせることにもなっていました。
</p>
<p>
本修正により、autovacuum = off であるときには、XID 周回対策処理だけを自動で行うようになりました。
</p>
<li>クラッシュリカバリ中、リカバリが完了する前に、UNLOGGED テーブルを空にしてディスク同期するようになりました。  (Abhijit Menon-Sen, Andres Freund) (9.3)(9.2)(9.1)</li>
<p>
これにより、クラッシュリカバリ後に UNLOGGED テーブルにゴミデータが含まれることを防ぎます。
</p>
<li>ホットスタンバイのクエリと、フルページイメージのリプレイの競合状態が修正されました。  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
この不具合はホットスタンバイでのクエリ実行で一時的なエラー、あるいは、誤った実行結果（行の欠損）をもたらすことがありました。
</p>
<li>COMMIT/ABORT PREPARED の WALレコードを不適切に無視するリカバリロジックがいくつか修正されました。  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
pg_last_xact_replay_timestamp() 関数、recovery_target_xid 設定において 2相コミットの PREPARED 処理の WAL レコードが無視されていました。なお、9.4 系列においては recovery_min_apply_delay 設定でも無視されていましたが、9.4.0 にて既に修正が<br />
適用済みです。
</p>
<li>クラッシュリカバリ完了時に、最新のWALファイルが再度アーカイブされないように修正されました。  (Fujii Masao) (9.3)(9.2)</li>
<li>タイムラインヒストリファイルに必要のない .ready マーカーファイルが作成されないように修正されました。  (Fujii Masao) (9.3)(9.2)(9.1)(9.0)</li>
<p>これまでは旧タイムラインのアーカイブからリストアした WALファイルであってもリカバリ時に常に .ready ファイルが作られていました。</p>
<li>log_statement が mod もしくは ddl で、空のプリペアドステートメントが使用されたときにヌルポインタ参照が起こらないように修正されました。  (Fujii Masao) (9.3)(9.2)(9.1)(9.0)</li>
<li>マスタプロセスの動的バックグラウンドワーカーのリストが破損する可能性があり、修正されました。  (Andres Freund) (9.3)
</li>
<p>
9.4.0 リリース前時点の9.4系列で問題が発見され、9.3.6 でも同様の修正が適用されました。
</p>
<li>いくつかのnon-Solaris カーネルがそうするように SPARC のスピンロックをCPU が non-TSO コヒーレンシーモードでの正確な動作を保証するように修正されました。  (Andres Freund) (9.3)(9.2)(9.1)(9.0)</li>
<li>PQconnectdbParams() 関数で dbname パラメータが繰り返されたときの処理が修正されました。  (Alex Shulgin) (9.3)(9.2)(9.1)(9.0)</li>
<p>
dbname が接続文字列かURIに含まれていた時、予期しない振る舞いをすることがありました。
</p>
<li>libpq が報告する予期しないソケットのEOFに関するメッセージを適切なものにしました。  (Marko Tiikkaja, Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
カーネルの振る舞いに従うと、libpq はサーバが予期せずソケットが閉じたときに有用なエラーを返さずに、空のエラー文字列を返してしまうことがありました。
</p>
<li>PQreset() 関数実行中の古いエラーメッセージが消去されるようになりました。  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
PQreset() 関数が何度も呼ばれて接続が再確立できなかったとき、失敗した接続によるエラーメッセージは PGconn のエラー文字列に蓄積し続けていました。
</p>
<li>libpq 接続オプションの構文解析におけるメモリ不足状態を適切に扱えるようになりました。  (Alex Shulgin, Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで接続クライアント側でクラッシュが生じることがありました。
</p>
<li>ParseDateTime() 関数の ecpg バージョンにおける配列オーバーランが修正されました。  (Michael Paquier) (9.3)(9.2)(9.1)(9.0)</li>
<p>
本障害箇所が攻撃に使われる恐れは無いものと考えられます。
</p>
<li>initdb 実行時、パスワードファイルが指定されているにも関わらずその内容が空の場合、エラーメッセージを明示的に出力するようになりました。  (Mats Erik Andersson) (9.3)(9.2)(9.1)(9.0)</li>
<p>
以前も空のパスワードファイルである場合には initdb は失敗していましたが、エラーメッセージが明快ではありませんでした。
</p>
<pre>
(以前のメッセージ例)
$ initdb -D ./pgdata --pwfile empty.pass
The files belonging to this database system will be owned by user "postgres".
 (中略)
initdb: could not read password from file "empty.pass": Success
initdb: removing data directory "./pgdata"
</pre>
<li>最近の libedit を利用している psql の s コマンドがうまく働くようになり、ページャのサポートが付加されました。  (Stepan Rutz, Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
readline ではなく libedit でビルドされた psql では、s コマンドによるヒストリ表示がおよそ読めないものでした。
</p>
<p>
そこで、このライブラリを用いるのではなく、自身でヒストリを表示する方式に修正されました。さらに良い副作用としてページャが使えるようになりました。
</p>
<p>
本修正で、libedit でコマンドヒストリを保存するとき、改行コードに一貫性がない場合における障害も修正されています。
</p>
<li>psql の watch コマンドで pset null で指定した null 表示を適用するようになりました。  (Fujii Masao) (9.3)</li>
<p>
これまでは設定が無視されていました。
</p>
<li>psql 拡張形式表示で border が 3 で、linestyle が ascii または unicode であるときに、一貫した表示になるように修正されました。  (Stephen Frost) (9.3)(9.2)(9.1)(9.0)</li>
<pre>
(修正前は以下のように末尾の罫線が不適切でした)
$ psql db1 &lt;&lt;'EOS'
&gt; pset border 3
&gt; pset linestyle ascii
&gt; x
&gt; SELECT * FROM t1 ;
&gt; EOS
[ RECORD 1 ]
| id | 1   |
| v  | AAA |
--+----
</pre>
<li>pg_dump でオブジェクトの依存関係を調べる処理が改善され、性能が向上しました。  (Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
データベース内に、同一オブジェクト間に多重の依存性経路をもつケースが多くある場合に本修正の効果があらわれます。
</p>
<li>pg_dumpall が 8.1 以前のサーバをダンプできるように修正されました。  (Gilles Darold) (9.3)(9.2)</li>
<li>(pg_dump -s オプションによる) 定義のみのダンプを並行リストアするときに発生しうるデッドロックが修正されました。  (Robert Haas, Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<li>カラムを一つも持たない複合型があるとき pg_dump --binary-upgrade がクラッシュしていたものが修正されました  (Rushabh Lathia) (9.3)(9.2)(9.1)(9.0)</li>
<p>
--binary-upgrade オプションは pg_upgrade コマンドから使用されます。
</p>
<li>pg_upgrade でデフォルトでないテーブルスペースのテーブルに対する fsyncに失敗していて、修正されました。  (Abhijit Menon-Sen, Andres Freund) (9.3)</li>
<p>
pg_upgrade 実行中に OS クラッシュ等が生じた場合にデータ欠損が生じる可能性がありました。
</p>
<li>pg_upgrade で新しいクラスタが TOAST を持たないテーブルに対して事前にTOAST テーブルを作成するときに適切に動作するように修正されました。  (Bruce Momjian) (9.3)</li>
<p>
これまでは OID 衝突によって失敗することがありました。
</p>
<li>pg_upgrade で autovacuum_multixact_freeze_max_age を古いクラスタに対して設定しないようになりました。  (Bruce Momjian) (9.3)</li>
<p>
本パラメータは 9.3.3 で追加されたため、9.3.2 までのサーバに対しては、失敗してしまいます。実際のところ設定する必要がないパラメータでした。
</p>
<li>pg_upgrade で、トランザクションID のエポック時間が保たれるように修正されました。  (Bruce Momjian) (9.3)</li>
<p>
この不具合は通常のPostgreSQLに影響するものではありませんが、Slony-I やlondiste などのレプリケーションツールに影響を与える可能性がありました。
</p>
<li>pg_receivexlog コマンドのメモリリークが修正されました。  (Fujii Masao) (9.3)</li>
<li>pg_receivexlog コマンドの verbose メッセージが意図せず抑制されており、修正されました。  (Fujii Masao) (9.3)</li>
<li>contrib/auto_explain が EXPLAIN ANALYZE 実行時に計画ノードごとの所用時間情報の出力に失敗することがあり、修正されました。  (Tom Lane) (9.3)(9.2)</li>
<li>contrib/citext のアップグレードスクリプトが修正されました。  (Tom Lane) (9.3)(9.2)(9.1)</li>
<li>contrib/hstore の hstore_to_json() 関数による整数オーバーフローと  (Heikki Linnakangas) (9.3)</li>
<p>バッファオーバーランを防ぐように修正されました。
</p>
<li>hstore_to_json_loose() 関数による数値の認識処理が修正されました。  (Andrew Dunstan) (9.3)</li>
<p>
これにより JSON の数値や文字列が正しく区別できるようになります。
</p>
<li>contrib/pageinspect の get_raw_page() 関数によるブロック数のチェックが修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
間違ったロジックにより、リレーションの主フォークでないページへのアクセスが妨げられることがありました。
</p>
<li>contrib/pgcrypto の pgp_sym_decrypt() 関数で、メッセージ長がちょうど 2 の乗数から 6 を引いた長さである場合に失敗しており、修正されました。  (Marko Tiikkaja) (9.3)(9.2)(9.1)(9.0)</li>
<p>
メッセージ長が 65530 バイト (2^16 - 6) や、16378 バイト(2^14 - 6) などの場合に該当します。「Error:  Wrong key or corrupt data」が生じていました。なお、メッセージ長が (2^14 x N - 6) N=正整数 の場合に該当するケースも報告されています。
</p>
<li>contrib/pg_test_fsync によるファイルディスクリプタリークが修正されました。  (Jeff Janes) (9.3)(9.2)(9.1)</li>
<p>
これにより Windows の一時ファイルの削除に失敗することがありました。
</p>
<li>contrib/xml2 の xslt_process() 関数がクラッシュを回避するように修正されました。  (Mark Simonetti) (9.3)(9.2)(9.1)(9.0)</li>
<p>
これまでの保守的すぎる揮発性指定は、通常利用においては問題ありませんが、最適化と式インデックス利用の妨げとなっていました。本修正では拡張モジュールのバージョン番号は変更されません。
</p>
<li>contrib モジュールのデータ型追加のための入出力関数のいくつかに、適切な揮発性の指定が付加されました。  (Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
これまでの保守的すぎる揮発性指定は、通常利用においては問題ありませんが、最適化と式インデックス利用の妨げとなっていました。本修正では拡張モジュールのバージョン番号は変更されません。
</p>
<li>バックグラウンドワーカープロセスの初期化について修正されました。  (Robert Haas) (9.3)</li>
<p>
Windowsプラットフォームで不具合の可能性がありました。
</p>
<li>ビルド時に互換性のない OpenLDAPバージョンを検知するようになりました。  (Noah Misch) (9.3)(9.2)(9.1)(9.0)</li>
<p>
OpenLDAP 2.4.24 から 2.4.31 は、PostgreSQL のバックエンドプロセスをクラッシュさせます。configure で警告を出すとともに、contrib/dblink の回帰テストにクラッシュを引き起こすシナリオを含めるようになりました。
</p>
<li>Visual C 以外での Windows むけビルドで、libpq.dll が確実に実行権限を付加してインストールされるように修正されました。   (Noah Misch) (9.3)(9.2)(9.1)(9.0)</li>
<li>UTCオフセットが変化するタイムゾーン略記法に対応しました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
与えられた日付に応じて、タイムゾーン略記法をその日付時点での正しい UTC オフセットに関連付ける動作をするようになります。
</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.0.18 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-18/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 24 Jul 2014 01:01:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2341</guid>

					<description><![CDATA[このリリースは 9.0.17 からの修正リリース(2014/7/24リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 本バージョンで修正された GiST インデックスの不具合による影響があ ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.17 からの修正リリース(2014/7/24リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>本バージョンで修正された GiST インデックスの不具合による影響がある場合、本バージョンへのアップデート後に REINDEX が必要になります。</p>
<p>また、9.0.15 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-15/">9.0.15 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2341"></span></p>
<h3 class="background">PostgreSQL 9.0.17 から 9.0.18 への変更点</h3>
<p>9.3.5、9.2.9、9.1.14、9.0.18、8.4.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>pg_upgrade で正しくアップグレードできない問題が修正されました  (Bruce Momjian) (9.3)</li>
<p>
initdb により取り残された pg_multixact ディレクトリのファイルを削除するようになりました。
</p>
<p>
9.3.5 以前の 9.3系列バージョンに付属する pg_upgrade を使用して、9.2.x 以前のデータベースクラスタを 9.3系列にアップグレードした場合に $PGDATA/pg_multixact/offsets/0000 ファイルが残ってしまいます。これは VACUUM 処理にて後に問題を引き起こします。とはいえ一般的なケースでは本ファイルを削除する必要はありません。
</p>
<p>
アップグレードしたデータベースクラスタに問題があるかは、以下の SQLを管理者ユーザで実行することで確認できます。
</p>
<pre>
WITH list(file) AS (SELECT * FROM pg_ls_dir('pg_multixact/offsets'))
SELECT EXISTS (SELECT * FROM list WHERE file = '0000') AND
       NOT EXISTS (SELECT * FROM list WHERE file = '0001') AND
       NOT EXISTS (SELECT * FROM list WHERE file = 'FFFF') AND
       EXISTS (SELECT * FROM list WHERE file != '0000')
       AS file_0000_removal_required;
</pre>
<p>
「t」が返った場合には、手動で「$PGDATA/pg_multixact/offsets/0000」ファイルを削除してください。
</p>
<li>contrib/btree_gist 拡張モジュールの bit型カラムに対するインデックスの初期パディングバイトが修正されました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本障害は、カラム値のイコール比較で誤ることで、誤った問い合わせ結果をひき起こします。GiSTインデックスを bit型または bit varying型のカラムに適用している場合には、 バージョンアップ後に REINDEX が必要となります。
</p>
<li>GINインデックスでページ破損を防ぐように修正されました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまでインデックスのページ更新をディスク書き込みしているときにシステムクラッシュがおきると、インデックスが壊れる可能性がありました。
</p>
<li>リカバリ中における GiSTインデックスの処理が修正されました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
WALリプレイに基づき GiSTインデックスのページを更新する際に、右リンク（次ページ番号）をクリアしないように修正されました。
</p>
<p>
本障害にて、ホットスタンバイサーバにおける GiSTインデックスを使った検索で誤った問い合わせ結果をひき起こす可能性があります。
</p>
<li>text_ops 演算子クラスを適用した SP-GiSTインデックスにおいて、稀に無限ループが生じる可能性があり、修正されました。  (Tom Lane) (9.3)(9.2)</li>
<li>SP-GiSTインデックスによる隣接演算子（-|-）を使った検索結果が誤っている場合があり、修正されました。  (Heikki Linnakangas) (9.3)</li>
<li>pg_multixact/members ディレクトリのファイルに対するトランザクションID周回処理が修正されました。  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
本修正は、以下エラーメッセージが出る問題に対し行われた 9.3.3 での修正の不備を補うものです。</p>
<pre>
ERROR:  could not access status of transaction NNNNNNNN
DETAIL:  Could not open file "pg_multixact/members/XXXX": No such file or directory.
</pre>
</p>
<li>pg_multixact の切り詰めを VACUUM 時でなく、チェックポイント時に行うようになりました  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
この変更により、クラッシュ後の WALリプレイで未だ必要な pg_multixactセグメントが削除されないことを確実にします。
</p>
<li>WALリカバリの後、all-visibleフラグについて不整合が生じる可能性があり、VACUUM 処理が修正されました  (Heikki Linnakangas) (9.3)</li>
<p>
all-visibleフラグとは、ページの中にデッドタプル（不要行バージョン）が無いことを示すものです。
</p>
<li>内部関数 ReceiveSharedInvalidMessages が入れ子で呼ばれた場合にキャッシュ無効化の不整合が出る可能性があり、修正されました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>他のプロセスのロックされた行の同時更新にて競合があり、修正されました  (Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<li>継承機能における子テーブルを読むサブクエリに対する UNION ALL でプランナが失敗する障害があり、修正されました  (Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
「ERROR:  could not find pathkey item to sort」というエラーが発生します。以下に障害発生例を示します。
</p>
<pre>
db=# CREATE TABLE events (event_id int PRIMARY KEY);
db=# CREATE TABLE other_events (event_id int primary key);
db=# CREATE TABLE events_child () INHERITS (events);
db=# EXPLAIN SELECT event_id FROM (SELECT event_id FROM events
     UNION ALL SELECT event_id FROM other_events) ss ORDER BY event_id;
ERROR:  could not find pathkey item to sort
</pre>
<li>複数行を返す関数がターゲットリストに含まれている時、サブクエリの出力がユニークである前提としないように、修正されました  (David Rowley) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本障害は「WHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)」といった問い合わせ記述に対して、誤った最適化をひき起こしました。
</p>
<li>プランナが改善され、可能なら AND／OR 条件の入力から null定数を除去するようになりました  (Tom Lane) (9.3)(9.2)</li>
<p>
以下のような問い合わせで t1.a、t1.b にインデックスがあっても、IN 条件に null が混じっているためにシーケンシャルスキャンになってしまう問題がありました。
</p>
<pre>
db=# EXPLAIN (COSTS OFF)
     SELECT * FROM t1 WHERE (a, b) IN ((1, 1000), (null, null));
                      QUERY PLAN
-------------------------------------------------------
 Seq Scan on t1
   Filter: (((a = 1) AND (b = 1000)) OR NULL::boolean)
(2 rows)
</pre>
<li>プランナが VARIADIC キーワードを使った関数呼び出しと、そうでない関数呼び出しを同一にみなすように修正されました  (Tom Lane) (9.3)</li>
<p>
可変引数を持つ関数に対して、関数インデックスを定義した場合、関数インデックス定義時の書き方通りに呼び出さないと、インデックスが使われませんでした。
</p>
<pre>
(test_func が可変引数関数であるとして、このようにインデックスを作ると)
CREATE INDEX test_idx ON test
  USING btree ((test_func(val, 'a', 'b')));

(こちらではインデックスが使われるが)
SELECT * FROM test WHERE test_func(val, 'a', 'b') > 60;

(こちらでは文の意味は同じだがインデックスが使われない)
SELECT * FROM test
  WHERE test_func(val, VARIADIC ARRAY['a'::text, 'b'::text]) > 60;
</pre>
<li>json_populate_recordset() 関数における入れ子のJSONオブジェクトの扱いが修正されました  (Michael Paquier, Tom Lane) (9.3)</li>
<p>
以下のような JSON データを行データに展開するとして、その中にもJSONデータ型が含まれている場合が該当します。
</p>
<pre>
(以下のように誤った結果となります)
db=# CREATE TYPE jpop2 AS (a int, b json, c int, d int);
db=# SELECT * FROM json_populate_recordset(null::jpop2,
       '[{"a":2,"c":3,"b":{"z":4},"d":6}]', true) q;
 a |    b    | c | d
---+---------+---+---
   | {"z":4} |   | 6

(本修正を適用したバージョンでは以下のように正しく出力されます)
 a |    b    | c | d
---+---------+---+---
 2 | {"z":4} | 3 | 6
</pre>
<li>to_json() 関数などで引数型を型カテゴリで識別していたものが修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>
to_json() 関数は anyelement疑似型を受け取って JSON に変換する関数です。これまで PostgreSQL上のデータ型の型カテゴリを使って、どの JSON型にあてはめるかを判定していましたが、誤認する可能性があるた<br />
め、個別のデータ型ごとに場合分けするようになりました。
</p>
<li>TOAST格納された複合型の配列などに対するアクセスでエラーがでる問題があり、修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
「ERROR:  missing chunk number 0 for toast value ...」というエラーが出ることが報告されています。TOAST 処理について修正が必要でした。
</p>
<li>Append を伴う実行プランの出力の行全体を参照するときに「ERROR:  record type has not been registered」が出る問題が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
以下の SELECT で本エラーが発生します。</p>
<pre>
db=# CREATE TABLE t (f1 int);
db=# INSERT INTO t (f1) VALUES (-1), (+1);
db=# SELECT (SELECT q FROM
       (SELECT 1,2,3 WHERE f1 > 0
        UNION ALL
        SELECT 4,5,6.0 WHERE f1 <= 0 ) q ) from t;
</pre>
</p>
<li>カーソルを巻き戻したときユーザ定義関数を呼び出す場合にバックエンドプロセスがクラッシュする可能性があり、修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
以下のようにカーソルに対応した SQL の LIMIT句に関数呼び出しがある場合などが該当します。</p>
<pre>
CREATE FUNCTION NOCHANGE(int) RETURNS int
  AS 'SELECT $1 ' LANGUAGE SQL STABLE;
BEGIN;
DECLARE c CURSOR FOR SELECT * FROM t LIMIT nochange(3);
FETCH ALL FROM c;
MOVE BACKWARD ALL IN c;
FETCH ALL FROM c;
COMMIT;
</pre>
</p>
<li>FROM 句にある関数の引数を処理する際のメモリリークが修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
一つの SQL文実行の中でのメモリリークであり、本修正以前でも SQL完了後は当該メモリは解放されます。
</p>
<li>正規表現処理でメモリリークが修正されました  (Tom Lane, Arthur O'Dwyer, Greg Stark) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
ある接続内でのメモリリークで、切断するまでメモリリークが残ります。現象ではなくコードロジックから発見された障害で、発生の可能性は低いものといえます。
</p>
<li>テキスト全文検索におけるハンガリー語のストップワードの誤りが修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>外部テーブルを OID 列を含めて作ることができないようになりました  (Etsuro Fujita) (9.3)(9.2)(9.1)</li>
<p>
これまでも WITH OIDS を指定することはできませんでしたが、default_with_oids = true の設定を通して OID列を作ることが可能でした。ただし、OID列を含めたとしても適切に処理できていませんでした。
</p>
<li>行の有効性チェックについて修正されました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
実行中トランザクションにより挿入され、ロールバックされたサブトランザクションの中で削除された行に対して、その後に同トランザクション内でCREATE INDEX や CLUSTER を実施すると、少なくとも不審な WARNING が生じ、最悪の場合には無限ループに陥ります。
</p>
<p>
以下に再現例を示します。</p>
<pre>
db=# BEGIN;
db=# INSERT INTO t1 VALUES (1, '111');
db=# SAVEPOINT x;
db=# DELETE FROM t1;
db=# ROLLBACK TO x;
db=# CREATE INDEX idx_t1a ON t1 (a);
WARNING:  concurrent delete in progress within table "t1"
</pre>
</p>
<li>pg_stat_activity ビューの xact_start 列の値が PREPARE TRANSACTION のとき表示しないようになりました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
二相コミット用に準備されたトランザクションは、PREPARE TRANSACTION を実行した時点で接続（セッション）はトランザクション実行中状態ではなくなっているので、本修正のようにするのが適切でした。
</p>
<li>REASSIGN OWNED 命令がテキスト全文検索用オブジェクトに対してエラーをひき起こしていたものが修正されました  (&Aacute;lvaro Herrera) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
以下に発生例を示します。</p>
<pre>
=# ! touch /usr/local/pgsql/share/tsearch_data/mystop.stop
=# CREATE TEXT SEARCH DICTIONARY my_dic
     (template = snowball, language = russian, stopwords = mystop);
=# CREATE ROLE foo;
=# CREATE ROLE bar;
=# ALTER TEXT SEARCH DICTIONARY my_dic OWNER TO foo;
=# REASSIGN OWNED BY foo TO bar;
ERROR:  unexpected classid 3600
</pre>
</p>
<li>pg_class テーブルの relminmxid 列の値が VACUUM FULL で後戻りしてしまうことを防ぐように修正されました  (&Aacute;lvaro Herrera) (9.3)</li>
<li>ルールとビューの定義出力でインデントが削減されました  (Greg Stark, Tom Lane) (9.3)</li>
<p>
読みやすさの改善と過剰な空白文字出力を避けるためです。
</p>
<p>
多重の入れ子構造の SQL であるとき、性能劣化やメモリ不足の恐れがありました。例えば、これまで 5 つの SELECT を UNION ALL でつないだビューは、以下のように出力されていました。</p>
<pre>
View definition:
        (        (        (         SELECT t1.a,
                                    t1.b
                                   FROM t1
                        UNION ALL
                                 SELECT t1.a,
                                    t1.b
                                   FROM t1)
                UNION ALL
                         SELECT t1.a,
                            t1.b
                           FROM t1)
        UNION ALL
                 SELECT t1.a,
                    t1.b
                   FROM t1)
UNION ALL
         SELECT t1.a,
            t1.b
           FROM t1;
</pre>
</p>
<li>ルールとビューの定義出力で、USING 節で指定した列名に当てはまる列を後からビューの元テーブルに追加した場合について、修正されました  (Tom Lane) (9.3)</li>
<p>
以下のように別名が自動的に付与されるようになりました。
</p>
<pre>
db=# SELECT pg_get_viewdef('vv6', true);
      pg_get_viewdef
---------------------------
  SELECT tt11.x,          +
     tt11.y,              +
     tt12.z,              +
     tt13.q               +
    FROM tt11             +
      JOIN tt12 USING (x) +
      JOIN tt13 USING (z);
(1 row)

db=# ALTER TABLE tt11 ADD COLUMN z int;
db=# SELECT pg_get_viewdef('vv6', true);
        pg_get_viewdef
------------------------------
  SELECT tt11.x,             +
     tt11.y,                 +
     tt12.z,                 +
     tt13.q                  +
    FROM tt11 tt11(x, y, z_1)+
      JOIN tt12 USING (x)    +
      JOIN tt13 USING (z);
(1 row)
</pre>
<li>除去された列を含む複合型を返す関数を FROM句に持つビューの定義出力が修正されました  (Tom Lane) (9.3)</li>
<p>
以下のように不適切な出力になっていました。</p>
<pre>
db=# CREATE TABLE tt14t (f1 text, f2 text, f3 text, f4 text);
db=# INSERT INTO tt14t VALUES ('foo', 'bar', 'baz', 'quux');
db=# ALTER TABLE tt14t DROP COLUMN f2;
db=# CREATE FUNCTION tt14f() RETURNS SETOF tt14t AS $$
      declare rec1 record;
      begin
        for rec1 in select * from tt14t
          loop return next rec1; end loop;
      end; $$ language plpgsql;
db=# CREATE VIEW tt14v AS SELECT t.* FROM tt14f() t;
db=# SELECT pg_get_viewdef('tt14v', true);
            pg_get_viewdef
--------------------------------------
  SELECT t.f1,                       +
     t.f3,                           +
     t.f4                            +
    FROM tt14f() t(f1, "<>", f3, f4);
(1 row)
</pre>
</p>
<li>マスタープロセス(postmaster) が起動するときにシグナルをブロックするようになりました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本修正により、起動途中に INTシグナルを受けて終了する場合などで適切に各種リソースの後片付けができるようになります。
</p>
<li>pg_hba.conf のIPアドレスの替わりにホスト名が書かれた項目の処理について修正されました  (Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
DNS逆引き失敗について単に失敗とせず、確実に報告するようになりました。また、DNS逆引きにあたり pg_hba.conf の各ホスト名ではなく、接続対象のホストだけについて試みるようになりました。
</p>
<p>
「ERROR:  no pg_hba.conf entry for ...」メッセージが出て接続できないけれども原因が分かりにくいケースが報告されていました。
</p>
<li>rootユーザでも postgres コマンドの -C および --describe-config オプションが使用可能となりました  (MauMau) (9.3)(9.2)</li>
<p>
これらは起動中の PostgreSQLサーバの設定値を確認するオプションです。root で実行を禁止する理由が無いものと判断され、規制が緩められました。-C オプションは pg_ctl の中でも使われる場合があり、root で操作できないことで不都合がありました。
</p>
<li>リグレッションテスト実行中の一時的な PostgreSQLサーバプロセスの UNIXドメインソケットがより安全になるように修正されました  (Noah Misch) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまで make check コマンドによるリグレッションテストを実行している間、同ホスト内の OSユーザは PostgreSQLスーパーユーザとして接続可能であり、結果として任意のコードをテストを実行しているユーザとして実行可能でした。このことは CVE-2014-0067 として脆弱性として報告されていました。
</p>
<p>
本修正でソケットファイルを 0700 モードのサブディレクトリ下に作るようになり、他のユーザの接続を防ぎます。なお、Windows では ローカル TCP 接続を使用するため、本セキュリティリスクが残ります。
</p>
<li>テーブルスペース作成の WALリプレイが Windows で動作するように修正されました  (MauMau) (9.3)(9.2)(9.1)(9.0)</li>
<p>
既存のシンボリックリンクを削除する処理が、Windows の場合に対応していませんでした。削除に失敗して「ERROR:  could not remove symbolic link ...」が出ます。
</p>
<li>Windows でソケット作成失敗を正しく判断できるように修正されました  (Bruce Momjian) (9.3)(9.2)(9.1)(9.0)</li>
<p>
Windows の場合、障害がより後段の処理まで隠されてしまう可能性がありました。
</p>
<li>Windows で backend コンテキストの設定パラメータを設定ファイルから変更したときに新しい接続で適用できるようになりました  (Amit Kapila) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまでは、Windows では PostgreSQL再起動なしには変更を反映させることができませんでした。本来は、reload 後の次の新たな接続からは変更が反映されなければいけません。backend コンテキストの設定パラメータには log_connectionsや local_preload_libraries があります。
</p>
<li>Windows の実行パス名が適切にクオートされるようになりました  (Nikhil Deshpande) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本誤りにより Windows でインストールパスにスペースと「@」記号が含まれているとき、initdb と pg_upgrade が失敗することがありました。
</p>
<li>OS X で libpython のリンクについて修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまで使っていた方式は Xcode 5.0 以降で供給される Python ライブラリでは使用できませんでした。
</p>
<li>クライアントが取り込むよりも速くサーバがデータを送り続けた場合に、libpq のメモリ大量使用を回避するように修正されました  (Shin-ichi Morita, Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまで libpq は入力バッファ拡大を繰り返して、メモリ不足になり、「lost synchronization with server」エラーをひき起こしていました。
</p>
<li>libpq の接続時 LDAP 照会におけるタイムアウトについて修正されました  (Laurenz Albe) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまでタイムアウトが設定されておらず、LDAPサーバの応答が無い場合に長くハングアップすることがありえました。
</p>
<li>ecpg における char 型のポインタの配列の扱いについて修正されました   (Ashutosh Bapat) (9.3)(9.2)(9.1)(9.0)</li>
<p>
これまで、char型ポインタの配列を複数行を返す FETCH コマンドのターゲットとしたとき、全結果を最初の要素に格納するように動作していました。
</p>
<li>pg_dump が GROUP BY で元テーブルの主キーに依存したマテリアライズドビューを正しく処理できるように修正されました  (Tom Lane) (9.3)</li>
<p>
以下のように定義したマテリアライズドビューをダンプすると、「CREATE TABLE mat1 ...」という出力がされてしまいました。その結果、リストア時に「REFRESH MATERIALIZED VIEW mat1」に対して「ERROR:  "mat1" is not a table or materialized view」というエラーが発生していました。</p>
<pre>
db1=# CREATE TABLE t1 (id int PRIMARY KEY, v text);
db1=# CREATE MATERIALIZED VIEW mat1 AS (
        SELECT id, v FROM t1 GROUP BY id);
</pre>
</p>
<li>pg_dumpall の -i オプションのパースが修正されました  (Tom Lane) (9.3)</li>
<p>
pg_dumpall の -i はバージョンを無視するというオプションで、引数は取りませんが、以下のようなエラーが出ていました。なお、--ignore-version と指定した場合は正しく機能していました。</p>
<pre>
$ pg_dumpall -i > all.dump
pg_dumpall: オプションには引数が必要です -- i
</pre>
</p>
<li>pg_restore で古いスタイルのラージオブジェクトのコメントの処理にについて修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
8.4 以前バージョンの pg_dump で取得されたダンプで、多数のラージオブジェクトにコメントが付いていた場合に、リストアに失敗していました。
</p>
<li>pg_upgrade で旧バージョンでは TOASTテーブルを作らず、新バージョンで作るという場合について修正されました。  (Bruce Momjian) (9.3)(9.2)</li>
<p>
本障害は OID不一致によるエラーを引き起こします。
</p>
<p>
本障害に該当するのは比較的稀なケースです。9.0系から 9.1系の間で NUMERIC型のデータ長さの計算方法が変わっているので、それに連動してTOASTテーブルを作る、作らないが変わるということがありえました。
</p>
<li>pg_upgrade で pg_database.datminmxid と pg_class.relminmxid の旧バージョンにおける値を維持するか、妥当な値を入れるようになりました  (Bruce Momjian, &Aacute;lvaro Herrera, Tom Lane) (9.3)</li>
<p>
本修正は、バージョンアップ後にサーバ起動してすぐに autovacuum がデータベースクラスタ全体のスキャンを要求したり、凍結されていないマルチトランザクションID(MXID)値の追跡ができなくなったりするのを防ぎます。
</p>
<li>contrib/auto_explain 拡張モジュールが通常の EXPLAIN コマンドの出力内容を変えてしまうのが修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>
auto_explain が有効であるとき、EXPLAIN (ANALYZE, TIMING OFF) と指定して実行しても、タイミング情報が出力されていました。
</p>
<li>contrib/dblink 拡張モジュールでメモリリークが修正されました  (MauMau, Joe Conway) (9.3)(9.2)</li>
<p>
一つの SQL文実行の中でのメモリリークであり、本修正以前でも SQL完了後はメモリは解放されます。
</p>
<li>contrib/pgcrypto 拡張モジュールの関数が、処理が返る前に機微情報を確実にスタック変数から削除するように修正されました  (Marko Kreen) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>contrib/pgstattuple 拡張モジュールの pgstat_heap() 関数で解放済みメモリが使われるのを防ぐ修正がされました  (Noah Misch) (9.3)(9.2)</li>
<p>
バックエンドプロセスのクラッシュを引き起こす可能性がありました。
</p>
<li>contrib/uuid-ossp 拡張モジュールで、OSSP UUID ライブラリの状態をキャッシュするようになりました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
この改良により、UUID 生成が効率的になり、/dev/urandom からのエントロピーの汲み上げ量を減らすことができます。
</p>
<li>タイムゾーンデータが tzdata release 2014e に更新されました   (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
クリミア、エジプト、モロッコの夏時間法の変更が含まれます。
</p>
<li>hot_standby_feedback 設定が稼動中に off に変更された場合の振る舞いが修正されました  (Simon Riggs) (9.2)(9.1)</li>
<p>
スタンバイサーバが明示的にプライマリサーバに以降はフィードバックを送らないと示すようになりました。
</p>
<li>プランナの入れ子になったプレースホルダ値の誤った扱いが修正されました  (Tom Lane) (9.2)</li>
<p>
Nested Loop が入れ子になっている実行プランのとき、以下のエラーが出るケースがありました。</p>
<pre>
ERROR: variable not found in subplan target list
</pre>
</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.0.17 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-17/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 20 Mar 2014 01:01:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2415</guid>

					<description><![CDATA[このリリースは 9.0.16 からの修正リリース(2014/3/20リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.15 より前のバージョンからアップデートを行う場合は 9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.16 からの修正リリース(2014/3/20リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.15 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-15/">9.0.15 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2415"></span></p>
<h3 class="background">PostgreSQL 9.0.16 から 9.0.17 への変更点</h3>
<p>9.3.4、9.2.8、9.1.13、9.0.17、8.4.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>更新済みタプルをロックする WALリプレイについて修正されました。(Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<p>
本障害により、更新された行がインデックススキャンで見つからず、インデックススキャンが使われるかどうかで一貫性のない問い合わせ結果が生じていました。本障害は、不適切な WALリプレイによって生じます。したがって、リカバリ中であるかスタンバイサーバである場合に発生します。
</p>
<p>
典型的には、外部キー制約で被参照行の更新と参照行の挿入が並行して行われるときに発生します。本障害により制約違反の行が挿入される可能性があります。
</p>
<p><P><br />
データ破損が生じるため、不具合の解消には、バージョンアップ後にスタンバイサーバの作り直しが必要となります。<br />
</P><br />
<P><br />
本障害については <a href="https://wiki.postgresql.org/wiki/20140320UpdateIssues#Recovery_Index_Corruption_Issue">PostgreSQL wiki</a> に詳しい説明があります。<br />
</P></p>
<li>GIN の WALリプレイでページ破損リスクを完全に回避するようになりました。(Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4) </li>
<p>
本障害により、理論的には GIN インデックスのメタページが壊れる可能性がありました。ただし、メタページは一般的な 512バイトのディスクセクタより小さいため、実際には問題は起きないと考えられます。
</p>
<li>NOTIFY を受け取る際のトランザクションコミット競合を防止するようになりました (Marko Tiikkaja) (9.3)(9.2)(9.1)(9.0)</li>
<p>
NOTIFY 送信者によって作られる最新データが見えるようになる前に、受信側の高速なクライアントが通知に反応するかもしれないシナリオを防ぎます。
</p>
<li>マテリアライズドビューが UPDATE、DELETE から参照できるようになりました。 (Michael Paquier) (9.3)</li>
<p>
以下のように DELETE、UPDATE 内で参照された場合にエラーが発生していました。
</p>
<pre>
db=# CREATE TABLE base ( id int primary key );
db=# CREATE MATERIALIZED VIEW mv AS SELECT * FROM base;
db=# CREATE TABLE d ( id int primary key );
db=# DELETE FROM d WHERE EXISTS ( SELECT * FROM mv WHERE mv.id = d.id );
ERROR: cannot lock rows in materialized view "mv"
</pre>
<li>正規表現操作の素早いキャンセルができるようになりました。 (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本修正により、複雑な正規表現がバックエンドプロセスが割り込みできない状態で長時間固まってしまうケースを防止します。
</p>
<li>単一要素の行に対し OVERLAPS を実行しようとする誤ったコードが除去されました。 (Joshua Yanovski) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
OVERLAPS は、２組の日付時刻に対してのみ使用可能な演算子です。単一要素行の組に対する使用は SQL標準ではなく、ドキュメントにも記載されていません。以下に、正しい実行例、正しいエラー例、本障害のエラー例を示します。
</p>
<pre>
(正しい実行例)
=# SELECT ROW (DATE '2013-01-12', DATE '2014-02-01') OVERLAPS
          ROW (DATE '2011-10-01', DATE '2013-02-10');
 overlaps
----------
 t
(1 row)
　※「ROW」は省略可能

(正しいエラー例)
=# SELECT ROW (DATE '2013-01-12', DATE '2014-02-01', DATE '2016-01-01')
 OVERLAPS ROW (DATE '2011-10-01', DATE '2013-02-10', DATE '2015-01-01');
ERROR:  wrong number of parameters on left side of OVERLAPS expression

(本障害の不適切なエラー例)
=# SELECT ROW (DATE '2014-02-01') OVERLAPS ROW (DATE '2011-10-01');
ERROR:  unrecognized node type: 656
</pre>
<li>クエリのデパーズ時に AccessShareLock 以上のロックを取らないように修正されました (Dean Rasheed) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
クエリのデパーズとは解析（パーズ）済みのデータから SQL を再構成する処理です。ビューやルールの定義を出力するときに使われます。典型的にはpg_dump や psql の d で行われる処理です。
</p>
<p>
pg_dump が「INSERT INTO t ... 」を含むルールのデパーズをするとき、 t テーブルに RowExclusiveLock が発生していました。これはUPDATE、DELETE、INSERT 実行時と同レベルのロックであり、pg_dump は参照のみ行うという一般的な理解に反する動作でした。
</p>
<li>実行プラン作成時にインデックスの端点を確認する処理の性能が改善されました (Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
インデックス末尾に未コミット行が多数あるとき、本修正で大幅に性能改善されます。連番やタイムスタンプをキーとして行を追加しているときには、よくある状況です。
</p>
<li>プランナが「値 IN ( リスト )」や「値 比較演算子 ANY ( 配列 )」という式で、右側が固定式なら、デフォルトの選択率見積処理を使わないようになりました (Tom Lane) (9.3)</li>
<li>DROP DATABASE コマンドでデータベース毎の実行時統計情報ファイルを正しく削除するようになりました (Tomas Vondra) (9.3)</li>
<p>
実行時統計情報は、稼動中は一時ファイル (stats_temp_directory で指定されたディレクトリ下のファイル) に、停止時には永続ファイル($PGDATA/pg_stat 以下のファイル) に書きこまれます。
</p>
<p>
本修正により永続ファイルの削除漏れを防ぎます。これまで誤って一時ファイルの方を削除しており、永続ファイルが残ってしまいました。
</p>
<p>
残っている不要な実行時統計情報ファイルを特定するには以下の SQL でデータベースの OID 番号を調べ、ファイル名の番号との対応づけを調べます(ただし、db_0.stat ファイルは特別であり、削除してはいけません)。
</p>
<pre>
SELECT oid, datname FROM pg_database ORDER BY oid;
</pre>
<li>walsenderプロセスが自身の負荷が高いときに不適切に切断してしまう障害が修正されました (Andres Freund, Heikki Linnakangas) (9.3)</li>
<p>
walsender は wal_sender_timeout 設定に基づき、クライアント（スタンバイサーバなど）に pingメッセージを送り、そのレスポンスを確認して、接続が有効かを判断します。<br />
</P><br />
<P><br />
walsender は WALデータ送信で絶えず忙しい場合、クライアントへのpingメッセージ送信に失敗していました。にもかかわらず、レスポンスを期待しており、時間経過して応答が無いことで切断をしていました。
</p>
<li>クライアントが pg_receivexlog であるとき、walsenderプロセスが正常停止に失敗するのが修正されました (Fujii Masao) (9.3)(9.2)(9.1)</li>
<p>
pg_receivexlog が接続している状態で、サーバプロセスを fastモードで停止させようとしても、wal sender process だけ残り、タイムアウトまで待たされて失敗していました。
</p>
<pre>
$ pg_ctl stop -m fast
waiting for server to shut
down............................................................... failed
pg_ctl: server does not shut down

$ ps x
  PID TTY      STAT   TIME COMMAND
 8489 pts/2    S      0:00 /home/postgres/pgsql/9.3.3/bin/postgres
 8490 ?        Ss     0:00 postgres: logger process
 8498 pts/2    S      0:00 pg_receivexlog -h localhost -D .
 8499 ?        Ss     0:00 postgres: wal sender process postgres ::1(46481) stre
   :
</pre>
<li>クラッシュリカバリ時に wal_level と hot_standby パラメータのチェックが正しく行われるように修正されました (Heikki Linnakangas) (9.3)(9.2)</li>
<p>
最初はクラッシュリカバリ処理をする場合でも、その後にアーカイブリカバリをしたり、hot_standby アクセスを受け付けたりするのであれば、それに見合ったwal_level 設定が必要で、これらをチェックするように修正されています。
</p>
<li>クラッシュリカバリにてホットスタンバイ接続が可能かの判定が修正されました (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p><P><br />
その後にアーカイブリカバリが続くクラッシュリカバリの場合で、既に可能な段階であるにもかかわらず、ホットスタンバイ接続が許されませんでした。<br />
</P></p>
<li>読み取り専用の設定パラメータ data_checksums が追加されました (Heikki Linnakangas) (9.3)</li>
<p>
initdb 時にページチェックサムを有効にしたかどうかを true、false で示します。
</p>
<li>ERROR でないログメッセージ出力中の割り込みが防止されました (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
syslog への出力途中で割り込みが発生し、割り込み処理中に syslog 出力が発生することで、デッドロック状態になってしまう可能性がありました。接続時にハングアップする障害が報告されていました。
</p>
<li>PL/Perl で複合型データを返すときのメモリリークが修正されました (Alex Hunsaker) (9.3)(9.2)(9.1)</li>
<p>
複数の OUT パラメータを使う場合も該当します。
</p>
<li>psql でスクリプトから copy を実行する際のエラー行番号の誤りが修正されました (Kumar Rajeev Rastogi, Amit Khandekar) (9.3)(9.2)</li>
<p>
copy で外部ファイルを指定したときにその行数が含まれてしまっていました。
</p>
<pre>
(例 t.tsv は 100行のデータ)

$ cat scr.sql
DELETE FROM t;
copy t FROM 't.tsv'
SELECT error_sql;

$ psql -f scr.sql
DELETE 100
psql:scr.sql:104: ERROR:  column "error_sql" does not exist
LINE 1: SELECT error_sql;
</pre>
<li>postgres_fdw 拡張モジュールが複数の結合条件を適切に扱えるように修正されました (Tom Lane) (9.3)</li>
<p>
以下のように外部テーブルの結合にて複数の結合条件がある場合が該当します。
</p>
<pre>
SELECT * FROM ft2 a, ft2 b
  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);
SELECT * FROM ft2 a, ft2 b
  WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7);
</pre>
<p><P><br />
アサート有効でビルドしている場合にアサート失敗をひき起こしていました。また、アサート無効である場合には、安全でない WHERE句がリモートサーバに送られてしまい、エラーや誤った応答をひき起こす可能性があります。</p>
<li>Windows で時々生じる「could not reserve shared memory region」エラーを防ぐようになりました (MauMau) (9.3)(9.2)(9.1)(9.0)</li>
<p>
Windows 8 / 2012 Server で以下のようなメッセージがでて接続に失敗する例が報告されていました。アドレス空間配置のランダム化を無効にするビルドオプションを加えて対応しています。
</p>
<pre>
LOG:  could not reserve shared memory region (addr=...) for child ...
LOG:  could not fork new process for connection: A blocking operation was
      interrupted by a call to WSACancelBlockingCall.
</pre>
<li>タイムゾーンデータが tzdata release 2014a に更新されました (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</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.0.16 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-16/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 20 Feb 2014 01:01:43 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2478</guid>

					<description><![CDATA[このリリースは 9.0.15 からの修正リリース(2014/2/20リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.15 より前のバージョンからアップデートを行う場合は 9 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.15 からの修正リリース(2014/2/20リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.15 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-15/">9.0.15 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2478"></span></p>
<h3 class="background">PostgreSQL 9.0.15 から 9.0.16 への変更点</h3>
<p>9.3.3、9.2.7、9.1.12、9.0.16、8.4.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>ロールに対する GRANT ... WITH ADMIN OPTION の制限が強化されました  (Noah Misch) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
ADMIN OPTION 無しでロールに権限を与えることで、そのロールにはメンバー追加削除できないことが期待されます。しかし、SET ROLE コマンドを先に行うという抜け道がありました。
</p>
<p>
本障害は CVE-2014-0060 として登録されています。
</p>
<pre>
(例)
$ psql -U u1 db1
db1=> ?du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 g1        | Cannot login                                   | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 u1        |                                                | {g1}
 u2        |                                                | {}
db1=> GRANT g1 TO u2;
ERROR:  must have admin option on role "g1"
db1=> SET ROLE g1;
SET
db1=> GRANT g1 TO u2;
GRANT ROLE
db1=> REVOKE g1 FROM u2;
REVOKE ROLE
</pre>
<li>手続き言語の有効性検証関数の手動呼び出しによる特権昇格を防止するようになりました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
手続き言語の有効性検証関数（PL validator）は、暗黙的に CREATE FUNCTION実行時に呼ばれますが、明示的に関数呼び出しすることもできます。これを利用した特権昇格(privilege escalation) が可能<br />
でした。
</p>
<p>
本修正では、付属する手続き言語について、有効性検証関数に権限チェック処理を加えました。外部配布の手続き言語についても、同様の問題があるかもしれません。
</p>
<p>
本障害は CVE-2014-0061 として登録されています。
</p>
<li>並行した DDL によるテーブルやインデックスの照合を避けるようになりました  (Robert Haas, Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
DDLコマンドを並行して複数実行しているときの DDLコマンド実行過程で、テーブル・インデックスを名前から実体を特定したとき、実行部分によって異なるものが選ばれてしまうことがありました。これを使い、少なくとも CREATE INDEX で、インデックス作成対象と異なるテーブルに権限チェックが行われ、特権昇格が可能でした。
</p>
<p>
本障害は CVE-2014-0062 として登録されています。
</p>
<li>長い日付時刻文字列に対するバッファーオーバーランを防ぐようになりました  (Noah Misch) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
interval型の出力と timestamp型の入力において、処理用の固定バッファサイズが可能な最大サイズと比べて小さく、バッファオーバーランをひき起こす可能性がありました。また、ecpgライブラリにも同様の問題がありました。
</p>
<p>
本障害は CVE-2014-0063 として登録されています。
</p>
<li>整数オーバーフローによるバッファーオーバランを防ぐようになりました  (Noah Misch, Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
いくつかの組み込み関数（大部分はデータ型入力関数）でメモリサイズ計算値がオーバーフローのチェックなしに使われていました。整数オーバーフローが生じると過小なメモリ確保サイズとなり、バッファオーバーランをひき起こします。
</p>
<p>
hstore、intarray、ltree の各追加モジュールと、path型、ビット列データ型、全文検索(tsquery)、txid_current_snapshot()、txid_snapshot_recv() 関数、にて修正されています。
</p>
<p>
本障害は CVE-2014-0064 として登録されています。
</p>
<li>潜在的なバッファオーバーラン危険性が修正されました  (Peter Eisentraut, Jozef Mlich) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
実装において strcpy() や strncpy() が strlcpy() に置き換えられました。実際に問題が発現するかは不明で、Coverityツールによるチェック結果に対応した修正となります。
</p>
<p>
本障害は CVE-2014-0065 として登録されています。
</p>
<li>chkpass追加モジュールが crypt() から NULL が返ることでクラッシュするのを防ぐようになりました  (Honza Horak, Bruce Momjian) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
起こりうるケースとしては、libc が許可されていないハッシュアルゴリズムを拒否するように構成されている場合 (FIPS モードなど) があります。
</p>
<p>
本障害は CVE-2014-0066 として登録されています。
</p>
<li>ドキュメントに再帰テスト(regression test) 実行時の注意事項が追記されました  (Noah Misch, Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
make check により一時的な PostgreSQL サーバプロセスを起動する間、そこには同マシンからパスワード認証なしでアクセス可能となり、テストを実行した OS上のユーザの権限を不正利用される潜在的な危険性がありました。
</p>
<p>
ドキュメントに同マシンに信頼できないユーザがいる際にリスクがあるという警告が記載されました。
</p>
<p>
本問題は CVE-2014-0067 として登録されています。
</p>
</p>
<li>タプル凍結のロジックが修正されました  (&Aacute;lvaro Herrera, Andres Freund) (9.3)</li>
<p>
これまで共有行ロックの制御に使われる MultiXactId の凍結を伴う場合に正しく処理できていませんでした。古い共有行レベルロックが忘れられてしまう可能性があります。
</p>
<p>
修正にあたって WALレコードの書式が変更されました。レプリケーションをしている場合、スタンバイサーバを先にバージョンアップする必要があります。プライマリを先にバージョンアップして、プライマリから凍結処理をする WALレコードを受け取ったスタンバイ側サーバは、PANIC メッセージを出して止まってしまいます。
</p>
<li>MultiXactId 凍結に関する設定パラメータが追加されました  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
マルチトランザクションID (MultiXactId、mutixact) は、共有行ロックを実現するものです。各タプル(行バージョン) の 削除時トランザクションID(XID) と同じ場所に格納され、infomaskフラグにより<br />
 MultiXactId であることが識別されます。
</p>
<p>
通常のタプルの XID と同様に 古くなりすぎる前にタプルの MultiXactId を凍結しなければいけません。これまでは autovacuum_freeze_max_age やvacuum_freeze_min_age、vacuum_freeze_table_age な<br />
どの XID 凍結用のパラメータを MultiXactId にも適用していました。
</p>
<p>
しかし、XID と MultiXactId で進行スピードが大きく異なるとき、うまく動作しません。そのため、専用のパラメータが新設されました。
</p>
<pre>
(追加された設定パラメータ)
vacuum_multixact_freeze_min_age
vacuum_multixact_freeze_table_age
autovacuum_multixact_freeze_max_age
</pre>
<li>UPDATE により共有行ロックの伝搬が無視されてしまう障害が修正されました  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
行がトランザクションＡにロックされていて、その行がトランザクションＢによって UPDATE されたなら、その時点でトランザクションＢからしか見えない行データであるとしても、更新後の行は引き続きトランザクションＡによってロックされているべきです。
</p>
<p>
本障害で、トランザクションＢにおけるその後の DELETE や UPDATE にて、ロックのチェックが抜けていました。これにより読み取り整合性が崩れてしまいます。
</p>
<p>
以下に再現シナリオを示します。
</p>
<pre>
トランザクションＡ             トランザクションＢ
BEGIN;                         BEGIN;
SELECT * FROM t1
 WHERE id = 1 FOR KEY SHARE;
                               DELETE FROM t1 WHERE id = 1;
                               (⇒ ブロックする／正しい動作）
ROLLBACK;
                               ROLLBACK;

BEGIN;                         BEGIN

SELECT * FROM t1
 WHERE id = 1 FOR KEY SHARE;
                               UPDATE t1 SET v = 10001 WHERE id = 1;
                               (⇒ キー以外の更新はブロックしない／正しい動作)

                               DELETE FROM t1 WHERE id = 1;
                               (⇒ ブロックしない／誤った動作)

                               COMMIT;
SELECT * FROM t1 WHERE id = 1;
(⇒ (0 rows) となる／想定外の結果)

COMMIT;
</pre>
<li>同時実行トランザクションで行ロックが無視されてしまう可能性があり、修正されました。  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
上記項目とは別の原因で共有行ロックが無視されてしまいます。外部キー制約によりブロックされているべき状況で UPDATE できてしまう可能性がありました。
</p>
<li>更新連鎖ロックの誤ったロジックが修正されました。  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
REPEATABLE READ または SERIALIZABLE 隔離レベルのトランザクションにて、本来出るべきでない直列化失敗エラー「ERROR: could not serialize access due to concurrent update」をひき起こします。
</p>
<li>pg_multixact/members が正しく周回処理されるように修正されました。  (Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<p>
pg_multixact/members ディレクトリ内のファイル群は、共有行ロック(select ... for share) を制御するものです。2^32 (約42億) の要素を扱うことができ、これを超えたときの周回処理に不具合がありました。
</p>
<p>
以下のようなエラーが出ることが報告されています。
</p>
<pre>
error:  could not access status of transaction 24568845
detail:  could not open file "pg_multixact/members/f615": no such file or directory.
</pre>
<li>pg_multixact/members の 5桁ファイル名の扱いが修正されました  (&Aacute;lvaro Herrera) (9.3)</li>
<p>
PostgreSQL 9.3 から pg_multixact/members 以下に 5桁以上のファイル名がありえましたが、ディレクトリ内をクリーンアップする処理でそれらを無視するようになっていました。
</p>
<li>マルチトランザクションID のキャッシュ処理の性能が改善されました  (&Aacute;lvaro Herrera) (9.3)</li>
<li>同一トランザクション内でロックされている行の更新が最適化されました  (Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<p>
SELECT FOR UPDATE に続く、UPDATE と DELETE が性能改善されます。DBT2試験で PostgreSQL 9.2.x と比べて 15％程度の性能ダウンが報告されていました。
</p>
<li>リカバリ時の pg_xlog と WALアーカイブのファイル選択順序が変更されました  (Kyotaro Horiguchi) (9.3)</li>
<p>
アーカイブリカバリにおいて、pg_xlog と WALアーカイブに同ID でタイムラインが異なる WALセグメントファイルがあった場合、これまで WALアーカイブにある方が優先されていましたが、タイムライン<br />
が新しい方を選択するようになりました。
</p>
<p>
これまでの振る舞いでは、未だアーカイブされていない WALセグメントファイルをリカバリに適用できないことがありました。
</p>
<li>リカバリで誤った更新の適用が生じる可能性があり、修正されました  (Greg Stark, Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
WAL更新が誤って本来の位置よりも先にあるページに適用されることがありえました。
</p>
<p>
リカバリ中のサーバ（スタンバイサーバ）において、ファイルの肥大化やデータ破壊を引き起こします。肥大化はファイル末尾よりも先の位置のページに書き込みが生じるために起こります。
</p>
<li>リカバリが一貫性のあるところまで到達したかの判定が修正されました  (Tomonari Katsumata, Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
本障害により、hot_standby モードのリカバリ中サーバ（スタンバイサーバ）が参照アクセスの接続を受け付けるのが早すぎて、「PANIC: WAL contains references to invalid pages」によるサービスダ<br />
ウンが生じる可能性がありました。
</p>
<li>VACUUM処理における可視性マップのビットセットの WAL出力が修正されました  (Heikki Linnakangas) (9.3)</li>
<p>
該当する VACUUM処理について出力した WAL でリカバリしたときに、あるページに削除済み行が残っているのに可視性マップ（ビジビリティマップ）では、全て可視であるとされるケースが生じていました。
</p>
<li>ホットスタンバイの VACUUM 操作の WAL リプレイで、Btreeインデックスの不適切なロック処理が修正されました  (Andres Freund, Heikki Linnakangas, Tom Lane) (9.3)(9.2)(9.1)(9.0)</li>
<p>
WALリプレイ過程で、全てゼロの使われないインデックスページのスキャンで「PANIC: WAL contains references to invalid pages」が生じて止まってしまう可能性がありました。
</p>
<p>
インデックス への VACUUM のリプレイで追加ロックを取る条件が正しくなく、誤ったページが読み取りされるおそれがありました。
</p>
<p>
インデックスの最後のページが全てゼロである場合に正しく処理されませんでした。
</p>
<li>非リーフの GIN インデックスページ挿入において、適宜にページ全体の WAL 記録をするようになりました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
システムクラッシュ時にインデックスが破損する危険がありました。
</p>
<li>recovery.conf での pause_at_recovery_target と recovery_target_inclusiveを on に指定したとき、目標点の後で停止するようになりました  (Heikki Linnakangas) (9.3)(9.2)(9.1)</li>
<p>
これまで pause_at_recovery_target = true の場合、たとえrecovery_target_inclusive = true であってもリカバリは目標点の手前で停止していました。その後、pg_xlog_replay_resume() を実行すると、目標点の WALレコードをリカバリしてからリカバリを終了しますので、リカバリ停止して確認した時点より、１歩進んだ状態となってしまいます。
</p>
<li>ホットスタンバイのフィードバック送信が確実に行われるようになりました  (Andres Freund, Amit Kapila) (9.3)</li>
<p>
これまで walsenderプロセスが忙しいとき、ホットスタンバイからのフィードバックが送られない動作となっていました。
</p>
<li>タイムアウト制御について修正されました  (Andres Freund, Tom Lane) (9.3)</li>
<p>
PostgreSQL 9.3.2 の修正で導入されてしまった障害です。statement_timeout を使っているアプリケーションでは、タイムアウト発生時に奇妙なエラーが生じる可能性があります。
</p>
<p>
本障害により「PANIC: stuck spinlock」等の PANIC が生じてサーバ全体がダウンしたり、停止できないバックエンドプロセスが生じるケース等が報告されています。
</p>
<li>プロセス終了時における処理の競合が修正されました  (Robert Haas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
プロセス終了時の特定タイミングで SIGUSR1 等のシグナルを受け取った際にバックエンドプロセスのクラッシュをひき起こす可能性がありました。
</p>
<li>walsender、walreceiver のプロセス終了時に SIGHUP シグナルを受けた際の処理の競合が修正されました  (Tom Lane) (9.3)(9.2)(9.1)</li>
<li>エラーメッセージ出力部分で安全でないエラー番号の参照が修正されました  (Christian Kruse) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
Clangベースのコンパイラでビルドした場合で HINT メッセージに適切な内容が出力されないという障害が報告されていました。
</p>
<li>PostgreSQL実装内におけるエラーレポート関数の利用について修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
メモリコンテキストの初期化が済んでいない段階でエラーレポート関数が使われて、エラーメッセージが出るべきところでクラッシュするケースがありました。
</p>
<li>SSL接続を受けたバックエンドプロセスが、クライアント側の突然の切断後にハングアップする問題が修正されました。  (Alexander Kukushkin) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>Unicodeエスケープ形式で書かれた識別子の長さチェックメッセージがエスケープ解釈前の文字列長で行われており、修正されました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
あくまで奇妙なメッセージが出るだけの問題です。
</p>
<pre>
(例：識別子最長は 63バイト)
db=# SELECT octet_length(U&'?0441?043B?043E?043D?0441?043B?043E?043D?0441?043B?043E?043D?0441?043B?043E?043D');
 octet_length
--------------
           32

db=# CREATE TABLE t1 (U&"?0441?043B?043E?043D?0441?043B?043E?043D?0441?043B?043E?043D?0441?043B?043E?043D" text);
NOTICE:  identifier "слонслонслонслон" will be truncated to "слонслонслонслон"
CREATE TABLE

db=# CREATE TABLE t2 ("слонслонслонслон" text);
CREATE TABLE
</pre>
<li>コマンド末尾または関数本体末尾における Unicodeリテラルと Unicode識別子の構文解析が修正されました  (Tom Lane) (9.3)</li>
<li>型名キーワードがロール名リストで使えるようになりました。  (Stephen Frost) (9.3)(9.2)(9.1)(9.0)</li>
<p>
型名キーワード(type_func_name_keyword) とは、型名または関数名でクオート無しに利用可能なキーワードです。BINARY、COLLATION、LIKE、IS などが含まれます。9.3.1 (その他 2013/10/10 リリースマイナーバージョン) でキーワードの利用制限が緩められましたが、ロール名リストで利用できませんでした。
</p>
<pre>
(従来の使えない場合の例)
db=# CREATE ROLE like;
CREATE ROLE
db=# CREATE ROLE is;
CREATE ROLE
db=# DROP ROLE like, is;
ERROR:  syntax error at or near "like"
LINE 1: DROP ROLE like, is;
</pre>
<li>カラムの無いテーブルに対する EXISTS サブクエリを含む SQL の構文解析でクラッシュする障害が修正されました  (Tom Lane) (9.3)(9.2)(9.1)</li>
<pre>
(例)
db=# CREATE TABLE zero_column_table ();
db=# SELECT 1 WHERE EXISTS (SELECT * FROM zero_column_table);
The connection to the server was lost. Attempting reset: Failed.

LOG:  server process (PID 1234) was terminated by signal 11: Segmentation fault
DETAIL:  Failed process was running: SELECT 1 WHERE EXISTS (SELECT * FROM zero_column_table);
</pre>
<li>「WHERE (... x IN (SELECT ...) ...) IN (SELECT ...)」という形の条件式を持つ SQL に誤ったプランが作られ、クラッシュする障害が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<pre>
(クラッシュする SQL例)
db=# CREATE TABLE ta AS SELECT 1 AS a1, 1 AS a2;
db=# CREATE TABLE tb AS SELECT 1 AS b1, 1 AS b2;
db=# SELECT * FROM ta
  WHERE (CASE WHEN a1 IN (SELECT b1 FROM tb) THEN a1 ELSE NULL END)
    IN (SELECT b2 FROM tb);
The connection to the server was lost. Attempting reset: Failed.

LOG:  server process (PID 1234) was terminated by signal 11: Segmentation fault
</pre>
<li>LATERAL 構文を使った外部結合についてプランナが修正されました。  (Tom Lane) (9.3)</li>
<p>
以下の SQL で「ERROR: JOIN qualification cannot refer to other relations」が出る障害が報告されました。
</p>
<pre>
SELECT * FROM (SELECT 1 AS x) x
  CROSS JOIN (SELECT 1 AS y) y
  LEFT JOIN LATERAL
   ( SELECT * FROM (SELECT 1 AS z) z WHERE z.z = x.x) z ON z.z = y.y;
</pre>
<li>UPDATE/DELETE における対象テーブルへの LATERAL参照が修正されました。  (Tom Lane) (9.3)</li>
<p>
PostgreSQL 9.3 から LATERAL構文に対応して、同じサブクエリ階層にある別テーブルを参照できるようになりました。このとき UPDATE、DELETE については以下のように「LATERAL」と書かなくとも、同階層のテーブルを参照できてしまっていました。
</p>
<pre>
UPDATE ta SET a2 = ss.b2 FROM (SELECT * FROM tb where b1 = ta.a1) ss;
DELETE FROM ta USING (SELECT * FROM tb where b1 = ta.a1) ss;
</pre>
<p>
本修正で上記はエラーとなります。本来は以下のように「LATERAL」を記述しなければいけません。
</p>
<pre>
UPDATE ta SET a2 = ss.b2 FROM LATERAL (SELECT * FROM tb where b1 = ta.a1) ss;
DELETE FROM ta USING LATERAL (SELECT * FROM tb where b1 = ta.a1) ss;
</pre>
<li>サブクエリに UNION ALL を含む、継承テーブルへの UPDATE、DELETE について修正されました。  (Tom Lane) (9.3)(9.2)</li>
<p>
該当する形状の SQL で誤った動作が発生していました。典型的には子テーブルに対して、UPDATE、DELETE が適用されないという挙動になります。
</p>
<pre>
(再現例)
CREATE TABLE t_inh_p (k int, c int);
CREATE TABLE t_inh_sub () INHERITS (t_inh_p);
CREATE TABLE t_other (k int);
INSERT INTO t_inh_p VALUES (1,1),(2,2);
INSERT INTO t_inh_sub VALUES (1,1),(2,2);
INSERT INTO t_other VALUES (1),(2);

UPDATE t_inh_p SET c = c + 100
  FROM ( SELECT k FROM t_other UNION ALL SELECT k + 1 FROM t_other ) ss
    WHERE t_inh_p.k = ss.k;

SELECT tableoid::regclass::text, * FROM t_inh_p;

(以下のように子テーブルの c が +100 されません)
 tableoid  | k |  c
-----------+---+-----
 t_inh_p   | 1 | 101
 t_inh_p   | 2 | 102
 t_inh_sub | 1 |   1
 t_inh_sub | 2 |   2
</pre>
<li>範囲データ型のドメインのカラムに対する ANALYZE が失敗する障害が修正されました  (Tom Lane) (9.3)</li>
<p>
以下にエラー発生例を示します。
</p>
<pre>
db=# CREATE DOMAIN d_rts AS tstzrange;
db=# CREATE TABLE t_dm (c d_rts);
db=# ANALYZE t_dm;
ERROR:  type 26739 is not a range type
</pre>
<li>ANALYZE で全ての値が大きいサイズのカラムに対応しました。  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
ANALYZE でカラム統計情報を収集する際に、メモリ使用量を抑えるため定数値 WIDTH_THRESHOLD (1024 バイト) を超える値をスキップするようにはなっていましたが、全ての値が閾値を超えていると当該<br />
カラムついて正しく統計情報を取得できない結果となっていました。
</p>
<li>デフォルトテーブルスペースに対して CREATE TABLE を実行する際に、テーブルスペースにおける CREATE権限のチェックは行わなくなりました  (Stephen Frost) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまで CREATE TABLE では権限チェックがされていない一方で、ALTER TABLE ... SET TABLESPACE で権限チェックが行われていました。
</p>
<li>イベントトリガーの拡張モジュール対応誤りが修正されました  (Tom Lane) (9.3)</li>
<p>
CREATE EXTENSION コマンド経由で CREATE EVENT TRIGGER コマンドを実行しても拡張モジュールへの所属が登録されませんでした。また、拡張モジュール所属のイベントトリガが pg_dump でダンプ対象から除外されませんでした。
</p>
<li>CASE が複数行を返す関数を戻り式としているときエラーがでる問題が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
エラー「ERROR: set-valued function called in context that cannot accept a set」が生じます。
</p>
<p>
以下はエラーをひき起こす SQL 例です。regexp_matches は、本SQL で与えられる引数では 1行しか返しませんが、定義としては複数行を返す関数です。
</p>
<pre>
 SELECT *, lower(CASE
   WHEN id = 2 THEN (regexp_matches(str, '^0*([1-9]?d+)$'))[1]
   ELSE str END)
  FROM (VALUES (1,''), (2,'0000000049404'), (3,'FROM 10000000876'))
       v(id, str);
</pre>
<p>
本障害は 8.0 から存在していましたが、8.4 以降バージョンのみ修正されます。
</p>
<li>JSON関数で処理後に一時的に確保したメモリを解放するようになりました  (Craig Ringer) (9.3)</li>
<li>JSON型データ生成で不正な数値を適切に判別できるように修正されました  (Andrew Dunstan) (9.3)(9.2)</li>
<p>
以下のように money型にキャストして $ 付きのまま JSONデータ内に格納できてしまうけれども、要素の取り出し時点でエラーとなるケースが報告されました。
</p>
<pre>
db=# SELECT to_json(a) FROM (VALUES(1000::money)) a(salary);
        to_json
-----------------------
 {"salary":$1,000.00}
(1 row)

db=# SELECT to_json(a)->'salary' FROM (VALUES(1000::money)) a(salary);
ERROR:  invalid input syntax for type json
</pre>
<li>pg_stat_activity ビューで使われる関数でクライアントアドレスがゼロかチェックする箇所が修正されました。  (Kevin Grittner) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
クライアントアドレスの表示で誤った動作をする可能性がありますが、ほとんどの場合に発生しません。本障害は障害報告ではなくコード解析によって発見されました。
</p>
<li>テキスト全文検索（tsearch）にて、一部のマルチバイト文字について障害が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
検索されるべきでない要素が結果に含まれてしまう可能性がありました。
</p>
<li>テキスト全文検索の実装にて memcopy() の替わりに memmove() を使うように修正されました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
具体的な障害報告は出ていませんが、誤った結果が返ったり、クラッシュをひき起こしたりする可能性がありました。
</p>
<li>pg_basebackup コマンドに対応したサーバ側実装において、権限チェックを行う位置が変更されました。  (Andres Freund, Magnus Hagander) (9.3)(9.2)(9.1)</li>
<p>
これまでシステムテーブルへの不要なアクセスが生じていました。
</p>
<li>ロケールチェック用で文字エンコーディング名 SHIFT_JIS に対応しました  (Tatsuo Ishii) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
RHEL 6.x などで以下のように ja_JP.SJIS ロケールを設定した場合に該当します。クライアントコマンド実行時に警告が出力されていました。
</p>
<pre>
# localdef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS
# export LANG=ja_JP.SJIS
# createdb -U postgres testdb
could not determine encoding for locale "ja_JP.SJIS": codeset is "SHIFT_JIS"
</pre>
<li>SQL関数の複合型引数に対する「*」を使った指定における障害が修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>
$1.* は動作しますが、x.* は動作しませんでした。関数定義時にバックエンドプロセスのクラッシュが生じる障害が報告されました。
</p>
<pre>
(例)
db=# CREATE TABLE foo ( x int ) ;
db=# CREATE FUNCTION zzz(v foo) RETURNS VOID AS $$
       INSERT INTO foo(x) VALUES (v.*) $$ language SQL;
The connection to the server was lost. Attempting reset: Failed.

LOG: server process (PID 1234) was terminated by signal 11: Segmentation fault
</pre>
<li>libpq が Windows で host も hostaddr も指定しない場合、localhost が接続先となるように修正されました  (Fujii Masao) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
localhost になることはドキュメントに記載されていましたが、実装がそのようになっていませんでした。
</p>
<li>psql で COPY TO STDOUT、COPY FROM STDIN におけるエラー時の処理がいくつか修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
9.2 以上のサーバで COPY FROM STDIN 実行中に切断した場合に無限ループに陥る可能性がありました。また、プロトコルバージョン 2 のサーバに対して無限ループに陥る可能性がありました。
</p>
<li>psql の ?df+、?dc+、?dC+ における翻訳可能カラム指定が修正されました  (Peter Eisentraut, Tom Lane) (9.3)(9.2)</li>
<p>
NLS を有効にしている場合に誤った翻訳出力がされる可能性がありました。9.3系では ?dy についても修正されました。
</p>
<li>pg_basebackup のフォアグラウンドプロセスがエラー終了する時にバックグラウンドプロセスを停止するように修正されました  (Magnus Hagander) (9.3)(9.2)</li>
<p>
ここでのバックグラウンドプロセスとは、サーバ側の postgresプロセスではなくpg_basebackup の子プロセスです。
</p>
<li>pg_basebackup で -v (--verbose) を指定し、tarフォーマットを標準出力に書き出す場合に、未初期化データが出力される障害が修正されました  (Magnus Hagander) (9.3)(9.2)(9.1)</li>
<li>データベースクラスタディレクトリ（$PGDATA）内にテーブルスペースがある場合に、ベースバックアップ内に２重に含まないように修正されました  (Dimitri Fontaine, Magnus Hagander) (9.3)(9.2)(9.1)</li>
<li>ecpg で記述子の出力について修正されました  (MauMau) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
SPARC Solaris プラットフォームで SIGBUS (バスエラー) によるクラッシュが報告されていました。
</p>
<li>ecpg で接続時にホスト名が与えられていないとき、空のホスト名で接続を試みないように修正されました  (Michael Meskes) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>dblink の接続処理オーバーヘッドが軽減されました  (Joe Conway) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
クライアントエンコーディングが一致している場合には、クライアントエンコーディングを設定する処理を行わなくなります。
</p>
<li>追加モジュール isn で ISMNチェックディジットの計算が修正されました  (Fabien Coelho) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまで常に誤った値となっていました。
</p>
<li>pgbench で 巨大なスケールファクターを指定したときの整数オーバーフローが修正されました  (Tatsuo Ishii) (9.3)</li>
<p>
本障害で初期化時の表示で以下のようなマイナス値が出力されることがありました。
</p>
<pre>
 239300000 of 3800000000 tuples (-48%) done (elapsed 226.86 s, remaining -696.10 s).
</pre>
<li>pg_stat_statement 追加モジュールで、CURRENT_DATE、CURRENT_TIME 等のパース処理部分の実装が微調整されました  (Kyotaro Horiguchi) (9.3)(9.2)</li>
<p>
動作内容の変更はありません。
</p>
<li>postgres_fdw 追加モジュールで、接続が切れた場合のエラー処理が改善されました  (Tom Lane) (9.3)</li>
<li>クライアントのみインストールする場合について Makefile が修正されました  (Peter Eisentraut) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
ソースコードからクライアントのみインストールするドキュメント記載の手順ではpsqlrc.sample を配置するところでエラーになっていました。
</p>
<li>Mingw と Cygwin プラットフォームにおいてインストール(make install)時にlibpq.dll を bin ディレクトリに配置するようになりました  (Andrew Dunstan) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>使用が推奨されない dllwrap を Cygwin にて使用しないようになりました  (Marco Atzeri) (9.3)(9.2)(9.1)(9.0)</li>
<li>Visual Studio 2013 でビルドできるようになりました  (Brar Piening) (9.3)</li>
<li>これまでプレーンテキストでリリース情報が記載されていた HISTORY ファイルが廃止されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<li>タイムゾーンデータが tzdata release 2013i に更新されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
ヨルダンの夏時間法の変更、キューバの歴史的変更が含まれます。また、IANA でメンテナンスされず、実際にも使われていない地域名 Asia/Riyadh87、Asia/Riyadh88、Asia/Riyadh89 が削除されました。
</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.0.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-15/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 05 Dec 2013 01:01:06 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2505</guid>

					<description><![CDATA[このリリースは 9.0.14 からの修正リリース(2013/12/5リリース)です。 9.2.x からのアップデートではダンプ、リストアは不要です。 ただし、本バージョンで修正されたデータ破損の不具合による影響がある場合 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.14 からの修正リリース(2013/12/5リリース)です。<br />
9.2.x からのアップデートではダンプ、リストアは不要です。</p>
<p>ただし、本バージョンで修正されたデータ破損の不具合による影響がある場合、本バージョンへのアップデート後に VACUUM FREEZE 及びスタンバイサーバの再構築が必要になります。</p>
<p>また、9.0.13 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-3/">9.0.13 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2505"></span></p>
<h3 class="background">PostgreSQL 9.0.14 から 9.0.15 への変更点</h3>
<p>9.3.2、9.2.6、9.1.11、9.0.15、8.4.19 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>VACUUM 処理における relfrozenxid の更新をするかどうかの判定が修正されました。  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
relfrozenxid はテーブルごとに凍結済みトランザクションID 位置を保持するpg_class システムテーブルのカラムです。<br />
詳しくはマニュアル「<a href="https://www.sraoss.co.jp/PostgreSQL/Manual/document/9.3/html/routine-vacuuming.html#VACUUM-FOR-WRAPAROUND">23.1.5.トランザクションIDの周回エラーの防止</a>」を参照ください。
</p>
<p>
一部のケースで、VACUUM (自動VACUUM) が不適切にテーブルの relfrozenxid 値を前進させることがあり、<br />
一部の行が凍結されないままとなる可能性がありました。<br />
これらの行は 2^31 (約21億) トランザクションが経過すると、消えて（見えなく）なってしまうことになります。
</p>
<p>
実際の消失が起こる前に複数の誤った relfrozenxid 値の前進が起こる必要があるので、データ損失の可能性はかなり低いです。
</p>
<p>
9.2.0 以降ではデータ損失の可能性がより高く、また、本障害により「ERROR: could not access status of transaction ...」エラーが出る可能性もあります。<br />
9.0.4 以前、8.4.8 以前のバージョンでは本障害は該当しません。
</p>
<p>
アップグレード後、全テーブルに VACUUM FREEZE を行ってください。<br />
VACUUM FREEZE コマンドを実行するか、SET vacuum_freeze_table_age TO 0 と設定したうえで VACUUM を行います。<br />
これにより、既に不正な状態となっているテーブルを修復します。
</p>
<p>
データベースクラスタがこれまで 2^31 に満たない更新トランザクションしか実行してないのであれば、<br />
VACUUM FREEZE を行うだけで当面は安全になります。
</p>
<li>行ロック制御に使われる MultiXactId の凍結に関する障害が修正されました。  (Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<p>
本障害は、「ERROR: counld not access status of transaction ...」エラー、あるいは、行の重複や消失をひき起こす可能性があります。
</p>
<p>
アップグレード後に全テーブルに VACUUM FREEZE を行って、既に生じてしまった不正なデータ状態を修復してください。
</p>
<p>
別の問題として、本障害はスタンバイサーバにも生じ、データ不一致をひき起こします。<br />
したがって、9.3.0、9.3.1 のスタンバイサーバはバージョンアップ後、ベースバックアップを取り直すようにしてください。
</p>
<li>ホットスタンバイの起動における pg_clog と pg_subtrans の初期化について修正されました。  (Andres Freund, Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)</li>
<p>
pg_clog、pg_subtrans はトランザクション状態を管理する内部データです。
</p>
<p>
本障害は、ホットスタンバイサーバが起動して、クエリを受け付けるとき、<br />
コミット済トランザクションを未コミットとマークしてしまうことで、スタンバイ側にデータ破損を発生させます。<br />
行が消失してしまう、削除済み行が現れてしまう、更新前の行データが更新後の行データとともに残ってしまうといったことが起こり得ます。
</p>
<p>
このデータ破損が生じる可能性は、スタンバイの起動時に、<br />
プライマリでチェックポイント以降に多数の更新トランザクションを実行している場合でないかぎり、低いといえます。
</p>
<p>
本障害は、9.3.0、9.2.5、9.1.10、9.0.14 の各バージョンで導入されてしまいました。<br />
これらより手前バージョンは該当しません。
</p>
<p>
アップグレード後、ベースバックアップの取り直しをしてスタンバイサーバの再構成することが推奨されます。
</p>
<li>更新連鎖の横断処理に関するいくつかの障害が修正されました  (Andres Freund, &Aacute;lvaro Herrera) (9.3)</li>
<p>
行ロックなどある行の複数行バージョンに対する横断的処理について修正されました。
</p>
<p>
本障害では、同時更新処理において、誤った行のロックや更新が生じる可能性がありました。<br />
また「ERROR: unable to fetch updated version of tuple」エラーが誤って出ることもありえます。
</p>
<li>Fast Path Locking における不正なポインタの問題が修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>
Fast Path Locking とは、比較的弱いテーブルロック等の実装に使われている仕組みです。
</p>
<p>
本障害は、共有メモリ上のロックデータ構造の破損をひきおこし、誤った振る舞いを生じさせる原因となります。
</p>
<li>タイムアウト制御における競合状態が修正されました  (Tom Lane) (9.3)</li>
<p>
本障害により、SIGALRM または SIGINT シグナルがブロックされることで、サーバプロセスの無応答が生じる可能性がありました。
</p>
<li>WALリプレイの中で pg_multixact/ のデータを切り詰めるようになりました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)</li>
<p>
pg_multixact はデータベースクラスタディレクトリ内のディレクトリで、行ロック制御のためのファイルが格納されます。
</p>
<p>
8.2.x 時代に切り詰めを行わないようにされましたが、<br />
ホットスタンバイのように長期にリカバリ（WALリプレイ）を続けるケースでは、ファイルが増え続けることの方が問題となります。
</p>
<li>XID 周回対策の VACUUM 処理で、凍結が必要な行が無いと確認するだけだった場合に、<br />
走査したページを確実にカウントするように修正されました  (Sergey Burladyan, Jeff Janes) (9.3)(9.2)</li>
<p>
本障害により relfrozenxid 値の前進に失敗することがあり、XID 周回防止 VACUUM がまだ必要であると見なされてしまいます。<br />
最悪のケースではデータベースサーバプロセスが XID周回防止のために動作を停止してしまいます。
</p>
<li>MultiXactId によりテーブル全体VACUUM を要求する仕組みが修正されました  (Andres Freund) (9.3)</li>
<p>
本障害により自動VACUUM の無用な活動が多数生じる可能性がありました。
</p>
<li>GIN インデックスの木ページの削除における競合が修正されました  (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本障害は一時的な誤った応答や SQL実行失敗をひきおこす可能性があります。
</p>
<li>SP-GiST インデックス作成で「ERROR: unexpected spgdoinsert() failure」が生じるケースが修正されました  (Teodor Sigaev) (9.3)(9.2)</li>
<p>
当該ケースにおいては内部的にリトライするようになります。
</p>
<li>マテリアライズドビューについて雑多な修正が行われました  (Kevin Grittner, Andres Freund) (9.3)</li>
<p>
以下のような記法でのカラム指定が動作するようになりました。</p>
<pre>
=# CREATE TABLE t ( i int );
=# CREATE MATERIALIZED VIEW mv_t(ii) AS SELECT * FROM t;
</pre>
</p>
<p>
マテリアライズドビューのリフレッシュ処理で内部的なクローズ処理位置の誤りが修正されました。
</p>
<li>結合時には別エイリアスを使っている重複したテーブルのエイリアスを再び認めるようになりました  (Tom Lane) (9.3)</li>
<p>
PostgreSQL では歴史的に以下のような SQL を受け入れていましたが、SQL標準を厳密に読むとエイリアス x を重複して使うのは禁止されています。</p>
<pre>
SELECT ... FROM tab1 x CROSS JOIN (tab2 x CROSS JOIN tab3 y) z
</pre>
</p>
<p>
9.3.0 でこれを拒否するようにしましたが、元の振る舞いに戻されました。
</p>
<li>外部結合内で入れ子になった単純な値ではないサブクエリについてプランナ処理が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
本障害により、JOIN 構文内に複数レベルのサブクエリをもつ SQL に対して、誤ったプランを作るおそれがありました。
</p>
<li>複数の WHERE と OUTER JOIN の結合条件とに STRICT でない同一の式が現れたときの誤ったプラン作成が修正されました  (Tom Lane) (9.3)(9.2)</li>
<li>サブクエリの行全体を参照するときプランナが処理に失敗するのが修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>以下 SQL でエラーとなる例が報告されています。</p>
<pre>
=# SELECT q1.* FROM (select 'a'::text) q1(c) WHERE NOT EXISTS
   (SELECT * FROM (SELECT 'A'::text) q2(c) WHERE q2 = q1);
ERROR: subquery q2 does not have attribute 0
</pre>
<li>継承ツリーへの min()、max() 関数に対する最適化プラン生成の誤りが修正されました  (Tom Lane) (9.3)(9.2)(9.1)</li>
<p>
min()、max() に対してシンプルなカラム指定でなく、式を与えると、プラン内が失敗することがありました。
</p>
<p>
修正前バージョンでは、プラン表示にて以下のようにエラーが出てしまいます。SQL実行自体は可能ですが Limit 計画タイプを使った min()、max() に特化した最適化がされない動作となっていました。</p>
<pre>
=# CREATE TABLE matest0 (id serial PRIMARY KEY, name text);
=# CREATE TABLE matest1 (id int PRIMARY KEY) INHERITS (matest0);
=# CREATE TABLE matest2 (id int PRIMARY KEY) INHERITS (matest0);
=# CREATE TABLE matest3 (id int PRIMARY KEY) INHERITS (matest0);
=# CREATE INDEX matest0i ON matest0 ((1-id));
=# CREATE INDEX matest1i ON matest1 ((1-id));
=# CREATE INDEX matest3i ON matest3 ((1-id));

=# EXPLAIN SELECT min(1-id) FROM matest0;
ERROR:  no tlist entry for key 2
</pre>
</p>
<li>一時ファイルの早すぎる削除が修正されました  (Andres Freund) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
サブトランザクション（SAVEPOINT や 手続き言語の例外ブロック）の終了時などにエラーやクラッシュを招く可能性がありました。
</p>
<li>範囲型値の出力に伴うトランザクション内でのメモリリークが修正されました  (Tom Lane) (9.3)(9.2)</li>
<p>
本修正では実際にはあらゆるデータ型の出力関数を直しますが、特に範囲データ型において１回につき数キロバイト単位という著しいリークが出ていました。
</p>
<li>設定ファイルをリロードする際のメモリリークが修正されました  (Heikki Linnakangas, Hari Babu) (9.3)</li>
<li>NOT NULL や CHECK による制約違反メッセージで誤って削除済みのカラムが表示される問題が修正されました  (Michael Paquier and Tom Lane) (9.3)(9.2)</li>
<p>
以下のエラー例が報告されていました。２カラムのテーブルにもかかわらず、エラーメッセージでは３カラムになっています。</p>
<pre>
=> CREATE TABLE t22 (id serial primary key, v int check(v < 10));
=> ALTER TABLE t22 DROP COLUMN v;
=> ALTER TABLE t22 ADD COLUMN "v" int CHECK (v < 10);
=> INSERT INTO t22 (v) VALUES (100);
ERROR:  new row for relation "t22" violates check constraint
"t22_v_check"
DETAIL:  Failing row contains (1, null, 100).
</pre>
</p>
<li>ウィンドウ関数の記法でデフォルト引数値と名前付き引数指定に対応しました  (Tom Lane) (9.3)(9.2)</li>
<p>
以下のような関数の呼び出し方法が動作するようになります。</p>
<pre>
CREATE FUNCTION nth_value_def(val anyelement, n int = 1)
 RETURNS anyelement LANGUAGE internal WINDOW IMMUTABLE STRICT
 AS 'window_nth_value';

SELECT nth_value_def(n := 2, val := ten) OVER (PARTITION BY cf), ct, cf
 FROM (SELECT * FROM t1 WHERE cu < 10 ORDER BY cf, ct) s;

SELECT nth_value_def(ct) OVER (PARTITION BY cf), ct, cf
 FROM (SELECT * FROM t1 WHERE cu < 10 ORDER BY cf, ct) s;
</pre>
</p>
<p>
これまで名前付き引数を使った場合には「ERROR:  window functions cannot use named arguments」が出ていました。<br />
また、デフォルト引数を使った場合、クラッシュをひき起こしていました。
</p>
<li>ルールとビューの整形表示にて行末の空白を削除するようになりました  (Tom Lane) (9.3)</li>
<p>
9.3.0 は過去バージョンと比べて空白を出力するケースが多くありました。想定外の振る舞い変化を減らすため、不要な空白だけを削除しています。
</p>
<li>int2vector型、oidvector型について、配列切り出し処理が修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これらはシステムテーブルで使われるデータ型です。以下の SQL でバックエンドプロセスのクラッシュが生じていました。</p>
<pre>
SELECT a.indkey[1:3], a.indkey[1:2] FROM pg_index AS a;
</pre>
</p>
<p>
int2[] 型（smallint[]型）や oid[] 型であれば本障害に該当しません。
</p>
<li>空の htsore型データを変換した場合にも有効な JSONデータが返るように修正されました  (Oskari Saarenmaa) (9.3)</li>
<p>
以前は以下を実行すると「{}」ではなく、空文字列データが返っていました。空文字列は JSON 型のデータとして投入不能であるため、望ましくない振る舞いでした。</p>
<pre>
=# SELECT (''::hstore)::json;
 json
------
 {}
(1 row)
</pre>
</p>
<li>SQL標準の GMTオフセットのタイムゾーン表記を使ったときの誤った振る舞いが修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
「-5.0」などの GMTオフセット表記の場合に問題が生じていました。以下例では「2012-12-11 22:00:00-05」が返らなければいけません。</p>
<pre>
(障害動作例)
=# SET TIME ZONE '-5.0';
=# SELECT '2012-12-12 12:00 Japan'::timestamptz;
      timestamptz
------------------------
 2012-12-12 12:00:00-05
</pre>
</p>
<li>Windows エラーコードを変換してログ出力する際の誤りが修正されました  (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
DEBUGレベルログに誤った内容が出力されていました。
</p>
<li>Windows のサービスからコマンド起動する際に適切にダブルクオートを付加するようになりました  (Naoya Anzai and Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
このほか、Windows むけにいくつか修正が行われています。
</p>
<p>
サービス定義を読み取るサードパーティツールでの問題に対応して、スラッシュでパス区切りしている場合にバックスラッシュで置き換えます。また、非常に長いパス名に対してバッファオーバーランが起きないように修正されました。
</p>
<li>pg_dumpall が対象データベースに default_transaction_read_only = onと ALTER DATABASE 命令で設定されていた場合にも動作するように修正されました。  (Kevin Grittner) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
これまではリストア時に以下のようなエラーが生じていました。</p>
<pre>
psql:all.dump:56: ERROR:  cannot execute COMMENT in a read-only transaction
psql:all.dump:72: ERROR:  cannot execute CREATE TABLE in a read-only transaction
psql:all.dump:75: ERROR:  cannot execute ALTER TABLE in a read-only transaction
</pre>
</p>
<li>pg_isready の -d オプションについて修正されました  (Fabr&iacute;zio de Royes Mello and Fujii Masao) (9.3)</li>
<p>
これまで以下のようなエラーが生じ、正しく動作していませんでした。</p>
<pre>
$ pg_isready -h localhost -p 5432 -U postgres -d db1
pg_isready: missing "=" after "db1" in connection info string
</pre>
</p>
<li>pg_receivexlog で WALファイル名の読み取り処理が修正されました  (Heikki Linnakangas) (9.3)</li>
<p>
本誤りにより、4GB 以上（256ファイル以上）WAL が書かれた後で、以下エラーが出て、ストリーミングの停止後の再開ができませんでした。「pg_receivexlog: could not parse transaction log file name」
</p>
<li>pg_upgrade が適切にディスクスペース不足を報告するように修正されました  (Peter Eisentraut) (9.3)</li>
<p>
contrib/pg_upgrade は、PostgreSQL バージョンアップに対応して、データベースクラスタディレクトリを書き換えるツールです。これまでディスク不足で失敗するときにエラーメッセージの原因を示す箇所が「Success」となってしまっていました。
</p>
<li>ecpg でクオートされたカーソル名で大文字小文字の区別をするように修正されました  (Zolt&aacute;n B&ouml;sz&ouml;rm&eacute;nyi) (9.3)(9.2)(9.1)</li>
<p>
これまで " でクオートしていても大文字小文字を同一視していました。
</p>
<li>ecpg における varchar型で宣言された 変数リストの処理が修正されました<br />
 (Zolt&aacute;n B&ouml;sz&ouml;rm&eacute;nyi) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
以下のコードが、</p>
<pre>
EXEC SQL BEGIN DECLARE SECTION;
varchar a[50], b[50];
EXEC SQL END DECLARE SECTION;
</pre>
<p>ecpgプリプロセッサにより、以下のように変換されてしまいました。</p>
<pre>
struct varchar_1  { int len; char arr[ 50 ]; }  a , struct varchar_2  { int len; char arr[ 50 ]; }  b ;
</pre>
<p>これは C言語の文法エラーを引き起こします。上記「,」は「;」でなければいけません。
</p>
<li>contrib/lo が誤ったトリガ定義から保護されるように修正されました  (Marc Cousin) (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
contrib/lo はラージオブジェクトを自動削除するトリガ関数 lo_manage() とloドメイン型を提供する拡張モジュールです。これまで lo_manage() 関数を誤って文レベルトリガとして使用されるとクラッシュを引き起こしていましたが、修正によりエラー終了するようになりました。
</p>
<li>タイムゾーンデータが tzdata release 2013h に更新されました   (9.3)(9.2)(9.1)(9.0)(8.4)</li>
<p>
アルゼンチン、ブラジル、ヨルダン、リビア、リヒテンシュタイン、モロッコ、パレスチナの夏時間法の変更が適用されています。また、新たなタイムゾーン略記法 WIB、WIT、WITA（いずれもインドネシ<br />
アのタイムゾーン）が追加されました。
</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.0.14 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/9-0-14/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 10 Oct 2013 01:01:27 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 9.0]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2523</guid>

					<description><![CDATA[このリリースは 9.0.13 からの修正リリース(2013/10/10リリース)です。 9.0.x からのアップデートではダンプ、リストアは不要です。 また、9.0.13 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 9.0.13 からの修正リリース(2013/10/10リリース)です。<br />
9.0.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、9.0.13 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/9-0-13/">9.0.13 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2523"></span></p>
<h3 class="background">PostgreSQL 9.0.13 から 9.0.14 への変更点</h3>
<p>9.3.1、9.2.5、9.1.10、9.0.14、8.4.18 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li id="hstore">hstore拡張モジュールの JSON 機能が更新されました  (Andrew Dunstan) (9.3)
<p>
hstore型を json型に変換する二つの JSON 関数と一つのキャストが追加されました。<br />
既に hstore をインストールしている場合には以下コマンドで適用します。
</p>
<pre>
=# ALTER EXTENSION hstore UPDATE;
</pre>
</li>
<li>範囲インデックス作成時のメモリリークが修正されました  (Heikki Linnakangas) (9.3)(9.2) </li>
<li>SERIALIZABLE トランザクションについて修正されました (Kevin Grittner, Heikki Linnakangas) (9.3)(9.2)(9.1)
<p>
直列化可能であるかの判断で競合を見落とす可能性がありました。
</p>
</li>
<li>libpq の SSL 接続におけるデッドロックが生じる障害が修正されました  (Stephen Frost) (9.3)(9.2)(9.1)(9.0)(8.4) </li>
<li>pg_receivexlogコマンドにおけるタイムラインの扱いに関する障害が修正されました  (Heikki Linnakangas, Andrew Gierth) (9.3)</li>
<li>CREATE FUNCTION において、設定 check_function_bodies が有効でない限り、SET する値のチェックを行わないようになります。 (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)
<p>
以下の関数定義は SET 句部分で与えている値が誤っていますが、check_function_bodies = off としておけばエラーが出なくなります。<br />
以前は常にチェックされエラーとなっていました。</p>
<pre>
CREATE FUNCTION func_with_bad_set() RETURNS int AS
$$ select 1 $$
LANGUAGE SQL SET default_text_search_config = no_such_config;
</pre>
</p>
</li>
<li>稀に発生するインデックスの無いテーブルに対する VACUUM における誤った警告が取り除かれました。<br />
 (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)</p>
<p>
「WARNING: page containing dead tuples is marked as all-visible ...」が誤って出る可能性がありました。
</p>
</li>
<li>マルチバイト文字エンコーディングにおいて、<br />
非ASCII で "（ダブルクオート）で囲われていない識別子が小文字にならないように修正されました。 (Andrew Dunstan) (9.2)(9.1)(9.0)(8.4)</p>
<p>
これまでは非ASCII 文字でも tolower() 関数によって小文字に変換する実装となっていました。
</p>
</li>
<li>wal_level = hot_standby であるときの backgroupd writer プロセスにおけるチェックポイント処理のメモリリークが修正されました。<br />
(Naoya Anzai) (9.2)(9.1)(9.0)
</li>
<li>lo_open() によるメモリリークが修正されました  (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)
</li>
<li>work_mem でメモリを 24GB 以上の使う際にメモリ超過割り当てが生じる可能性があり、修正されました。 (Stephen Frost) (9.2)(9.1)(9.0)(8.4)
</li>
<li>libpq にてマルチスレッドで SSL を使う場合にネットワークスタックが壊れる可能性あり、修正されました  (Nick Phillips, Stephen Frost) (9.2)(9.1)(9.0)
</li>
<li>与えられたパラメータに対応したカスタムプランを使うかどうか選ぶ際のプランナコスト見積もりが改善されました  (Tom Lane) (9.2)
<p>
本変更でプラン作成コストが高いときには汎用プランを好むようになります。
</p>
</li>
<li>boolean型カラムに NULL が多数含まれるとき、プランナが選択行の見積を適切に行うようになりました  (Andrew Gierth) (9.2)(9.1)(9.0)(8.4)
<p>
これまで「col IS NOT TRUE」や「col IS NOT FALSE」といった条件のとき、NULL値の割合が因子として適切に使われていませんでした。
</p>
</li>
<li>UNION ALL と継承テーブルへの問い合わせでパラメタライズドパスを適切に再チェックするように修正されました  (Tom Lane) (9.2)
<p>
これまで最善でないプランが選ばれる可能性がありました。
</p>
</li>
<li>UNION や INTERSECT のサブクエリに対する安全でない WHERE句のプッシュダウンを防ぐようになりました  (Tom Lane) (9.2)(9.1)(9.0)(8.4)
<p>
これまでは該当のケースでエラーが生じていました。サブクエリ部分に複数行を返す関数、<br />
VOLATILE な関数、DISTINCT ON がある場合に該当する可能性があります。以下に報告されたエラーケースを示します。
</p>
<pre>
=# SELECT * FROM (
     SELECT 1 AS t , generate_series(1,10) AS x
     UNION
     SELECT 2 AS t , 4 AS x
   ) ss WHERE x < 4 ORDER BY x;
ERROR:  set-valued function called in context that cannot accept a set
</pre>
</li>
<li>不適切なデータ型の処理により GROUP BY の問い合わせで稀にエラーがおきる障害が修正されました  (Tom Lane) (9.2)(9.1)(9.0)(8.4)
<p>
以下の SQL で障害が報告されました。
</p>
<pre>
=# CREATE FUNCTION test_group_by() RETURNS TABLE (my_col varchar(5))
   AS $$ SELECT 'hello'::varchar(5); $$ LANGUAGE sql STABLE;

=# SELECT my_col FROM test_group_by() GROUP BY 1;
ERROR:  failed to locate grouping columns
</pre>
</li>
<li>pg_dump のバイナリアップグレードモード（--binary-upgrade）における動作が修正されました (Andrew Dunstan) (9.2)(9.1)
<p>
カラムを落とした外部テーブルについて正しく動作するようになりました。これまで pg_upgrade にてエラーが出ていました。
</p>
</li>
<li>pg_dump で拡張モジュール関連のルール、イベントトリガーの処理順序が修正されました (Joe Conway) (9.2)(9.1)
</li>
<li>拡張モジュールのテーブルでも pg_dump で -t や -n の指定をしたとき、ダンプできるようになりました。 (Joe Conway) (9.2)(9.1)
</li>
<li>ビューのダンプで元テーブルから落とされたカラムについて、よりよい扱いができるようになりました。 (Tom Lane) (9.2)(9.1)(9.0)(8.4)
</li>
<li>pg_restore -l (--list) でディレクトリ形式が正しいフォーマット名称で表示されるように修正されました (Fujii Masao) (9.2)(9.1)
<p>
これまで Format: UNKNOWN と表示されていました。
</p>
</li>
<li>UNIQUE 構文、PRIMARY KEY 構文を使った際に、インデックスコメントを適切に記録するようになりました (Andres Freund) (9.2)(9.1)(9.0)
<p>
pg_restore でパラレルにリストアを行う際に、まだ作られていないインデックスにコメントを付ける処理が実行され、エラーとなっていました。
</p>
</li>
<li>pg_basebackup -x (--xlog) 実行時、レプリケーション元の pg_xlog が空であるときクラッシュしていたものが修正されました (Magnus Hagander, Haruka Takatsuka) (9.2)
<p>
「ERROR: could not find any WAL files」が出るようになります。
</p>
</li>
<li>スイッチオーバーが完了する前の WALファイル伝搬が正しく保証されるようになりました  (Fujii Masao) (9.2)(9.1)
<p>
これまで、全ての WALファイルがスタンバイでリプレイされる前にストリーミングレプリケーション接続が閉じてしまう可能性がありました。
</p>
</li>
<li>リカバリ中における WALセグメントのタイムラインの扱いが改善されました (Heikki Linnakangas) (9.2)(9.1)
<p>
WALセグメントファイルを再利用するときにターゲットタイムラインでなく現在のタイムラインに基づいたファイル名にします。
</p>
</li>
<li>REINDEX TABLE と REINDEX DATABASE が適切に制約を再検証し、無効とされたインデックスに有効と印をつけるようになりました。<br />
(Noah Misch) (9.2)(9.1)(9.0)
</li>
<li>SP-GiST インデックスに挿入するときのデッドロックを回避するように修正されました  (Teodor Sigaev) (9.2)
</li>
<li>CREATE INDEX CONCURRENTLY を並列実行するときデッドロックの可能性があり、修正されました  (Tom Lane) (9.2)(9.1)(9.0)(8.4)
</li>
<li>GiST インデックスを牽くときのクラッシュが修正されました (Tom Lane) (9.2)
</li>
<li>regexp_matches() 関数におけるゼロ長マッチの扱いについて修正されました (Jeevan Chalke) (9.2)(9.1)(9.0)(8.4)
<p>
これまで「^」のようなゼロ長文字列へのマッチでは、以下のように余分にマッチ文字列を返していました。
</p>
<pre>
=# SELECT regexp_matches('foo', '$', 'g');
 regexp_matches
----------------
 {""}
 {""}
(2 rows)
</pre>
</li>
<li>非常に複雑な正規表現でクラッシュしていたものが修正されました  (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)
</li>
<li>正規表現で、最短一致量指定子（non-greedy）での後方参照マッチに失敗していたものが修正されました (Jeevan Chalke) (9.2)(9.1)(9.0)(8.4)
</li>
<li>ALTER DEFAULT PRIVILEGES で CREATE権限がなくともスキーマの操作ができるようになりました  (Tom Lane) (9.2)(9.1)(9.0)
<p>
スキーマに対する CREATE 権限が必要という点はマニュアル記載があり、本件は仕様変更となります。本変更による実質的なセキュリティ水準低下は無いと考えられます。
</p>
<p>
以前は、以下の振る舞いとなります。</p>
<pre>
(管理者ユーザで操作)
=# CREATE USER bob;
=# CREATE SCHEMA we_like_bob;
=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob
   GRANT SELECT ON TABLES TO bob;
ERROR:  permission denied for schema we_like_bob
(ここではエラー)
=# GRANT CREATE ON SCHEMA we_like_bob TO bob;
=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob
   GRANT SELECT ON TABLES TO bob;
(ここで成功する)
</pre>
</p>
</li>
<li>クエリ内にキーワードは使えないという制限が緩められました  (Tom Lane) (9.2)(9.1)(9.0)
<p>
ロール名、手続き言語名、COPY や EXPLAIN のオプション、SET 値にてキーワードが使用可能となります。
</p>
</li>
<li>COPY に失敗したときに適切な行番号が出力されるようになりました  (Heikki Linnakangas) (9.2)
<p>
これまでエラー時メッセージにてコピー元ファイルのエラー箇所と合わない行番号が表示されることがありました。
</p>
</li>
<li>pgcrypto 拡張モジュールにおいて、pgp_pub_decrypt() 関数がパスワード付き秘密鍵で動作するように修正されました<br />
 (Marko Kreen) (9.2)(9.1)(9.0)(8.4)
</li>
<li>pg_upgrade が pg_dump --quote-all-identifiers を使って、リリース間でキーワードが変更された場合の問題を回避するようになりました<br />
(Tom Lane) (9.2)(9.1)
</li>
<li>ファイル切り詰め処理がキャンセルされた場合における ANALYZE の統計情報生成が改善されました (Kevin Grittner) (9.2)(9.1)(9.0)
</li>
<li>プリペアドクエリーとしてトランザクション管理コマンド（ROLLBACK など）を実行すると失敗する可能性があり、修正されました<br />
 (Tom Lane) (9.2)(9.1)(9.0)(8.4)
</li>
<li>無限大をあらわすのに多様な書き方が全プラットフォームで可能となりました  (Tom Lane) (9.2)(9.1)(9.0)(8.4)
<p>
浮動小数点の数値型（float4、float8）にて、inf、+inf、-inf、infinity、+infinity、-infinity という書き方が共通でサポートされます。これまで Windows では inf が使えないなど、コンパイラやプラットフォームによって差異がありました。
</p>
</li>
<li>track_activities = off であるとき、実行時統計情報収集における不要な報告処理をしなくなりました  (Tom Lane) (9.2)
</li>
<li>行とレコードや配列の比較について不要な制限が取り除かれました (Rafal Rzepecki, Tom Lane) (9.2)(9.1)(9.0)(8.4)
<p>
以下のような SQL がエラーとなっていましたが、実行できるようになりました。
</p>
<pre>
=# CREATE TYPE the_row AS (c1 text, c2 text);
=# CREATE TABLE the_table (c the_row);
=# SELECT * FROM the_table WHERE c IN ( ROW('foo','bar')::the_row );
ERROR:  arguments of row IN must all be row expressions
</pre>
</li>
<li>環境変数 PSQLRC にチルダが含まれているときにクラッシュする障害が修正されました  (Bruce Momjian) (9.2)
</li>
<li>ARM64 むけの CPU固有スピンロックコードが追加されました (Mark Salter) (9.2)
</li>
<li>タイムゾーンデータが tzdata release 2013d に更新されました (Tom Lane) (9.2)(9.1)(9.0)(8.4)
<p>
イスラエル、モロッコ、パレスチナ、パラグアイの夏時間法の変更、および、マッコーリー島の歴史的な修正が適用されています。
</p>
</li>
<li>WALリプレイで未初期化の空ページを参照してエラーになるのを防止するようになりました<br />
  (Andres Freund) (9.2)</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
