<?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 8.3 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-8-3/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Fri, 23 Oct 2026 06:29:05 +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 8.3 &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQL 8.3.23 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-23/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 07 Feb 2013 01:00:39 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2593</guid>

					<description><![CDATA[このリリースは 8.3.22 からの修正リリース(2013/2/7 リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.22 からの修正リリース(2013/2/7 リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2593"></span></p>
<h3 class="background">PostgreSQL 8.3.22 から 8.3.23 への変更点</h3>
<p>9.2.3、9.1.8、9.0.12、8.4.16, 8.3.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
SQL から enum_recv 関数が実行できなくなりました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>enum_recv 関数の引数が誤って宣言されているため、enum_recv 関数を SQL コマンドから呼び出すことによりサーバをクラッシュさせることができました。</p>
<p>原理上、攻撃者はそれを悪用してサーバメモリの内容を調査できる可能性があります。この問題は、Sumit Soni 氏 (Secunia SVCRP) によって報告されました (CVE-2013-0255)。</p>
</li>
<li>
WAL の再生中に行われる一貫性のあるデータベース状態に達したかどうかの検知において、複数の問題が修正されました。<br />
<br />(Fujii Masao, Heikki Linnakangas, Simon Riggs, Andres Freund) (9.2)(9.1)(9.0)</li>
<li>
バックアップデータの最後がチェックポイントレコードなどで、redo 処理が  行われなかったときのバックアップ終了点の検知が修正されました。<br />
<br />(Heikki Linnakangas) (9.2)</p>
<p>以前は、この誤りによって、不正に「WAL ends before end of online backup」エラーが発生することがありました。</p>
</li>
<li>
リレーションファイルを切り詰めるときに使用する最小のリカバリーポイントを更新するようにしました。<br />(Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)</p>
<p>以前は、タイムラインの初期の時点でリカバリを停止する際に、必要なデータを破棄しており、以下のようなエラーが発生することがありました。</p>
<pre>
WARNING:  page 0 of relation base/xxxxx/xxxxx does not exist
PANIC:  WAL contains references to invalid pages
</pre>
</li>
<li>
リカバリ対象のタイムラインが変更された後の WAL セグメントの再利用が修正されました。<br />(Heikki Linnakangas) (9.2)(9.1)</li>
<li>
タイムライン履歴ファイルを、カスケード接続されたスタンバイサーバのアーカイブから適切にリストアするようになりました。<br />(Heikki Linnakangas) (9.2)</li>
<li>
ホットスタンバイサーバでのロック競合検知が修正されました。<br />(Andres Freund, Robert Haas) (9.2)</li>
<li>
ホットスタンバイモードで問い合わせのキャンセルが失敗する不具合が修正されました。<br />(Noah Misch, Simon Riggs) (9.2)(9.1)(9.0)</p>
<p>競合するホットスタンバイ問い合わせをキャンセルするはずが、時々失敗して、一貫性のないデータが見えていました。</p>
</li>
<li>
リカバリが完了し、安全に pg_xlog_replay_pause() が実行できるようになるまでは、pg_xlog_replay_pause() を実行してもリカバリが中断されなくなりました。<br />
<br />(Tom Lane) (9.2)(9.1)</li>
<li>
サブクエリの結果に対する添え字の使用やフィールドの選択ができるようにSQL 文法が修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>以前は、以下のようにエラーが発生しました。</p>
<pre>
=# select ((select array[1,2]))[1];
ERROR:  syntax error at or near "["
LINE 1: select ((select array[1,2]))[1];
</pre>
</li>
<li>
高負荷状況における、自動バキュームの切り詰めに関する性能問題が修正されました。<br />(Jan Wieck) (9.2)(9.1)(9.0)</p>
<p>テーブルの末尾で空のページを切り詰めるには、排他ロックが必要ですが、自動バキュームは、ロック要求が競合したときに失敗（かつ、テーブルロックを解放）するコードになっていました。そのため、高負荷な状況下で切り詰めが行われないことはよくあり、テーブルの無駄な膨張を招きました。<br />
<br />今回、自動バキュームは、テーブルを部分的に切り詰め、ロックを解放し、ロックの再獲得を試みて処理を継続するように修正されました。この修正は、競合する要求が届いた後、自動バキュームがロックを解放するまでの平均時間も大幅に削減します。</p>
</li>
<li>
SPI_execute と関連する関数の性能が改善されたことによって、PL/pgSQL の EXECUTE の性能も改善されました。<br />(Heikki Linnakangas, Tom Lane) (9.2)</p>
<p>計画キャッシング機構の改訂結果として 9.2 で加えられたいくつかのデータコピーによるオーバーヘッドが取り除かれました。これは、特に多くの SQL 文を含むクエリ文字列を実行したときの 9.1 と比較した性能劣化を防ぎ、メモリの消費も抑えます。</p>
<p>この修正によって、マルチステートメント問い合わせ文字列は、現在、完全に直列に処理されます。つまり、後に続く文の解析と計画立案の前に、始めの文の実行が完了します。</p>
</li>
<li>
インデックス使用のためのコスト見積もりが pre-9.2 の時点に戻されました。<br />(Tom Lane) (9.2)</p>
<p>コスト見積もり時の調整用係数 (fudge factor) が、非常に大きなインデックスを使用する望ましくない高いコスト見積もりにつながっていました。</p>
</li>
<li>
DROP INDEX CONCURRENTLY にて時々発生していたクラッシュが修正されました。<br />(Tom Lane) (9.2)</li>
<li>
CREATE/DROP INDEX CONCURRENTLY における共有メモリロックテーブルの潜在的な破壊が修正されました。<br />(Tom Lane) (9.2)</li>
<li>
フィルファクタ部分を引いたページサイズより大きなタプルを挿入する際に呼び出される COPY のコードが修正されました。<br />(Heikki Linnakangas) (9.2)</p>
<p>以前のコードは、無限ループに陥ることがありました。</p>
</li>
<li>
pg_tablespace をスキャンするときの競合状態を防ぐようになりました。<br />(Stephen Frost, Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>以前は、CREATE DATABASE と DROP DATABASE が、pg_tablespace のエントリを同時に更新すると、不正な結果になることがありました。</p>
</li>
<li>
データベースやテーブルスペースを丸ごと削除しようとする DROP OWNED を防ぐようになりました。<br />(&Aacute;lvaro Herrera) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>安全上、それらのオブジェクトの所有権は削除ではなく、再割り当てする必要がありました。</p>
<p>この不具合は、9.2.2 の修正で混入しました。</p>
<pre>
=# create user testuser;
=# create database testdb owner testuser;
=# drop owned by testuser;
ERROR:  unrecognized object class: 1262
</pre>
</li>
<li>
vacuum_freeze_table_age の代わりに vacuum_freeze_min_age を間違って使用していたコードが修正されました。<br />(Andres Freund) (9.2)(9.1)(9.0)(8.4)</p>
<p>デフォルト設定では、vacuum_freeze_table_age は vacuum_freeze_min_age よりトランザクション数が多いですが、この間違いによって、自動バキュームによる部分的なテーブルスキャンが妨げられ、代わりに全テーブルスキャンが常に行われていました。</p>
</li>
<li>
RowExpr や XmlExpr が、構文解析を 2 回行ったときの不正な処理が修正されました。<br />(Andres Freund, Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>この不正な処理は、以下のように CREATE TABLE LIKE INCLUDING INDEXES 文などで表面化しました。</p>
<pre>
=# CREATE TYPE my_type AS (x int, y int);
=# CREATE TABLE t1 (a int, b int);
=# CREATE INDEX t1_idx ON t1 (((a, b)::my_type));
=# CREATE TABLE t2 (LIKE t1 INCLUDING INDEXES);
ERROR:  column "" has pseudo-type record
</pre>
</li>
<li>
ハッシュテーブルのサイズ計算における、整数オーバーフローに対する防御が改善されました。<br />(Jeff Davis) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
データ型にのアクセス権限に関するいくつかの不具合が修正されました。<br /> (Tom Lane) (9.2)</p>
<p>型のデフォルトのアクセス権限にいくつか問題があり、アクセス権限のダンプに失敗していました。</p>
<p>以前は、以下のようにデータ型に対してデフォルトのアクセス権限を定義すると、pg_dump に失敗します。</p>
<pre>
=# ALTER DEFAULT PRIVILEGES IN SCHEMA PUBLIC GRANT ALL ON TYPES TO my_group;
$ pg_dump db
pg_dump: unknown object type (84) in default privileges
</pre>
</li>
<li>
サーバクラッシュ後の残骸の一時テーブルを無視するのに失敗する障害が修正されました。<br />(Tom Lane) (9.2)(9.1)</p>
<p>クラッシュリカバリで一時テーブルの削除を行いますが、システムテーブルについては起動時すぐには削除しない設計となっています。このため、残骸の一時テーブルは無視するように作られていましたが、以前の修正で問題が混入してしまいました。</p>
</li>
<li>
Windows におけるログファイルのサイズによるローテーションの失敗が修正されました。<br />(Jeff Janes, Heikki Linnakangas) (9.2)</p>
<p>log_rotation_size で指定したサイズを超過してもローテーションしないことがありました。</p>
</li>
<li>
to_date()関数が範囲外の日付を拒否するようになりました。<br />(Hitoshi Harada) (9.2)(9.1)(9.0)(8.4)</p>
<p>以下のような SQL は「ERROR: date out of range ...」となります。</p>
<pre>
(従来の動作)
=# SELECT to_date('32 Dec 2012', 'DD Mon YYYY');
  to_date
------------
 2013-01-01
</pre>
</li>
<li>
pg_extension_config_dump() 関数が拡張モジュールを更新した場合に適切に対応するように修正されました。<br />(Tom Lane) (9.2)(9.1)</p>
<p>pg_extension_config_dump() 関数は、拡張モジュールにおける一部の（例えば設定を書き込むための）テーブルのデータを pg_dump/pg_dumpall の対象に含めるように指定するものです。</p>
<p>拡張モジュールの更新スクリプトの中で本関数を呼び出すことで、対象テーブルに対する既存の指定を置き換えることができるようになりました。以前は指定を追加するたけで置き換えがされませんでした。</p>
</li>
<li>
PL/pgSQL がプラン作成時のエラーで本来より簡単な表現のエラーが出ることが修正されました。<br />(Tom Lane) (9.2)</p>
<p>以下のように実行すると、１回目の関数実行ではエラーが短く出ます。</p>
<pre>
=# CREATE FUNCTION fail() RETURNS int LANGUAGE plpgsql
     AS $$ BEGIN RETURN 1/0; END $$;
CREATE FUNCTION
=# SELECT fail();
ERROR:  division by zero
CONTEXT:  PL/pgSQL function fail() line 1 at RETURN
=# SELECT fail();
ERROR:  division by zero
CONTEXT:  SQL statement "SELECT 1/0"
PL/pgSQL function fail() line 1 at RETURN
</pre>
</li>
<li>
PL/Python の複数テーブルむけのトリガ関数の扱いが修正されました。<br />(Andres Freund) (9.2)(9.1)</p>
<p>同じ関数を異なるテーブルのトリガ関数として使う場合に問題がありました。異なるテーブルのトリガ関数が同じキャッシュエントリに格納されていたため、一方のテーブルについて削除した後、残るテーブルのトリガを起動したとき、「ERROR:  cache lookup failed for relation 12345」というエラーがでました。</p>
</li>
<li>
Windows にて 非ASCIIのプロンプト文字列が正しいコードページに変換されるように修正されました。<br />(Alexander Law, Noah Misch) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>psql などの付属クラアントツールで表示が乱れ、エラーが出ることがありました。</p>
</li>
<li>
データベースに接続していないとき、psql の ? コマンドがクラッシュする可能性があり、修正されました。<br />(Meng Qingzhong) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
pg_basebackup 実行中にリレーションのファイルが削除された場合にエラーが出る可能性があり、修正されました。<br />(Heikki Linnakangas) (9.2)(9.1)</li>
<li>
「pg_basebackup -X」で、スタンバイサーバのバックアップ取得している間にタイムラインが変更されるのが許容されるようになりました。<br />(Heikki Linnakangas) (9.2)</p>
<p>以前は、タイムラインを跨って取得することができませんでした。pg_receivexlog にも同様の変更が適用されています。</p>
</li>
<li>
pg_dump がホットスタンバイデータベースに対しては、UNLOGGEDテーブルのデータを除外するようになりました。<br />(Magnus Hagander) (9.2)(9.1)</p>
<p>UNLOGGEDテーブルはスタンバイサーバにデータが伝搬しませんので、いずれにせよスタンバイサーバから有効なバックアップは取れません。--no-unlogged-table-data オプションが自動で付加されるようになったともいえます。</p>
</li>
<li>
pg_upgrade で不正なインデックスを安全に扱えるように修正されました。<br />(Bruce Momjian) (9.2)(9.1)(9.0)</p>
<p>これまで壊れたインデックスが生じているかチェックされませんでした。</p>
</li>
<li>
pg_upgrade の -O、-o オプションが修正されました。<br />(Bruce Momjian) (9.2)</p>
<p>pg_ctl にスペース空けがない形でパラメータが渡ってしまう問題がありました。</p>
</li>
<li>
libpq の PQprintTuples における 1 バイトのバッファオーバランが修正されました。<br />(Xi Wang) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>この古い関数は PostgreSQL 自身の中ではどこでも使われていません。しかし、一部のクライアントプログラムのコードで未だ使われている可能性があります。</p>
</li>
<li>
ecpglib が翻訳されたメッセージを適切に使うようになりました。<br />(Chen Huajun) (9.2)(9.1)(9.0)(8.4)</li>
<li>
ecpg_compat と pgtypes ライブラリが Visual C によるビルドで適切にインストールされるように修正されました。<br />(Jiang Guiqing) (9.2)(9.1)(9.0)(8.4)</li>
<li>
提供されない OS むけに、isinf() マクロの実装が libecpg に含まれるようになりました。<br />(Jiang Guiqing) (9.2)(9.1)(9.0)</li>
<li>
configure スクリプトの関数テストにて標準関数を調べる時にlibedit、libreadline から供給される同名の関数を無視するようになりました。<br />
<br />(Christoph Berg) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
Windows むけビルドスクリプトにてビルド番号が確実に単調増加するように日付の上位桁がゼロ埋めされるようになりました。<br />
<br />(Magnus Hagander) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
pgxs が実行プログラムを作成する際に Windows むけのクロスコンパイルのときには .exe サフィックスを付けるようになりました。<br />
<br />(Zoltan Boszormenyi) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
新しいタイムゾーン短縮形 FET が追加されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>現在いくつかの東ヨーロッパのタイムゾーンで使われています。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.22 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-22/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 06 Dec 2012 01:00:14 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2624</guid>

					<description><![CDATA[このリリースは 8.3.21 からの修正リリース(2012/12/6リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 からアップデートを行う場合は 8.3.17 に関す ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.21 からの修正リリース(2012/12/6リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 からアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2624"></span></p>
<h3 class="background">PostgreSQL 8.3.21 から 8.3.22 への変更点</h3>
<p>9.2.2、9.1.7、9.0.11、8.4.15, 8.3.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
CREATE/DROP INDEX CONCURRENTLY 文のいくつかの障害が修正されました<BR>(Andres Freund, Tom Lane, Simon Riggs, Pavan Deolasee) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>障害の一つは DROP INDEX CONCURRENTLY が導入された際に混入したもので、CREATE INDEX CONCURRENTLY にて壊れたインデックスを生成してしまうことがありました。</p>
<p>本マイナーアップ後に REINDEX を行うことが推奨されます。</p>
<p>DROP INDEX CONCURRENTLY で対象インデックス使用中のクエリが終わるまでそのインデックスへの挿入ができなくなってしまう問題が修正されました。</p>
<p>DROP INDEX CONCURRENTLY がキャンセルされた場合の誤った振る舞いが修正されました。以前は、裏に DROP できないインデックスが残ってしまうことがありました。</p>
<p>以下２点は 9.1&#x301C;8.3 の各バージョン系列でも共通に修正されています。</p>
<p>pg_index の行を更新する際に in-place updates を使うように修正されました。同時更新による競合で、更新が失敗し、壊れたインデックスが生じるのを防ぎます。</p>
<p>いくつかの DDL命令および VACUUM で、誤ったインデックス検索結果を無視するように修正されました。</p>
</li>
<li>
DROP INDEX CONCURRENTLY に対する述語ロックが修正されました<BR>(Kevin Grittner) (9.2)</p>
<p>修正前は、SSI（直列化スナップショット隔離）の述語ロックが誤ったタイミングで処理されていました。これは DROP と並行してシリアライザブルトランザクションを実行した際に誤った振る舞いを引き起こすおそれがありました。</p>
</li>
<li>
WALリプレイ時のバッファロックが修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)</p>
<p>WALリプレイが複数ページに影響を及ぼす場合にバッファロックが不十分でした。ホットスタンバイ問い合わせで一時的に一貫性のない状態が見えてしまい、誤った結果や予想外のエラーを引き起こす可能性がありました。</p>
</li>
<li>
GINインデックスに関するWAL生成ロジックの誤りが修正されました<BR> (Tom Lane) (9.2)(9.1)(9.0)</p>
<p>この誤りは WALページ分割失敗のときにインデックス破損を引き起こします。</p>
</li>
<li>
SP-GiSTインデックスのWALリプレイロジックの誤りが修正されました<BR>(Tom Lane) (9.2)</p>
<p>この誤りは、クラッシュ後またはスタンバイサーバにてインデックス破損を引き起こします。</p>
</li>
<li>
WALリカバリにおけるベースバックアップ終了位置検出の誤りが修正されました<BR>(Heikki Linnakangas) (9.2)</p>
<p>この誤りにより、ホットスタンバイモードでデータベースが一貫性のある状態に達する前に起動してしまいます。</p>
</li>
<li>
ホットスタンバイサーバが通常起動状態に昇格する際に、起動プロセスのバーチャルXID ロックが適切に解除されるようになりました<BR>(Simon Riggs) (9.2)(9.1)(9.0)</p>
<p>この誤りは、以降の CREATE INDEX CONCURRENTLY などいくつかの操作を妨げていました。</p>
</li>
<li>
スタンバイモードにおいて "ERROR: out-of-sequence timeline ID" が不必要に生じるのを回避するように修正されました<BR>(Heikki Linnakangas) (9.2)(9.1)(9.0)</li>
<li>
マスタープロセスがシャットダウンのシグナルを受けた後で新たな子プロセスを生成するのを防止するようになりました<BR>(Tom Lane) (9.2)(9.1)(9.0)</p>
<p>この障害により、シャットダウン処理が長くなる、あるいは、追加的なユーザ操作なしにはずっと終わらない可能性がありました。</p>
</li>
<li>
sysloggerプロセス（"logger process"）が、log_rotation_age が 2^31 ミリ秒 (＝25日間くらい) を超えているときに障害発生しないように修正されました<BR>(Tom Lane) (9.2)</p>
<p>"FATAL:  XX000: poll() failed: Invalid argument" というメッセージが出るケースが報告されていました。</p>
</li>
<li>
タイムアウト超過したとき、内部関数 WaitLatch() が直ぐに処理を返すように修正されました<BR>(Jeff Janes, Tom Lane) (9.2)</p>
<p>修正前は割り込みが殺到することで際限なく待たされる可能性がありました。この動作は autovacuum lancherプロセスにおいて問題となっており、その他、同様の問題を引き起こしていたものと考えられます。</p>
<p>内部関数 WaitLatch() は タイムアウトや何らかのイベントが起きるまで処理を休止する動作をさせるもので PostgreSQLの様々な箇所で使われています。</p>
</li>
<li>
メモリ不足の際に内部ハッシュが破壊されるのを防止するように修正されました<BR>(Hitoshi Harada) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>多くの場合、予期せぬエラーで処理が失敗するだけで済みますが、relcache など長期に利用するシステムキャッシュが破壊された場合、テーブルデータが壊れる可能性があります。</p>
</li>
<li>
終了済みトランザクションが削除されたテーブルのファイルディスクリプタを保持し続けるのを防止するように修正されました<BR> (Tom Lane) (9.2)(9.1)</p>
<p>この修正は DROP済みのテーブルが長期にディスクを占有してしまう問題を軽減します。</p>
</li>
<li>
新たな子プロセスがラッチ用の pipe を生成できなかった際に、データベースインスタンス全体のクラッシュと再起動が生じないようになりました。<BR>(Tom Lane) (9.2)(9.1)</p>
<p>新プロセス生成は失敗しますが、全体を強制再起動する理由に乏しいため、そのようにしないものとされました。この改良は OS がファイルディスクリプタ数の上限に近付いているときの動作を頑健にします。</p>
</li>
<li>
サブクエリ無しに展開できない形のサブクエリに対する JOIN にてプランナがクラッシュするケースがあり、修正されました<BR>(Tom Lane) (9.2)</p>
<p>以下のような SQL でクラッシュが生じるケースが報告されていました。</p>
<pre>
EXPLAIN
  SELECT * FROM t1 LEFT OUTER JOIN (
    SELECT DISTINCT t2.id FROM t2 WHERE t2.id > 100
    ) AS _t ON _t.id = t1.id
  WHERE t1.id > 100 OR (t1.id < 100 AND _t.id IS NOT NULL);
</pre>
</li>
<li>
外部結合に対する厳密でない等価条件のプラン作成が修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>該当する SQL に対してプランナが条件句から誤った制約を導出することがありました。COALESCE や CASE に外部結合によって null になりうるカラムが指定されていて、それが選択条件に使われている場合に該当します。各バージョンに問題がありますが、特に 9.2.x で良く出やすくなっています。</p>
<p>障害例を示します。実行プラン末行に奇妙な条件式があらわれています。</p>
<pre>
=# CREATE TABLE ta (q1 int PRIMARY KEY);
=# CREATE TABLE tb (u1 int UNIQUE, c1 int, c2 int);
=# EXPLAIN (COSTS OFF)
   SELECT q1, u1, c1, c2 FROM ta LEFT JOIN tb ON q1 = u1
   WHERE coalesce (c1, 123) = q1 AND coalesce (c2, 123) = q1;
                                  QUERY PLAN
-------------------------------------------------------------------------------
 Hash Left Join
   Hash Cond: (ta.q1 = tb.u1)
   Filter: (ta.q1 = COALESCE(tb.c1, 123))
   ->  Seq Scan on ta
   ->  Hash
         ->  Seq Scan on tb
               Filter: (COALESCE(c1, 123) = COALESCE(c2, 123))
</pre>
</li>
<li>
継承テーブルにおけるインデックス最適化された MIN／MAX を伴う SELECT DISTINCT についてプランナが修正されました<BR>(Tom Lane) (9.2)(9.1)</p>
<p>障害例を示します。以下のエラーが発生します。</p>
<pre>
=# CREATE TABLE tp (id int, f1 int);
=# CREATE TABLE tc1 (UNIQUE(f1)) INHERITS (tp);
=# CREATE TABLE tc2 (UNIQUE(f1)) INHERITS (tp);
=# CREATE TABLE tc3 (UNIQUE(f1)) INHERITS (tp);

=# SELECT DISTINCT min(f1), max(f1) FROM tp;
ERROR:  failed to re-find MinMaxAggInfo record
</pre>
</li>
<li>
意味の差異が存在する少数のケース以外で、プランナは、暗黙的キャストと明示的キャストを同等のものとみなすようになりました。<BR>(Tom Lane) (9.2)</li>
<li>
JOIN節を考慮して部分インデックスが使えるか判断するようになりました<BR>(Tom Lane) (9.2)</p>
<p>従来は検索条件節（WHERE句）のみを見ていました。</p>
</li>
<li>
同じインデックスについて多数のインデックス利用可能な JOIN があるときにプラン作成時間が長くなりすぎないように修正されました<BR>(Tom Lane) (9.2)</p>
<p>以下パターンで処理が長時間戻らないことが報告されています。プラン検討対象リレーション数の上限が内部的に設けられました。</p>
<pre>
=# CREATE TABLE tx (id int PRIMARY KEY);

=# EXPLAIN  SELECT 1 FROM tx AS a
    JOIN (SELECT 2 as aid) AS ag1 ON (ag1.aid = a.id)
    JOIN (SELECT 3 as aid) AS ag2 ON (ag2.aid = a.id)
    JOIN (SELECT 4 as aid) AS ag3 ON (ag3.aid = a.id)
    JOIN (SELECT 5 as aid) AS ag4 ON (ag4.aid = a.id)
      : 中略
    JOIN (SELECT 22 as aid) AS ag22 ON (ag22.aid = a.id)
    JOIN (SELECT 23 as aid) AS ag23 ON (ag23.aid = a.id)
    JOIN (SELECT 24 as aid) AS ag24 ON (ag24.aid = a.id)
    JOIN (SELECT 25 as aid) AS ag25 ON (ag25.aid = a.id);
</pre>
</li>
<li>
プランナの等価クラス(「=」条件)に対する排他制約の検証が改良されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
ハッシュ作成されたサブプランにおける部分行マッチングが、型の異なる場合も扱うように修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<pre> ... WHERE (a, b) NOT IN (SELECT x, y FROM ...)</pre>
<p>という形の問い合わせで、b と y がそれぞれ int4 と int8 であるなど、型が異なる場合に該当します。</p>
<p>本障害では、特定の型を含む場合に、誤った結果が返ったり、クラッシュが生じたりする可能性がありました。</p>
</li>
<li>
btree の スキャン位置記録関数（btmarkpos）、スキャン位置戻し関数（btrestrpos）における配列キーの扱いが修正されました<BR>(Tom Lane) (9.2)</p>
<p>本障害により、内側のインデックススキャンが「インデックスカラム = ANY(配列)」という条件であるようなマージJOIN で誤った結果が返る可能性があります。</p>
</li>
<li>
スナップショットを減らす 9.2 の変更が元に戻されました<BR>(Tom Lane) (9.2)</p>
<p>9.2 の問い合わせ実行中のスナップショット取得数を減らす変更は、問い合わせで使われるテーブルをロックする前にスナップショット取得を伴う処理が実行されることによって、以前には無かった望ましくない振る舞いを引き起こしました。</p>
<p>例えば、ある問い合わせで、先立つトランザクションによってコミットされた更新データが見えることが排他ロックを取得していたとしても保証されません。</p>
</li>
<li>
AFTER ROW UPDATE/DELETE トリガのために古い行を再読み出しする際にバッファロックを取得するようになりました<BR>(Andres Freund) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>ごく稀な状況でこの誤りは、トリガの WHEN条件、または、外部キー制約トリガの事前チェックロジックに不正なデータを渡してしまい、クラッシュやトリガ誤動作を引き起こします。
</p>
</li>
<li>
ALTER TABLE ... ALTER COLUMN ... TYPE で継承されたチェック制約を適切に扱うように修正されました<BR>(Pavan Deolasee) (9.2)(9.1)(9.0)(8.4)</p>
<p>8.4 以降バージョンで問題がおきていました。</p>
</li>
<li>
ALTER EXTENSION SET SCHEMA の付属オブジェクトを新スキーマに移動する際の失敗が修正されました<BR>(&Aacute;lvaro Herrera, Dimitri Fontaine) (9.2)(9.1)</li>
<li>
CREATE TABLE AS EXECUTE が拡張問い合わせプロトコルで正しく扱えるようにされました<BR>(Tom Lane) (9.2)</li>
<li>
DROP RULE IF NOT EXISTS と DROP TRIGGER IF NOT EXISTS で構文解析木を書き換えしないようになりました<BR>(Tom Lane) (9.2)</p>
<p>キャッシュされた SQL が再実行される場合にエラーを引き起こしていました。</p>
</li>
<li>
テーブルスペース に対する reassign owned が修正されました<br />(alvaro herrera) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
システムビューのカラムにおける 不正な pg_attribute 行を無視するようになりました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>ビューはシステムカラムをもたないため、もともと不要なデータでした。</p>
</li>
<li>
INSERT INTO table DEFAULT VALUES をダンプ出力する際の規則が修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
問い合わせに UNION、INTERSECT、EXCEPT節が多数あるときのスタックオーバーフローを防止するようになりました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
整数型の最小値を -1 で除算したときにプラットフォーム依存の失敗が起きるを防止するようになりました<BR>(Xi Wang, Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
日付の解析で文字列末尾を超えてアクセスされる可能性があり、修正されました<BR>(Hitoshi Harada) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
チェックポイント中にXID周回が起き、wal_level が hot_standby である場合に、XID基点を進めるのに失敗するのが修正されました<BR>(Tom Lane, Andres Freund) (9.2)(9.1)(9.0)</p>
<p>この障害は PostgreSQL自体には大きな影響はありませんが、txid_current() 関数や関連の関数に依存したアプリケーションでは TXID 値が逆行したように見えてしまいます。</p>
</li>
<li>
pg_terminate_backend() 関数、pg_cancel_backend() 関数に指定したプロセスが存在しなくてもエラーにならない問題があり、修正されました<BR>(Josh Kupershmidt) (9.2)</p>
<p>管理者ユーザで実行する場合には正しく動作していました。</p>
</li>
<li>
システムビュー pg_stat_replication の sync_state カラムのページ境界における表示が修正されました<BR>(Kyotaro Horiguchi) (9.2)(9.1)</li>
<li>
UNIXドメインソケットのパス名の長さがプラットフォーム固有の制限を超えた場合に意味不明なエラーメッセージでていたものが修正されました<br />
<BR>(Tom Lane, Andrew Dunstan) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<pre>ERROR: Non-recoverable failure in name resolution</pre>
<p>などが出ていました。</p>
</li>
<li>
複合カラムの値をクライアントに送出するときのメモリーリークが修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
コミット時のサブトランザクションのロックを検査しないことにより、処理を軽減するようになりました<BR>(Simon Riggs) (9.2)</p>
<p>トランザクションが多数の排他ロックを保持している場合に、不要な処理が大きな負担となる可能性がありました。</p>
</li>
<li>
postmaster.pid 読み取りについて pg_ctl が頑健になりました<BR>(Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>これまで処理競合によりファイルディスクプリタがリークする可能性がありました。</p>
</li>
<li>
client_encoding が SJIS のようなクライアント側専用の文字エンコーディングのときに不正なエンコーディングのデータに対して psql がクラッシュするのが修正されました<BR>(Jiang Guiqing) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
pg_dump でシーケンスへの値の設定が data セクションに記録されるようになりました。<BR>(Tom Lane) (9.2)</p>
<p>--section=data、pg_dump --section=pre-data といったオプションを指定した際の振る舞いが変ります。以前は、値の設定が pre-data セクションに含まれていました。以前から --data-only を指定した場合には、シーケンスに対する値の設定は含まれていました。</p>
<p>また、シーケンスが拡張モジュール設定テーブルとして指定されている場合のダンプ出力が改善されました。</p>
</li>
<li>
pg_dump の --clean オプション動作における DROP DATABASE コマンドの扱いが修正されました<BR>(Guillaume Lelarge) (9.2)</p>
<p>仕様変更を伴う修正となります。</p>
<p>pg_dump で --clean と --create を合わせた指定が可能になりました。対象データベースに接続する前に DROP DATABASE を行い、次に CREATE DATABASE を行うという手順を出力します。以前は両指定を同時に与えることができませんでした。</p>
<p>--create を指定せずに --clean を指定した場合、データベース削除は行わないようになりました。9.2.0 から pg_dump --clean は DROP DATABASE を発行するようになりましたが、これは役に立たずで時に危険でした。</p>
</li>
<li>
pg_dump で「ALTER VIEW foo SET ()」が出力される障害が修正されました<BR>(Tom Lane) (9.2)</p>
<p>VIEW に循環参照があって、オプション指定（WITH&#x301C;）が無い場合に pg_dump にて誤った構文のALTER VIEW が出力されていました。</p>
</li>
<li>
tarフォーマットでの pg_dump 出力に含まれる restore.sql スクリプトの障害が修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>テーブル名に大文字が含まれている場合に、それらが小文字に変っていて正しく動作しない内容を出力してしまいます。</p>
<p>また、--insert モードのときにも 通常の COPYモード同様にリストアできるようになりました。</p>
</li>
<li>
pg_restore が POSIX に適合した tar ファイルを受け付けるようになりました<BR>(Brian Weaver, Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>pg_dump の tar 出力モードは POSIX標準に完全に準拠した tarファイルを出力するわけではありませんでした（これは 9.3 バージョンで修正されます）。本修正により、これまでの形式も、POSIX準拠の tar形式も読み込めるようになります。</p>
</li>
<li>
pg_basebackup で tarファイルが POSIX準拠の形式で出力されるようになりました<BR>(Brian Weaver, Tom Lane) (9.2)(9.1)</li>
<li>
データディレクトリに相対パスが指定された場合に pg_resetxlog が postmaster.pid を正しく見つけられるように修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>本障害によりデータディレクトリを使用中の postmaster がいるのを見落とす可能性がありました。</p>
</li>
<li>
libpq の lo_import() 関数、lo_export() 関数が I/O エラーを正しく出すように修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
ecpg でネスト構造のポインタ値の処理が修正されました<BR>(Muhammad Usama) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
ecpg で ecpg_get_data() 関数が配列を適切に扱えるように修正されました<BR>(Michael Meskes) (9.2)(9.1)(9.0)</li>
<li>
pg_upgrade が システムカタログの TOASTテーブルを処理しないように修正されました<BR>(Bruce Momjian) (9.2)</p>
<p>本障害のために information_schema が削除され再作成されるときにエラーが生じていました。そのほかの失敗の可能性もありました。</p>
</li>
<li>
pg_upgrade の性能が改良されました<BR>(Bruce Momjian) (9.2)</p>
<p>新たなデータベースクラスタには synchronous_commit = off とします。</p>
</li>
<li>
contrib/pageinsepect 拡張モジュールの Btreeページ解析解析にて検査中のページにバッファロックを取得する問題があり、修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
malloc(0) および realloc(NULL, 0) 関数の移植性が低い部分が回避されました<BR>(Tom Lane) (9.2)</p>
<p>これらの関数にいくつかのプラットフォームは NULL を返しますが、out-of-memory と誤認する恐れがありました。</p>
</li>
<li>
make install で拡張モジュール用のディレクトリが確実に作られるように修正されました<BR>(Cedric Villemain) (9.2)(9.1)</li>
<li>
pgxs が AIX におけるモジュールのビルドに対応しました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>これまでソースツリー外でのビルドはサポートされていませんでした。</p>
</li>
<li>
タイムゾーンデータが tzdata release 2012j に更新されました<BR>(9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>キューバ、イスラエル、ヨルダン、リビア、パレスチナ、西サモア、ブラジルの夏時間法の変更を含みます。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.21 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-21/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 24 Sep 2012 01:00:41 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2641</guid>

					<description><![CDATA[このリリースは 8.3.20 からの修正リリース(2012/9/24リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.20 からの修正リリース(2012/9/24リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2641"></span></p>
<h3 class="background">PostgreSQL 8.3.20 から 8.3.21 への変更点</h3>
<p>9.2.1、9.1.6、9.0.10、8.4.14, 8.3.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
WALリカバリ中における共有バッファの永続マーキングが修正されました<BR>(Jeff Davis) (9.2) (9.1)</p>
<p>本障害により、クラッシュリカバリとレプリケーションのスタンバイサーバにおいてデータ破損が起きる可能性があります。</p>
<p>最も高い可能性で起きるのはテーブルのビジビリティマップの破損です。これにより 9.2.x の index-only scan において誤ったデータが返ることになります。9.1.x ではビジビリティマップ破損により一時的に VACUUM が効果的に行われなくなるだけです。</p>
<p>可能性は低いですが Btree、GINインデックスが破損するケースもあります。テーブルデータ本体は本障害では破損しません。</p>
<p>マイナーバージョンアップをした後で、全ての Btree、GINインデックスを REINDEX することが推奨されます。また、全てのテーブルについて、vacuum_freeze_table_age を 0 にして VACUUM を実行することが推奨されます（単に vacuumdb -aF コマンドを実行してもよいでしょう）。</p>
</li>
<li>
「WHERE indexed_column IN (値のリスト）」という形を含む SQL で誤ったソート結果になる可能性があり、修正されました<BR>(Tom Lane) (9.2)</li>
<li>
WINDOW関数と集約処理と一緒に GROUP BY が使われている SQL についてプランナ障害が修正されました<BR>(Tom Lane) (9.2)</li>
<li>
プランナによるエグゼキュータのパラメータの割り当てが修正されました<BR>(Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>また、9.1、9.0、8.4系列ではエグゼキュータのCTEプランノードの再スキャンロジックが修正されました。</p>
<p>本障害で WITH 節のサブクエリを複数スキャンすることで、誤った応答が返る可能性がありました。</p>
</li>
<li>
プランナにおけるインデックススキャンでの結合条件の扱いが改善されました<BR>(Tom Lane) (9.2)</li>
<li>
テキスト全文検索の SQL で検索条件が 'word:*'::tsquery のような前方一致を含むとき、選択行数の推定が改善されました<BR>(Tom Lane) (9.2)(9.1)</li>
<li>
権限変更が遅延して認識されるのが修正されました<BR>(Tom Lane) (9.2)</p>
<p>新たなロック取得を必要としないコマンドでは、当トランザクション開始後から当コマンド実行前に、並行して別トランザクションでコミットされた GRANT または REVOKE の結果を反映しない動作をする可能性がありました。</p>
</li>
<li>
配列型をベース型としたドメイン型のカラムに対する ANALYZE が失敗するのが修正されました<BR>(Tom Lane) (9.2)</p>
<p>9.2.0 では ANALYZE に対して以下のようなエラーがでていました。</p>
<pre>ERROR:  array_typanalyze was invoked for non-array type 16824</pre>
</li>
<li>
PL/Perl で、再帰的な関数が実行中に再定義された場合にクラッシュするのを防ぐようになりました<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</li>
<li>
PL/Perl で誤った最適化を回避するように修正されました<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>一部の Linuxディストリビューションには不適切なバージョンの pthread.h が含まれており、コンパイルされた PL/Perl コードも不適切なものとなっていました。PL/Perl 関数が他の関数を呼び出してエラーになった場合に、クラッシュ（segmentation fault）が引き起こされます。</p>
</li>
<li>
pg_upgrade から pg_config コマンドに対する不要な依存関係が除去されました<br />(Peter Eisentraut) (9.2)(9.1)</p>
<p>pg_config コマンドをインストールしていないケースもあるための対応となります。</p>
</li>
<li>
タイムゾーンデータが tzdata release 2012f に更新されました<br />(9.2)(9.1)(9.0)(8.4)(8.3)</p>
<p>フィジーにおける夏時間法の変更に対応しています。</p>
</li>
<li>
default_transaction_isolation を serializable と設定した場合の誤った振る舞いが修正されました<br />(Kevin Grittner, Tom Lane, Heikki Linnakangas) (9.1)</p>
<p>Windows においてプロセス開始時にクラッシュすることがあり、また、ホットスタンバイの動作でクラッシュすることがありました。</p>
</li>
<li>
GiSTインデックスにおけるページ分割の判断が改良されました。<br />(Alexander Korotkov, Robert Haas, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>本修正前には複数列GiSTインデックスが想定外に膨張することがありました。</p>
</li>
<li>
REVOKE ... CASCADE による多段の権限剥奪操作が、当該権限がまだ保持されているなら止まるように修正されました。<br />(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>例を示します。以下のようにテーブルに権限設定がされていたとして、そこで user2 で user4 から権限を剥奪する REVOKE ... CASCADE を行うものとします。</p>
<p><pre>
=# dp dep_priv_test
 Schema | Name | Type  |  Access privileges  | Column privileges
--------+------+-------+---------------------+------------------
 public | test | table | user1=arwdDxt/user1+|
        |      |       | user2=r*/user1     +|
        |      |       | user3=r*/user1     +|
        |      |       | user4=r*/user2     +|
        |      |       | user4=r*/user3     +|
        |      |       | user5=r/user4       |

=# SET SESSION ROLE user2;
=&gt; REVOKE SELECT ON test FROM user4 CASCADE;
</pre>
<p>修正前は以下の状態になります。</p>
<pre>
=&gt; dp test
 Schema | Name | Type  |  Access privileges  | Column privileges
--------+------+-------+---------------------+------------------
 public | test | table | user1=arwdDxt/user1+|
        |      |       | user2=r*/user1     +|
        |      |       | user3=r*/user1     +|
        |      |       | user4=r*/user3      |
</pre>
<p>修正後は以下の状態となります。user2 を経由せず、user3 → user4 → user5 のルートで user5 の権限が与えられたケースが尊重されます。</p>
<pre>
=&gt; dp test
 Schema | Name | Type  |  Access privileges  | Column privileges
--------+------+-------+---------------------+------------------
 public | test | table | user1=arwdDxt/user1+|
        |      |       | user2=r*/user1     +|
        |      |       | user3=r*/user1     +|
        |      |       | user4=r*/user3     +|
        |      |       | user5=r/user4       |
</pre>
</li>
<li>
ALTER EXTENSION SET SCHEMA で拡張モジュールを自身に含まれるスキーマに含めることが禁止されました<br />(Thom Brown) (9.1)</p>
<p>この状況は、pg_dump や他の機能で、循環依存を生んでしまいます。人為的にも修正するのが難しいため認めないものとなりました。</p>
</li>
<li>
ホットスタンバイの設定ミスに対するエラーメッセージを修正しました<br />(Gurjeet Singh) (9.1)(9.0)</p>
<p>パラメータ名が「max_prepared_xacts」と表示されていたものが、正しく「max_prepared_transactions」となります。また、より適切な SQLSTATE を出力するようになりました。</p>
</li>
<li>
configure スクリプトが mbstowcs_l ライブラリ関数を確認するようになりました<br />(Tom Lane) (9.1)</p>
<p>AIX のいくつかのバージョンで発生するビルド失敗に対応したものです。</p>
</li>
<li>
PL/Perl 使用時の SIGFPE の扱いが修正されました<br />(Andres Freund) (9.1)(9.0)(8.4)(8.3)</p>
<p>Perl はプロセスの SIGFPEハンドラ SIG_IGN にリセットします。これは後にクラッシュを引き起こします。PL/Perl 初期化後に通常の PostgreSQL のシグナルハンドラに戻すようにしました。</p>
</li>
<li>
contrib/pg_trgm で用いられる LIKE句の不具合が修正されました<br />(Fujii Masao) (9.1)</p>
<p>LIKE句にエスケープ文字が含まれていると、トリグラムインデックスを使った LIKE句を含む SQL は、誤った結果を返していました。</p>
</li>
<li>
Windowsで pg_upgrade の改行処理が修正されました<br />(Andrew Dunstan) (9.1)(9.0)</p>
<p>これまで、pg_upgrade は、関数定義などさまざまな箇所で、行末のキャリッジリターンを追加/削除してしまう可能性がありました。</p>
</li>
<li>
Windows で pg_upgrade がスクリプト内のパス区切りにバックスラッシュを使えるようになりました<br /> (Andrew Dunstan) (9.1)(9.0)</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.20 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-20/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 17 Aug 2012 01:01:13 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2693</guid>

					<description><![CDATA[このリリースは 8.3.19 からの修正リリース(2012/8/17リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.19 からの修正リリース(2012/8/17リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2693"></span></p>
<h3 class="background">PostgreSQL 8.3.19 から 8.3.20 への変更点</h3>
<p>9.1.5、9.0.9、8.4.13, 8.3.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
XML のエンティティ参照を通して外部のファイルや URL にアクセスするのを防ぐようになりました。<BR>(Noah Misch, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>定義済みエンティティを持つドキュメント型定義 (DTD) を使用している XML文書では、&entityName; という構文でエンティティを参照できます。</p>
<p>xmlparse() 関数は XMLデータ内のエンティティ参照を解決するために、外部のファイルや URL からデータ取得しようとします。このように権限のないデータベースユーザが OS におけるデータベースサーバプロセスのユーザ権限でデータを取得できてしまいます。</p>
<p>本セキュリティ問題は CVE-2012-3489 として登録されています。</p>
<p>pg_hba.conf に以下の行があったとして、</p>
<pre>host    all     all   10.1.2.3/32  trust # <-- this is a trust machine</pre>
<p>以下の SQL を一般DBユーザで実行すると、エラーメッセージを通じてファイル内容が見えてしまいます。また、ファイル内容は出ない場合でも、ファイルの存在確認はできてしまいます。</p>
<pre>
foo=> SELECT XMLPARSE (DOCUMENT '&lt;?xml version="1.0"?&gt;
foo'&gt; &lt;!DOCTYPE book [ &lt;!ENTITY hba SYSTEM "pg_hba.conf"&gt; ]&gt;
foo'&gt; &lt;book&gt;&hba;&lt;/book&gt;');

ERROR:  invalid XML document
DETAIL:  pg_hba.conf:89: parser error : StartTag: invalid element name
host    all     all   10.1.2.3/32  trust # <-- this is a trusted machine
                                            ^
Entity: line 3: parser error : Failure to process entity hba
<book>&hba;</book>
           ^
Entity: line 3: parser error : Entity 'hba' not defined
<book>&hba;</book>

foo=> SELECT XMLPARSE (DOCUMENT '&lt;?xml version="1.0"?&gt;
foo'&gt; &lt;!DOCTYPE book [ &lt;!ENTITY file SYSTEM "/proc/12345"&gt; ]&gt;
foo'&gt; &lt;book&gt;&file;&lt;/book&gt;');

ERROR:  invalid XML document
DETAIL:  I/O warning : failed to load external entity "/proc/12345"
Entity: line 3: parser error : Failure to process entity file
&lt;book&gt;&file;&lt;/book&gt;
            ^
Entity: line 3: parser error : Entity 'file' not defined
&lt;book&gt;&file;&lt;/book&gt;
</pre>
</li>
<li>
contrib/xml2 において、xslt_process() 関数を通して外部のファイルやURL にアクセスするのを防ぐようになりました。<BR>(Peter Eisentraut) (9.1)(9.0)(8.4)(8.3)</p>
<p>xml2 モジュールで使用している libxslt ライブラリは、スタイルシートコマンドを通してファイルや URL に読み書きを提供します。したがって、データベースサーバプロセスのユーザ権限にて、データベース上のユーザからファイル読み書きができてしまいます。本修正は libxslt のセキュリティオプションでこれを防ぎます。</p>
<p>なお、xslt_process() 関数は以前から、使用にあたってセキュリティリスクがあることがマニュアルで示されていました。また、ビルド時に --with-libxslt を指定していない場合、xslt_process() 関数は利用できません。</p>
<p>本セキュリティ問題は CVE-2012-3488 として登録されています。</p>
</li>
<li>
Btreeインデックスのページの早すぎる再利用を防ぐようになりました。<BR>(Noah Misch) (9.1)(9.0)(8.4)(8.3)</p>
<p>読み取り専用トランザクションでは XID (トランザクションID) を割り当てなくても良いようにした際に、本障害が導入されてしまいました。読み取り専用トランザクションが未だ走っている削除済ページを再利用してしまう可能性があります。</p>
<p>本障害で誤ったインデックス検索結果が返ることがありえますが、タイミングが限定されるため、発生確率は低いといえます。</p>
</li>
<li>
シーケンスの作成、リセット操作におけるクラッシュ安全性の障害が修正されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>シーケンスを作成あるいはリセットして、次に ALTER SEQUENCE を実行して、そこで nextval() を実行した後、クラッシュリカバリを経ると、シーケンスの値が nextval() の実行を反映していない値となっていました。</p>
<p>以下に障害発生例を示します。</p>
<pre>
$ psql
=# CREATE SEQUENCE newseq;
=# ALTER SEQUENCE newseq INCREMENT 10;
=# SELECT nextval('newseq');
 nextval
---------
       1

$ pg_ctl stop -m immediate
$ pg_ctl start
$ psql
=# SELECT nextval('newseq');
 nextval
---------
       1
(1 row)
</pre>
</li>
<li>
enum型の値の比較で競合状態が発生するのが修正されました。<BR>(Robert Haas, Tom Lane) (9.1)</p>
<p>enum型の要素追加（ALTER TYPE) と同時に実行する enum型の値を比較するクエリが失敗することがあります。以下のエラーが出ることが報告されています。</p>
<pre>ERROR:  XX000: enum value 117745 not found in cache for enum myenumtype</pre>
</li>
<li>
txid_current() 関数が XID周回時に正しく動作するように修正されました。<BR>(Heikki Linnakangas) (9.1)(9.0)</p>
<p>起動直後、非ホットスタンバイのとき正しくない XID が返ることがありました。本障害は直前のマイナーリリースバージョンの修正で入ってしまったものです。</p>
</li>
<li>
同期スタンバイとして不適切な接続が選ばれることを防止するようになりました。<BR>(Fujii Masao) (9.1)</p>
<p>プライマリが pg_receivexlog や pg_basebackup などの疑似的なスタンバイ接続を同期スタンバイと誤認してしまい、それらを待ち続けてしまう可能性がありました。</p>
</li>
<li>
プライマリで多数のサブトランザクション（SAVEPOINT）が動作しているときにホットスタンバイ起動に失敗する障害が修正されました。<BR>(Andres Freund) (9.1)(9.0)</p>
<p>以下のようなエラーメッセージが現れます。</p>
<pre>
FATAL: out-of-order XID insertion in KnownAssignedXids
LOG: startup process (PID 12345) exited with exit code 1
</pre>
</li>
<li>
backup_label ファイルが pg_start_backup() 関数実行で作成される際に fsync される（ディスク書き込みされる）ようになりました。<BR>(Dave Kerr) (9.1)(9.0)(8.4)(8.3)</p>
<p>ストレージ装置が提供するバックアップ手段と組み合わせる時に、不都合がありました。</p>
</li>
<li>
walsenderプロセスでタイムアウトの取り扱いが修正されました。<BR>(Tom Lane) (9.1)(9.0)</p>
<p>これまで SIGALARM を無視するようになっていたものをシグナルハンドラで処理をするようにしました。稀なケースで処理がブロックしてしまう（ずっと待ってしまう）ことを防ぐねらいです。</p>
</li>
<li>
walsenderプロセスが walwriterプロセスによるフラッシュが行われる度に動作するようになりました。<BR>(Andres Freund, Simon Riggs) (9.1)</p>
<p>非同期コミットのトランザクションだけであるときにレプリケーション遅延を大幅に減らします。</p>
</li>
<li>
LISTEN/NOTIFY がディスク容量不足などの I/O 問題により良く対処できるように修正されました。<BR>(Tom Lane) (9.1)(9.0)</p>
<p>書き込みに失敗した後、それ以降の全ての NOTIFY メッセージ送信は以下のような不適切なエラーメッセージが出て失敗していました。Success となっている箇所に I/O 問題のエラーが表示されるべきでした。</p>
<pre>
ERROR: could not access status of transaction 0
DETAIL: Could not read from file "pg_notify/01A3" at offset 112345: Success
</pre>
</li>
<li>
直接ブロックされたプロセスによってのみ autovacuum が自動キャンセルするように修正されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>修正前は一貫性に欠けた振る舞いをしていました。本修正により自動VACUUM が deadlock_timeout よりも短い時間で自動にキャンセルされることはなくなります。</p>
</li>
<li>
自動VACUUM キャンセルのログ出力が改善されました。<BR>(Robert Haas) (9.1)(9.0)(8.4)(8.3)</p>
<p>「sending cancel to blocking autovacuum PID ...」というメッセージが DEBUG2 レベルで出ていましたが、LOG レベルで出るようになりました。<br />
「DETAIL: Process ... waits for ... on ...」というロック待ちの詳細も出力されるようになりました。</p>
</li>
<li>
log collector (ロガープロセス）の log_truncate_on_rotation 指定が、サーバ起動後の初回ログローテーションでも動作するように修正されました。<br />
<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>サーバ再起動が頻繁に行われる環境下では、ローテーションに伴う古いログメッセージの切捨てが機能しませんでした。</p>
</li>
<li>
WITH 節における入れ子の集合演算(UNION、INTERSECT、EXCEPT）について修正されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>以下のような SQL が動作するようになります。</p>
<pre>
=# WITH outermost(x) AS ( SELECT 1 UNION (
    WITH innermost AS ( SELECT 2 )
    SELECT * FROM innermost UNION SELECT 3))
   SELECT * FROM outermost;
 x
---
 1
 2
 3
(3 rows)
</pre>
<p>修正前は以下エラーが出て、動作しませんでした。</p>
<pre>
ERROR:  relation "innermost" does not exist
LINE 1: ...UNION (WITH innermost as (SELECT 2) SELECT * FROM innermost ...
</pre>
</li>
<li>
サブクエリに対する行全体参照で余計なカラムが含まれないように修正されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>GROUP BY や ORDER BY で指定したカラムが追加されてしまっていました。以下は修正前の実行例です。本来は１カラム出力になります。</p>
<pre>
=# CREATE TABLE int4_tbl (f1 int4);
=# INSERT INTO int4_tbl VALUES (1), (2), (3);
=# SELECT q FROM (SELECT max(f1) FROM int4_tbl GROUP BY f1 ORDER BY f1) q;
   q
-------
 (1,1)
 (2,2)
 (3,3)
(3 rows)

(正しい出力)
=# SELECT q FROM (SELECT max(f1) FROM int4_tbl GROUP BY f1 ORDER BY f1) q;
   q
-------
 (1)
 (2)
 (3)
(3 rows)
</pre>
</li>
<li>
ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } USING INDEX 文で生成される依存関係について修正されました。<BR>(Tom Lane) (9.1)</p>
<p>不要な pg_depend システムテーブルの項目が残っていて、その後の操作、特にインデックスのカラムに対する ALTER TABLE ... ALTER COLUMN TYPE に混乱が生じていました。</p>
<p>以下の手順でエラーが発生してしまう現象が報告されています。</p>
<pre>
=# CREATE TABLE z (i int4);
=# CREATE UNIQUE INDEX q ON z (i);
=# ALTER TABLE z ADD PRIMARY KEY USING INDEX q;
=# ALTER TABLE z ALTER COLUMN i TYPE int8;
ERROR:  could not open relation with OID 76087
</pre>
</li>
<li>
CREATE EXTENTION を行ったロールに対する REASSIGN OWNED に失敗する障害が修正されました。<BR>(Alvaro Herrera) (9.1)</p>
<p>以下のようなエラーが出ることが報告されています。</p>
<pre>
=# REASSIGN OWNED BY user1 TO user2;
ERROR:  unexpected classid 3079
</pre>
</li>
<li>
CREATE TABLE ... LIKE/INHERITS において CHECK制約とインデックス定義で行全体参照が禁止されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>以下のようにテーブル全体を指定する制約があるテーブルをベースに子テーブルを作ると、制約定義と矛盾した動作をしてしまいます。</p>
<pre>
=# CREATE TABLE pt (id int primary key, v text,
     CHECK(length((pt.*)::text) < 10));
=# CREATE TABLE ct (cid int) INHERITS (pt);

=# d ct
      Table "public.ct"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | integer | not null
 v      | text    |
 cid    | integer |
Check constraints:
    "pt_check" CHECK (length(ct.*::text) < 10)
Inherits: pt

=# INSERT INTO ct VALUES (1, 'AAAA', 100);
=# SELECT length(ct.*::text), ct.* FROM ct;
 length | id |  v   | cid
--------+----+------+-----
     12 |  1 | AAAA | 100
</pre>
<p>また、CERATE TABLE ... LIKE の場合には以下のようなエラーが生じます。</p>
<pre>
=# CREATE TABLE lt (cid int, LIKE pt INCLUDING ALL);
=# INSERT INTO lt VALUES (101, 2, 'A');
ERROR:  table row type and query-specified row type do not match
DETAIL:  Table has type integer at ordinal position 2, but query expects text.
</pre>
<p>修正後バージョンは以下のようにエラーになります。</p>
<pre>
=# CREATE TABLE ct (cid int) INHERITS (pt) ;
ERROR:  cannot convert whole-row table reference
DETAIL:  Constraint "pt_check" contains a whole-row reference to table "pt".
</pre>
<p>なお、インデックスについては以下のようなインデックスがあるテーブルを CREATE TABLE .. LIKE で参照したテーブル定義が禁止されます。</p>
<pre>
=# CREATE UNIQUE INDEX pt_unique_all ON pt ((pt.*));
=# CREATE TABLE lt (cid int, LIKE pt INCLUDING ALL);
ERROR:  cannot convert whole-row table reference
DETAIL:  Index "pt_unique_all" contains a whole-row table reference.
</pre>
</li>
<li>
サブクエリとして、ARRAY(SELECT ...) を実行した場合、メモリリークとなる不具合が修正されました。<BR>(Heikki Linnakangas, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>メモリリークを避けるため、当該コードで使われている値を空にするタイミングを修正しています。</p>
</li>
<li>
正しい文字配列順を評価選択オペレータに渡すようにプランナが修正されました。<BR>(Tom Lane) (9.1)</p>
<p>以前は、コア機能においては、必要とされていませんでしたが、サードパーティには必要になると判断されました。</p>
</li>
<li>
正規表現から共通の接頭辞を抽出する処理が修正されました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>「^(foo)?bar」のような、括弧内の部分正規表現に対する検索で、不正なインデックス最適化を引き起こしていました。</p>
</li>
<li>
interval型定数の「hh:mm」と「hh:mm:ss」フィールドの解析における不具合が修正されました。<BR>(Amit Kapila, Tom Lane) (9.1)(9.0)(8.4)</p>
<p>以下のようなケースとなります。時分秒の判別に失敗しています。</p>
<pre>
SELECT interval '1 +2:03' minute to second;
 正： 1 day 00:02:03
 誤： 1 day 02:03:00

SELECT interval '1 +2:03:04' minute to second;
 正： 1 day 02:03:04
 誤： 1 day -00:02:03

SELECT interval '1 -2:03' minute to second;
 正： 1 day -00:02:03
 誤： 1 day -02:03:00

SELECT interval '123 2:03 -2:04';
 正： ERROR:  invalid input syntax for type interval: "123 2:03 -2:04"
 誤： 123 days 02:03:00
</pre>
<p>'123 day 2 hour 3 minute' のような書き方であれば本障害は関係しません。</p>
</li>
<li>
部分的な GROUP BY リストを含むビューを適切に扱うように、pg_dump が修正されました。<BR>(Tom Lane) (9.1)</p>
<p>pg_dump で以下のような形のビューについて、プライマリキーへの依存関係が不適切に判断されててしまいました。</p>
<pre>
 CREATE VIEW v AS
  SELECT t1.id, t1.v1, t1.v2 FROM t1
   LEFT JOIN t2 ON t1.id = t2.t1id
   GROUP BY t1.id;
</pre>
<p>プライマリキーへの依存関係を不適切に扱っている pg_dump 出力では、良くても非効率なリストアとなり、最悪の場合、並行動作オプション (-j) での pg_restore が完全に失敗していました。</p>
<p>pg_restore で以下のようなエラーが出る可能性があります。</p>
<pre>
pg_restore: [archiver (db)] could not execute query:
ERROR:  column "t1.v1" must appear in the GROUP BY clause or be used
in an aggregate function
</pre>
<p>カスタム形式（-Fc）アーカイブを使って並行リストアをさせる場合の問題となります。</p>
</li>
<li>
PL/Perl において、SQL_ASCII エンコードの場合、UTF8フラグを避けるよう修正されました。<BR>(Alex Hunsaker, Kyotaro Horiguchi, Alvaro Herrera) (9.1)</li>
<li>
PL/Python で Python ユニコードをサーバエンコードに変換するとき、Python ではなく、PostgreSQL のエンコード変換ファンクションを使うように修正されました。<br />
<BR>(Jan Urbanski) (9.1)(9.0)</p>
<p>この修正はいくつか特定ケースでの問題を回避します。特に、PostgreSQL でサポートする文字エンコーディングを Python でサポートしていないことによる問題が避けられます。</p>
<p>大きな機能的な変化は、サーバエンコーディングが SQL_ASCII の場合、UTF-8 文字コードを得ることになるということです。いままでは、非ASCII文字の文字列は全てエラーとなっていました。</p>
</li>
<li>
PL/Python の Python エンコード に対する PostgreSQLエンコードマップを修正しました。<BR>(Jan Urbanski) (9.1)(9.0)</li>
<li>
contrib/xml2 の xslt_process() におけるエラーを報告するようになりました。<BR>(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>以前は、xsltApplyStylesheet() から返ってくるエラーのチェックをしていませんでした。</p>
</li>
<li>
タイムゾーンデータファイルが tzdata release 2012e に更新されました。<BR>(9.1)(9.0)(8.4)(8.3)</p>
<p>モロッコ、トケラウ諸島における夏時間法の変更、カナダにおける歴史的な修正が適用されています。</p>
</li>
<li>
9.1 で改良された fsync 要求キュー圧縮処理が取り込まれました。<BR>(9.0)(8.4)(8.3)</p>
<p>この修正は、チェックポイントの間、パフォーマンスを向上させます。9.1の変更は、バックパッチするのに安全であり、十分なフィールドテストがされていると判断されました。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.19 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-19/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 04 Jun 2012 01:01:00 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2717</guid>

					<description><![CDATA[このリリースは 8.3.18 からの修正リリース(2012/06/04リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.18 からの修正リリース(2012/06/04リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2717"></span></p>
<h3 class="background">PostgreSQL 8.3.18 から 8.3.19 への変更点</h3>
<p>9.1.4、9.0.8、8.4.12, 8.3.19 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
contrib/pgcrypto の crypt() 関数で DESアルゴリズムでのパスワードハッシュ化が修正されました。<br />
(Solar Designer) (9.1)(9.0)(8.4)(8.3)</p>
<p>パスワード文字列に 0x80 という１バイトが含まれていると、その文字以降の文字列が無視されてしまい、パスワードが見た目よりも弱くなっていました。CYRILLIC CAPITAL LETTER KOPPA U+0480 (UTF8: 0xD2 0x80) など、0x80 はマルチバイト文字エンコーディングの 2バイト目以降として文字列データ型に含まれることがあります。</p>
<p>0x80 バイトを含むパスワードのハッシュ化データは、本修正前と本修正後で異なるものとなるため、バージョンアップにともなって、パスワード再登録が必要となります。パスワードを ASCII文字に限っているのであれば、障害による問題も、修正による影響もありません。</p>
<p>この問題は CVE-2012-2043 として登録されています。</p>
<pre>
(9.1.3 実行例)
postgres=# SELECT crypt(E'passxC2x80word', 'XX');
     crypt
---------------
 XXZ9QB82f805A
(1 row)

postgres=# SELECT crypt(E'passxC2x80', 'XX');
     crypt
---------------
 XXZ9QB82f805A
(1 row)

(9.1.4 実行例)
postgres=# SELECT crypt(E'passxC2x80word', 'XX');
     crypt
---------------
 XXYXXMy.GzcWk
(1 row)

postgres=# SELECT crypt(E'passxC2x80', 'XX');
     crypt
---------------
 XXZ9QB82f805A
(1 row)
</pre>
</li>
<li>
SECURITY DEFINER 属性と SET 属性を手続き言語呼び出しハンドラ関数むけには無視するようになりました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>これらの属性を手続き言語呼び出しハンドラ関数に適用するとサーバクラッシュが引き起こされる可能性がありました。手続き言語呼び出しハンドラ関数は、新たな手続き言語を作成するときに用意して、CREATE LANGUAGE 命令で指定するものです。</p>
<p>この問題は CVE-2012-2655 として登録されています。</p>
</li>
<li id="citext">
配列とドメインを扱えるように contrib/citext のアップグレードスクリプトが修正されました<br />
(Tom Lane) (9.1)</p>
<p>citext は大文字小文字の区別がない文字列型を提供する追加モジュールです。</p>
<p>9.1.2 バージョンから CREATE EXTENSION コマンドによるアップグレードの際に、既存の citext型のカラム定義とインデックス定義に変更を加えるようになっていましたがcitext型の配列やcitext型をベースとしたドメインについて対象となっていませんでした。</p>
<p>以下のようなエラーが生じる可能性があります。</p>
<pre>
ERROR:  could not determine which collation to use for string comparison
HINT:  Use the COLLATE clause to set the collation explicitly.
</pre>
<p>既にアップグレードをしていて問題が生じている場合には、管理者権限ユーザで、以下アップグレードスクリプト末尾に記述されている UPDATE コマンド群を手動実行してください。WITH節で始まる UPDATE コマンドがいくつか記述されています。</p>
<pre>《PGSQL_INSTALL_DIR》/share/extention/citext--unpackaged--1.0.sql</pre>
</li>
<li>
timestamp型の入力におけるタイムゾーンの UTC からの時間差の数値表現で最大16時間の差異が扱えるようになりました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>いくつかの歴史的なタイムゾーンで15時間以上の時間差が必要でした。そのようなタイムゾーンをデフォルトにした場合、ダンプデータが本修正前のバージョンで読み込めない可能性が生じます。</p>
<pre>
(9.1.3 の実行例)
postgres=# SELECT '2012-06-04 12:00:00+15'::timestamptz;
ERROR:  time zone displacement out of range: "2012-06-04 12:00:00+15"
LINE 1: SELECT '2012-06-04 12:00:00+15'::timestamptz;

(9.1.4 の実行例)
postgres=# SELECT '2012-06-04 12:00:00+15'::timestamptz;
      timestamptz
------------------------
 2012-06-04 06:00:00+09
(1 row)
</pre>
</li>
<li>
timestamp型の変換について、DST（夏時間）処理で境界ケースの振る舞いが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>ちょうど切り替わる日のときに正しく変換ができないケースがありました。</p>
<pre>
(9.1.3 以前における障害報告例)
postgres=# SET timezone TO 'Europe/Moscow';
postgres=# SELECT '2011-03-27 23:00:00'::timestamptz;
      timestamptz
------------------------
 2010-12-17 21:04:06+03
(1 row)

(9.1.4 の実行例)
postgres=# SET timezone TO 'Europe/Moscow';
postgres=# SELECT '2011-03-27 23:00:00'::timestamptz;
      timestamptz
------------------------
 2011-03-27 23:00:00+04
(1 row)
</pre>
</li>
<li>
text型からname型、char型からname型へのキャストについて修正されました。<br />
(Karl Schnaitter) (9.1)(9.0)(8.4)(8.3)</p>
<p>マルチバイト文字エンコーディングで最大長(64バイト)以上部分を切り捨てる処理が修正されました。末尾がマルチバイト文字として正しくないことがありました。</p>
</li>
<li>
to_tsquery() 関数のメモリコピーの誤りが修正されました。<br />
(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)</p>
<p>正しくない処理結果を引き起こす可能性がありました。</p>
</li>
<li>
ホットスタンバイ側で実行する際に txid_current() 関数が確実に次の XID エポック値を返すようになりました。<br />
(Simon Riggs) (9.1)(9.0)</p>
<p>トランザクション周回したときに、スタンバイ側で適切な値が返らないことが報告されていました。</p>
</li>
<li>
プランナのサブクエリ中の外側プレースホルダ変数の扱いが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)</p>
<pre>
(9.1.3 再現例)
postgres=# CREATE TABLE tbl (q1 int, q2 int);
CREATE TABLE
postgres=# SELECT * FROM tbl t1 LEFT OUTER JOIN
  (SELECT q1 AS x, 99 AS y FROM tbl t2) ss on t1.q2 = ss.x
   WHERE 1 = (SELECT 1 FROM tbl t3 WHERE ss.y IS NOT NULL );
ERROR:  Upper-level PlaceHolderVar found where not expected
</pre>
<p>外部結合で NULL の可能性のある外側クエリの変数を参照するサブクエリにおいて、問題が生じる可能性があります。該当する形状のクエリにおいて、本来発生すべきでないエラーが発生します。9.0.x、8.4.x においては、サブクエリに渡る値がNULL になるべきところそうならないため、おそらくは誤った値が黙って返ります。</p>
</li>
<li>
UNION ALL のサブクエリが単純な変数を返すのでない場合のプランが修正されました。<br />
(Tom Lane) (9.1)</p>
<p>該当する場合に著しく悪いプランが選択されていました。</p>
<pre>
(9.1.3 の悪いプラン例)
postgres=# EXPLAIN SELECT (id, v) FROM
  (SELECT 1 as c, * FROM t1 UNION ALL SELECT 2 as c, * FROM t2) as s
   WHERE c = 2 ORDER BY  v, id;
                              QUERY PLAN
----------------------------------------------------------------------
 Sort  (cost=43.17..43.19 rows=10 width=37)
   Sort Key: t1.v, t1.id
   ->  Result  (cost=0.00..43.00 rows=10 width=37)
         ->  Append  (cost=0.00..43.00 rows=10 width=37)
               ->  Seq Scan on t1  (cost=0.00..21.50 rows=5 width=37)
                     Filter: (1 = 2)
               ->  Seq Scan on t2  (cost=0.00..21.50 rows=5 width=37)
                     Filter: (2 = 2)

(9.1.4 のプラン - 実際の実行時間はこちらが速い)
                               QUERY PLAN
-------------------------------------------------------------------------
 Sort  (cost=68.83..71.33 rows=1000 width=37)
   Sort Key: t2.v, t2.id
   ->  Result  (cost=0.00..19.00 rows=1000 width=37)
         ->  Append  (cost=0.00..19.00 rows=1000 width=37)
               ->  Seq Scan on t2  (cost=0.00..19.00 rows=1000 width=37)
</pre>
</li>
<li>
pg_attribute システムテーブルが巨大なとき接続開始が遅くなるのが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>pg_attribute はテーブルにどのようなカラムが定義されているかを格納するシステムテーブルです。テーブル数が多いとき、大きくなりがちです。</p>
<p>pg_attribute のサイズが shared_buffers の 1/4 を超える場合、セッションスタート時にしばしば必要となるキャッシュ再構築を行うコードが同期スキャン処理を引き起こし、通常よりも時間を要していました。一度に多数のセッション開始（接続）が発生する場合、特に深刻でした。</p>
</li>
<li>
シーケンシャルスキャンでクエリキャンセル確認を少なくとも１ページに１回は行うようになりました。<br />
(Merlin Moncure) (9.1)(9.0)(8.4)(8.3)</p>
<p>有効行が無いページを読んでいる場合、その間、割り込みに反応することができませんでした。</p>
</li>
<li>
PGSemaphoreLock() 内部関数の Windows における実装が修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>クエリキャンセルの割り込みのタイミングによっては予期せぬ良くない結果を招く可能性がありました。</p>
</li>
<li>
ビューやルールにて行全体を表す変数（「*」)を安全に表示できるようになりました。<br />
(Abbas Butt, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>曖昧なテーブル名、カラム名を伴う稀なケースで、ダンプリストア後に出力結果が変化してしまう危険性がありました。</p>
</li>
<li>
不正なエンコーディングの扱いと調和するように COPY FROM コマンドのnullマーカー文字列の扱いが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>E'\0' は nullマーカーとして許されるべきですが、動作しませんでした。8.4 バージョンで入り込んだ問題で、8.3.x では動作していました。</p>
<pre>
(9.1.3 エラー例)
postgres=# COPY t FROM '/home/postgres/file.copy' NULL E'\0';
ERROR:  invalid byte sequence for encoding "UTF8": 0x00
HINT:  This error can also happen if the byte sequence does not match the
encoding expected by the server, which is controlled by "client_encoding".
CONTEXT:  COPY t2, line 9: "3    "
</pre>
</li>
<li>
RETURNING句を含む更新CTEクエリに対する EXPLAIN VERBOSE が修正されました。<br />
(Tom Lane) (9.1)</p>
<pre>
(9.1.3 の誤った出力例 - aテーブルへのINSERT に Output: b.bc2 と出ている)
postgres=# CREATE TABLE a (ac1 int, ac2 int);
postgres=# CREATE TABLE b (bc1 int, bc2 int);
postgres=# EXPLAIN (VERBOSE) WITH wcte AS
   (INSERT INTO a VALUES (42,47) RETURNING ac2)
    DELETE FROM b USING wcte WHERE bc1 = ac2;

                               QUERY PLAN
-------------------------------------------------------------------------
 Delete on public.b  (cost=0.04..39.58 rows=11 width=34)
   CTE wcte
     ->  Insert on public.a  (cost=0.00..0.01 rows=1 width=0)
           Output: b.bc2
           ->  Result  (cost=0.00..0.01 rows=1 width=0)
                 Output: 42, 47
   ->  Hash Join  (cost=0.03..39.57 rows=11 width=34)
         Output: b.ctid, wcte.*
         Hash Cond: (b.bc1 = wcte.ac2)
         ->  Seq Scan on public.b  (cost=0.00..31.40 rows=2140 width=10)
               Output: b.ctid, b.bc1
         ->  Hash  (cost=0.02..0.02 rows=1 width=32)
               Output: wcte.*, wcte.ac2
               ->  CTE Scan on wcte  (cost=0.00..0.02 rows=1 width=32)
                     Output: wcte.*, wcte.ac2
</pre>
</li>
<li>
アドバイザリロックが存在する場合に PREPARE TRANSACTION が正しく動作するように修正されました。<br />
(Tom Lane) (9.1)</p>
<p>歴史的に PREPARE TRANSACTION は、保持しているセッションレベルのアドバイザリロック（勧告的ロック）を無視する仕様ですが、エラーが出るようになっていました。</p>
<pre>
(9.1.3 エラー例)
postgres=# BEGIN;
postgres=# SELECT pg_advisory_lock(1234);
postgres=# PREPARE TRANSACTION 'P1234';
ERROR:  cannot PREPARE when session locks exist
</pre>
<p>9.1 でトランザクションレベルのアドバイザリロックが導入されたことに関連して本問題が入り込みました。</p>
</li>
<li>
UNLOGGED TABLE の TRUNCATE 処理が修正されました。<br />
(Robert Haas) (9.1)</p>
<p>TRUNCATE で初期化フォークファイルが作られませんでした。クラッシュ時に初期化フォークから初期化しなければいけない場合に、問題が出る可能性がありました。</p>
</li>
<li>
インタラクティブでない search_path設定における存在しないスキーマの指定をエラーとせず適用するようになりました。<br />
(Tom Lane) (9.1)</p>
<p>ALTER DATABASE SET などで存在しないスキーマを search_path に指定することができます。9.1.3 までは、ALTERコマンドまでは成功しますが、適用される段階でスキーマが存在しないとエラー扱いとなって実際には設定されない動作となっていました。</p>
<p>これが 9.1.4 ではそのまま設定されます。</p>
<p>9.1.4 でも SETコマンドで設定する場合（つまりインタラクティブな場合）には、存在しないスキーマを含んだ指定はエラーとなります。</p>
</li>
<li>
拡張モジュールのスクリプトにおける一時テーブルの障害が修正されました。<br />
(Tom Lane) (9.1)</p>
<p>拡張モジュールのアップデートスクリプトの中に ALTER TABLE がある場合などで発生し、拡張モジュールをアップデートする際に以下のようなエラーとなります。内部的に一時テーブルが使われていて、その扱いに問題がありました。</p>
<pre>
(エラー発生例)
postgres=# ALTER EXTENSION myext UPDATE TO '0.2';
ERROR:  cannot drop table pg_temp_28906 because extension myext requires it
HINT:  You can drop extension myext instead.
</pre>
</li>
<li>
自動バキュームのワーカプロセスがスタック深度を確実に確認するようになりました。<br />
(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)</p>
<p>これまで通常のバックエンドプロセス以外の子プロセスにはスタック深度のチェックが行われていませんでしたが、これを行うようになりました。特に autovacuum のワーカプロセスは、<br />
任意のユーザコードを実行することがあるため、例えばインデックス定義に無限に再帰処理を行うような障害があった場合、インスタンス全体のダウンに至る危険がありました。</p>
</li>
<li>
ログコレクタが高負荷でもログの整合性を失わないように修正されました。<br />
(Andrew Dunstan) (9.1)(9.0)(8.4)(8.3)</p>
<p>高負荷のときに大きいメッセージの再構築に失敗することがありました。これまで同時に行えるメッセージ再構築処理は20個までという恣意的な上限があったため、問題が生じていました。</p>
</li>
<li>
ログコレクタが SIGHUP (pg_ctl reload) を受けた後でも確実にファイルローテーションを継続できるように修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</li>
<li>
"ERROR: too many LWLocks taken" が GiST インデックスで出る問題が修正されました<br />
(Heikki Linnakangas) (9.1)</p>
<p>インデックス作成時に本エラーがでることが報告されていました。</p>
</li>
<li>
GINインデックスのWALリプレイのロジックが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>不要な PANIC が発生することが考えられました。</p>
</li>
<li>
クラッシュ後のスナップショット隔離レベル（9.1 の SERIALIZABLE モード) のプリペアトランザクションの衝突を正しく検知できるようになりました。<br />
(Dan Ports) (9.1)</li>
<li>
一時テーブルだけを変更するトランザクションをコミットしたとき同期レプリケーションが遅延するのを回避するようになりました。<br />
(Heikki Linnakangas) (9.1)</p>
<p>このようなケースではスタンバイサーバへの書き込みは必要ありませんが、一部のコードではそのことを認識せず待ってしまっていました。</p>
</li>
<li>
pg_basebackup のエラー処理が修正されました。<br />
(Thomas Ogrisegg, Fujii Masao) (9.1)</p>
<p>エラーの場合でも正常返り値で終了してしまうことがありました。</p>
</li>
<li>walsender が接続終了時にビジーループに入らないように修正されました。<br />
(Fujii Masao) (9.1)</li>
<li>
PL/pgSQL の RETURN NEXT コマンドのメモリリークが修正されました。<br />
(Joe Conway) (9.1)(9.0)(8.4)</li>
<li>
PL/pgSQL の GET DIAGNOSTICS コマンドが修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>対象が関数の最初の変数であるとき値が NULL になってしまいました。</p>
<pre>
(9.1.3 再現例)
postgres=# CREATE TABLE t1 (i int);
postgres=# CREATE FUNCTION f1 (OUT r1 INT) LANGUAGE plpgsql AS $$
  BEGIN
   INSERT INTO t1 VALUES (1);
   GET DIAGNOSTICS r1 = row_count;
  END $$;
postgres=# SELECT f1();   ⇒ 1 でなく NULL が返ってしまう
</pre>
</li>
<li>
PL/Perl が確実に _TD 変数でパッケージ資格を得るように修正されました。<br />
(Alex Hunsaker) (9.1)</p>
<p>以下のようなエラーが出る例が、PL/Perl 関数中の動作で、PL/Perl関数によるトリガ起動を引き起こす場合に発生していました。</p>
<pre>
ERROR:  couldn't fetch $_TD at line 4.
CONTEXT:  PL/Perl function "myplperlfuxnc"
</pre>
</li>
<li>
複合型を返す PL/Python 関数が返し値に文字列を受け入れるように修正されました。<br />
(Jan Urbanski) (9.1)</p>
<p>9.1 にて、ディクショナリのような他の形式をサポートするようにした際に混入した障害です。</p>
</li>
<li>
psql の拡張表示モード（x）でバッファオーバランの可能性があり、修正されました。<br />
(Peter Eisentraut) (9.1)(9.0)(8.4)</li>
<li>
多数のオブジェクトを含むデータベースにおける pg_dump のいくつかの性能問題が修正されました。<br />
(Jeff Janes, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>pg_dump はデータベースに多数のスキーマが含まれていたり、多数のオブジェクトが依存関係のループをなしていたり、多数のシーケンスが在った場合に、非常に遅い動作となることがありました。</p>
</li>
<li>
pg_restore のディレクトリ形式のアーカイブを読む際における、メモリリーク、ファイル識別子リークが修正されました。<br />
(Peter Eisentraut) (9.1)</li>
<li>
データベースがデフォルト以外のテーブルスペースに配置されていて、デフォルトスペースに配置されているテーブルも含まれる場合について、pg_upgrade が修正されました。<br />
(Bruce Momjian) (9.1)(9.0)</li>
<li>
ecpg で稀にメモリリークとデータ上書きの可能性があり、修正されました。<br />
(Peter Eisentraut) (9.1)(9.0)</li>
<li>
contains/dblink の dblink_exec() 関数がエラー時に一時データベース接続をリークしないように修正されました。<br />
(Tom Lane) (9.1)(9.0)(8.4)(8.3)</li>
<li>
contrib/dblink がエラーメッセージに正しい接続名を報告するように修正されました。<br />
(Kyotaro Horiguchi) (9.1)(9.0)(8.4)</li>
<li>contrib/vacuumlo が多数のラージオブジェクトを削除するときに複数のトランザクションを使うように修正されました。<br />
(Tim Lewis, Robert Haas, Tom Lane) (9.1)(9.0)</p>
<p>これは max_locks_per_transaction 設定の上限を超えるのを避けるためです。この振る舞いは新たな -l オプションによって調整できます。</p>
</li>
<li>
タイムゾーンデータファイルが tzdata release 2012c に更新されました。<br />
(9.1)(9.0)(8.4)(8.3)</p>
<p>南極、アルメニア、チリ、キューバ、フォークランド諸島、ガザ、ハイチ、ヘブロン、モロッコ、シリア、トケラウ諸島における夏時間法の変更、カナダにおける歴史的な修正が適用されています。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.18 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-18/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 27 Feb 2012 01:00:37 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2745</guid>

					<description><![CDATA[このリリースは 8.3.17 からの修正リリース(2012/02/27リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.17 より前のバージョンからアップデートを行う場合は  ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.17 からの修正リリース(2012/02/27リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.17 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-17/">8.3.17 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2745"></span></p>
<h3 class="background">PostgreSQL 8.3.17 から 8.3.18 への変更点</h3>
<p>9.1.3、9.0.7、8.4.11, 8.3.18 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
CREATE TRIGGER を行うのにトリガ関数に対する実行権限が必要になりました(Robert Haas) (9.1)(9.0)(8.4)(8.3)</p>
<p>以下のように一般ユーザ foo が テーブル t0 にトリガを作る権限をもっているとき、以前のバージョンでは、指定したトリガ関数に実行権限が無くともトリガが作れてしまいました。</p>
<pre>
db=# CREATE FUNCTION f0_trig () RETURNS TRIGGER LANGUAGE PLPGSQL
     AS $$ BEGIN 《何らかの処理定義》RETURN NEW ; END $$;
db=# REVOKE EXECUTE ON FUNCTION f0_trig() FROM public;

db=&gt; CREATE TABLE t1 (id int, v text);
db=&gt; CREATE TRIGGER tr0 BEFORE INSERT ON t1 EXECUTE PROCEDURE f0_trig();
(修正後は「ERROR:  permission denied for function f0_trig」となる）
</pre>
<p>トリガ関数が、関数所有者の権限で実行される SECURITY DEFINER 設定で定義されている場合、アクセス制限における脆弱性となりえます。別テーブル用の本来実行できないトリガ関数が、一般ユーザが作ったダミーのテーブルに対してトリガ設定することで、実行できてしまいます。この問題は CVE-2012-0866 として登録されています。</p>
</li>
<li>
SSL認証におけるコモンネーム(common name)の恣意的な長さ制限が撤廃されました (Heikki Linnakangas) (9.1)(9.0)(8.4)</p>
<p>libpq と サーバは共にSSL証明書から抽出したコモンネームを 32バイトで切捨てていました。通常は予期せぬ認証失敗が生じる以上の問題は起きません。しかし、ある証明書の保持者が他人に成りすますことができるシナリオがありえました。ちょうど 32バイトのコモンネームをもつ被害者に対して、攻撃者は信頼されたCA(認証局)に、その文字列をプレフィックスとして持つコモンネームの証明書を発行させて成りすましを実現します。</p>
<p>なお、本方法でサーバに成りすますには更にクライアント接続を乗っ取ることが必要となります。本件は CVE-2012-0867 として登録されております。</p>
</li>
<li>
pg_dump のコメントにあるオブジェクト名の中の改行がスペースに変換されます (Robert Haas) (9.1)(9.0)(8.4)(8.3)</p>
<p>pg_dump は以下のようにコメントを伴った出力をします。このとき、オブジェクト名に改行が含まれない想定の実装となっていました。</p>
<pre>
--
-- Name: t1; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--

CREATE TABLE t1 (
    id integer NOT NULL,
    v text
);
</pre>
<p>以下のような改行を含むようなテーブル名でテーブルを定義してダンプを取ると、</p>
<pre>
db=&gt; CREATE TABLE "t2
db"&gt; drop database x;
db"&gt; -- :P" (id int);
</pre>
<p>以下のようなダンプデータが生成されて、命令（この例では DROP DATABASE文)が混入してしまいます。</p>
<pre>
-- Name: t2
drop database x;
-- :P; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
--

CREATE TABLE "t2
drop database x;
-- :P" (
    id integer
);
</pre>
<p>本件は CVE-2012-0868 として登録されています。</p>
</li>
<li>
挿入と VACUUM の同時実行で btree インデックスが破損する問題が修正されました  (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>データ挿入によって生じるインデックスページ分割が、同時実行の VACUUM がインデックス要素を削除するのを失敗させることがありました。対応するテーブルの行が削除された後、誤ったインデックス要素が "ERROR: could not read block N in file ..." などを引き起こします。また、インデックス先に別のデータが置かれることで、誤った問い合わせ結果が返ることも考えられます。</p>
<p>本障害はバージョン 8.2 から存在していましたが、発生頻度が低いため、これまで明らかにされませんでした。本障害で破損したインデックスは、REINDEX で修復されます。</p>
</li>
<li>
WAL再生における一時的な共有バッファのゼロ埋めが修正されました (Tom Lane) (9.1)(9.0)</p>
<p>再生ロジックでは共有バッファをゼロ埋めすることがあり、バッファ内容は一時的に無効になります。これにより、ホットスタンバイモードでは、並行して実行している問い合わせが無効なデータを見てしまうことが起こり得ます。</p>
<p>本障害による様々な症状が考えられますが "ERROR: invalid memory alloc request size ... " が出ることが一般的です。</p>
</li>
<li>
READ COMMITTED モードにおける WITH句によるデータ変更の処理が修正されました (Tom Lane) (9.1)</p>
<p>INSERT、UPDATE、DELETE を含む WITH節は、親の UPDATE または DELETE 文が、READ COMMITTED モードにて、同時実行の更新により行の再評価を要する場合にクラッシュします。</p>
</li>
<li>
SERIALIZABLEトランザクションのクリーンアップの稀なケースについて修正されました (Dan Ports) (9.1)</p>
<p>read-write の SERIALIZABLE トランザクションを終了するとき、残っているアクティブな SERIALIZABLE トランザクションが全て read-only である場合に、クラッシュする可能性がありました。</p>
<p>SSI(Serializable Snapshot Isolation)トランザクションが採用された 9.1.x バージョンで該当します。</p>
</li>
<li>
ホットスタンバイがクラッシュした後に postmaster が再起動を試みる動作が修正されました (Tom Lane) (9.1)(9.0)</p>
<p>ロジックに誤りがあり、ホットスタンバイモードで動作しているときバックエンドプロセスがクラッシュすると、インスタンスを再起動するのではなく、終了させるようになっていました。</p>
</li>
<li>
CLUSTER、VACUUM FULLの最近更新された行に属するTOASTデータに対する処理が修正されました (Tom Lane) (9.1)(9.0)</p>
<p>TOASTテーブルのインデックスを CLUSTER、VACUUM FULL で処理するとき、"ERROR: duplicate key value violates unique constraint .. " を引き起こす可能性がありました。</p>
</li>
<li>
テーブル所有者が変更されたときに、テーブル単位の権限だけでなくカラム単位の権限も変更するようになりました (Tom Lane) (9.1)(9.0)(8.4)</p>
<p>本修正以前には、ALTER TABLE .. OWNER TO を行っても、以下のようにカラム単位権限が更新されず、元の所有者名が残ってしまいます。</p>
<pre>
db=# z t2
                          Access privileges
 Schema | Name | Type  | Access privileges | Column access privileges
--------+------+-------+-------------------+--------------------------
 public | t2   | table | baz=arwdDxt/baz  +| c1:                     +
        |      |       | foo=r/baz         |   bar=r/baz

db=# ALTER TABLE t2 OWNER TO foo;
db=# z t2
                          Access privileges
 Schema | Name | Type  | Access privileges | Column access privileges
--------+------+-------+-------------------+--------------------------
 public | t2   | table | foo=arwdDxt/foo   | c1:                     +
        |      |       |                   |   bar=r/baz
</pre>
</li>
<li>
外部データラッパーと外部サーバーが REASSIGN OWNED コマンドに対応しました (Alvaro Herrera) (9.1)(9.0)</p>
<p>これまで REASSIGN OWNED で外部データラッパー、外部サーバを持つ所有者の変更を試みると "ERROR: unexpected classid" が出ていました。</p>
</li>
<li>
ALTER USER .. SET 文、ALTER DATABASE .. SET 文で、いくつかの設定項目で実在しない値を設定できるようになりました (Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)</p>
<p>default_text_search_config、default_tablespace、temp_tablespaces で設定が可能になります。未だ有効でないテキスト検索設定や、未だ作られていないテーブルスペースを指定することができます。search_path については以前から実在しないスキーマを設定できるようになっていました。</p>
</li>
<li>
INSERT文で COLLATE句を使う場合に "ERROR: unsupported node type ..." が出る問題が修正されました (Tom Lane) (9.1)</p>
<p>以下のようなケースでエラーが発生します。</p>
<pre>
db=&gt; CREATE TABLE t3 (v varchar(25));
db=&gt; INSERT INTO t3 VALUES ('AA' COLLATE "C");
ERROR:  unsupported node type: 325
STATEMENT:  INSERT INTO t3 VALUES ('AA' COLLATE "C");
</pre>
</li>
<li>
コミット後にテーブルファイル削除に問題が生じたときにクラッシュを回避するようになりました (Tom Lane) (9.1)(9.0)(8.4)</p>
<p>DROP TABLE はトランザクションコミット後に対応するファイルの削除を引き起こします。例えばファイルアクセス権限の問題などでファイル削除に失敗した場合、トランザクションをアボートさせるには遅いので、警告メッセージを出して処理を継続します。バージョン 8.4 からこのロジックが壊れており、同状況で PANIC（クラッシュ終了）とデータベース再起動の失敗を引き起こしていました。</p>
</li>
<li>
DROP TABLESPACE の WAL再生 のエラーに対して回復できるようになりました (Tom Lane) (9.1)(9.0)</p>
<p>WAL再生でテーブルスペースのディレクトリを削除しようとして、何らかの理由（アクセス権限不足などで）で失敗することがあります。以前は、リカバリ処理が PANIC となり、データベースは手動で補正しないかぎり再起動できない状態になりました。本修正でログに問題を報告し、処理は継続するようになりました。</p>
</li>
<li>
ホットスタンバイでの AccessExclusiveLock のログ出力の競合が修正されました (Simon Riggs) (9.1)(9.0)</p>
<p>0番トランザクションによってロック待ちが生じたという誤ったログが出力されることがありました。本障害により、スタンバイサーバでアサートエラーが発生することが知られています。それ以外にも深刻な問題を引き起こす可能性があります。</p>
</li>
<li>
WAL再生のとき OIDカウンタを番号が周回した場合でも追跡するようになりました (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>これまでは WAL再生モード（リカバリ）を終了するまで、OIDカウンタは最大値で止まったままとしていました。これでおよそ実用的には問題ありませんでした。しかし、スタンバイサーバがプライマリに昇格する場合に OID カウンタを適切な値まで進めるのに時間を要することがあり、修正されました。</p>
</li>
<li>
クラッシュリカバリの最初に "consistent recovery state reached ..." という誤解を招くログメッセージが出力されないようになりました (Heikki Linnakangas) (9.1)(9.0)</li>
<li>
pg_stat_replication ビューの replay_location カラムの初期値が修正されました (Fujii Masao) (9.1)(9.0)</p>
<p>これまでは一つの WALレコードが再生されるまでは誤った値を見せていました。</p>
</li>
<li>
正規表現の「*」による後方参照が修正されました (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>本来マッチすべき文字列よりも幅広く、マッチしたものとしていました。以下例ではパターン '^([bc])1*$' に対して、実際には '^([bc])(1+|[bc]*)$' というパターンであるかのような処理がこれまで行われていました。</p>
<pre>
(本来マッチするパターン)
db=&gt; SELECT 'c' ~ '^([bc])1*$';   ⇒ TRUE
db=&gt; SELECT 'ccc' ~ '^([bc])1*$'; ⇒ TRUE

(修正前)
db=&gt; SELECT 'bcc' ~ '^([bc])1*$'; ⇒ TRUE

(修正後)
db=&gt; SELECT 'bcc' ~ '^([bc])1*$'; ⇒ FALSE
</pre>
</li>
<li>
最近に混入した inet型、cidr型の処理におけるメモリリークが修正されました (Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)</p>
<p>前回マイナーリリースにて導入された障害となります。メモリリークを引き起こし、特にこれら型のカラムに Btreeインデックスを作るときに大きく現れます。</p>
</li>
<li>
プランナの UNION ALL のときインデックス適用が制限される振る舞いが修正されました  (Tom Lane) (9.1)</p>
<p>9.1.2 バージョンの修正の際に混入した誤りとなります。</p>
</li>
<li>
WITH節が 継承されたテーブルの UPDATE、DELETE に参照されている場合におけるプラン作成について修正されました (Tom Lane) (9.1)</p>
<p>以下のような再帰問い合わせ実行時にプランナのエラーが発生していました。</p>
<pre>
db=&gt; CREATE TABLE parent (id int, val text);
db=&gt; CREATE TABLE child1 () INHERITS (parent);
db=&gt; CREATE TABLE child2 () INHERITS (parent);
db=&gt; INSERT INTO parent VALUES (1, 'p1');
db=&gt; INSERT INTO child1 VALUES (11, 'c11'),(12, 'c12');
db=&gt; INSERT INTO child2 VALUES (23, 'c21'),(24, 'c22');

db=&gt; WITH wcte AS ( INSERT INTO child1 VALUES (42, 'new')
     RETURNING id AS newid )
         UPDATE parent SET id = id + newid FROM wcte;
ERROR:  could not find plan for CTE "wcte"

db=&gt; WITH rcte AS ( SELECT max(id) AS maxid FROM parent )
     DELETE FROM parent USING rcte WHERE id = maxid;
ERROR:  could not find plan for CTE "rcte"
</pre>
</li>
<li>
GIN のコスト見積もりが「column IN ( ... )」構文でインデックス条件を扱えるようになりました (Marti Raudsepp) (9.1)</li>
<li>
失敗したトランザクションを開いた状態で接続を終了するときアサートエラーが生じるのを防ぐようになりました。 (Tom Lane) (9.1)</p>
<p>本障害は通常の --enable-cassert を指定しないビルドでは影響ありません。</p>
</li>
<li>
SQL関数中の CREATE TABLE AS あるいは SELECT INTO におけるポインタ処理の誤りが修正されました (Tom Lane) (9.1)(9.0)(8.4)</p>
<p>ほとんどの場合、--enable-cassert を設定している場合にアサートエラーが発生するだけですが、そのほかの問題が発生する可能性もあります。</p>
</li>
<li>
Windows で PostgreSQL付属のログ管理モジュールがファイルの２重クローズをしてしまうのを防ぐようになりました (MauMau) (9.1)(9.0)(8.4)(8.3)</p>
<p>通常は本エラーは表面化しません。しかし、デバッグ版の Windows では Exception を引き起こします。</p>
</li>
<li>
PL/pgSQL関数でのデータ型 I/O変換関連のメモリリークが修正されました (Andres Freund, Jan Urbanski, Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>本来より短いコンテキストで回収されるべきメモリが、関数終了時まで回収されません。</p>
</li>
<li>
Perl API の SvPVutf8() 関数の障害を回避するようになりました (Andrew Dunstan) (9.1)</p>
<p>本関数は、型グロブまたは $^V のような読み込み専用オブジェクトを扱う際にクラッシュします。PL/Perl でこれを避けるようになりました。</p>
</li>
<li>
pg_dump は拡張モジュールの設定テーブルはダンプしないようになりました (Tom Lane) (9.1)</p>
<p>--schema や --table オプションで拡張モジュール自体をダンプ対象としている場合を除いて、拡張モジュールの設定テーブルはダンプ対象外となります。</p>
</li>
<li>
pg_dump で継承テーブルのカラムの扱いが改善されました (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>子テーブルのカラムが親テーブルのカラムにおけるデフォルト式あるいは NOT NULL 指定について、文面上は一致していてもスキーマサーチパスの違いなどで実際には同一でないような指定があるとき、同一のものと誤認してしまう問題がありました。</p>
<p>以下をダンプ、リストアすると、s1.t1 テーブルと s2.t1 テーブルが同一シーケンスをデフォルト値とするように変ってしまっていました。</p>
<pre>
db=&gt; CREATE SCHEMA s1;
db=&gt; CREATE SCHEMA s2;
db=&gt; CREATE TABLE s1.t1(c1 bigserial primary key, c2 text);
db=&gt; CREATE TABLE s2.t1(c1 bigserial primary key) inherits (s1.t1);
</pre>
</li>
<li>
pg_restore で INSERT形式テーブルデータをデータベース指定してリストアする場合について修正されました (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>pg_dump にて --inserts または --column-inserts オプションを指定して取得したダンプファイルを pg_restore でリストアするときにエラーが発生します。ダンプファイル自体には誤りはなく、pg_restore の問題となります。また、直接リストアするのでなくテキストモードで出力させる場合には問題となりません。</p>
<p>以下に発生例を示します。</p>
<pre>
$ pg_dump -Fc --inserts db &gt; dump
$ createdb dbx
$ pg_restore -d dbx dump
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2635; 0 16519 TABLE DATA t postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  syntax error at or near "INT"
LINE 66: INSERT INT
                ^
    Command was: INSERT INTO t VALUES (1, 'AAAAAAAAAAAAAA');
</pre>
<p>9.1.0 は当初から障害がありましたが、9.0.x 系クA係.3.x系については前回、あるいは前々回のマイナーバージョンアップで混入した障害となります。</p>
</li>
<li>
pg_upgrade が PL/Python の共有ライブラリの名前が変わったことに対応しました (Bruce Momjian) (9.1)</p>
<p>PL/Python を含む 9.1.x 以前のデータベースを pg_upgrade でアップグレードする場合、本障害により失敗していました。</p>
</li>
<li>
pg_upgrade が regclass型カラムを含むテーブルを処理できるようになりました (Bruce Momjian) (9.1)(9.0)</p>
<p>pg_upgrade が pg_class の OID を保護するようになったため、regclass カラムを扱えない制約がなくなります。</p>
</li>
<li>
libpq が SSLクライアント証明書ファイルを探す時に ENOTDIR エラーを無視するようになりました (Magnus Hagander) (9.1)(9.0)</p>
<p>これによりユーザホームディレクトリが /dev/null などに設定してあって証明書がない場合にも SSL接続が可能となります。</p>
</li>
<li>
ecpg の SQL記述領域（SQLDA）のフィールドアライメントの問題がいくつか修正されました (Zoltan Boszormenyi) (9.1)(9.0)</li>
<li>
ecpg で DEALLOCATE 文に ATオプションが利用可能になりました (Michael Meskes) (9.1)(9.0)(8.4)</p>
<p>本機能はすでに実装されていましたが、誤ってエラーチェックで弾くようになったままとなっていました。</p>
</li>
<li>
ecpg で varchar 構造体を定義するときに 変数名を使わないようになりました (Michael Meskes) (9.1)(9.0)</p>
<p>連番を付加した自動的な命名が行われるようになります。</p>
</li>
<li>
contrib/auto_explain モジュールの JSON出力モードが正しいJSON形式を出力するように修正されました (Andrew Dunstan) (9.1)(9.0)</p>
<p>トップレベルにブランケット([])が使われていましたが、ブレース({})が適切でした。</p>
</li>
<li>
contrib/pgcrypto の encrypt_iv() と decrypt_iv() のエラー検出が修正されました (Marko Kreen) (9.1)(9.0)(8.4)(8.3)</p>
<p>これらの関数はある種の無効入力エラーを報告せず、誤った入力に対し、ランダムなゴミ値を返していました。</p>
</li>
<li>
contrib/test_parser での1バイトバッファオーバーランが修正されました (Paul Guyot) (9.1)(9.0)(8.4)(8.3)</p>
<p>コードは本来よりも1バイト多く読み込もうとしており、まれにクラッシュを引き起こします。contrib/test_parser はサンプルであるため、これ自体はセキュリティ問題ではありません。</p>
</li>
<li>
利用可能な時は ARMでのスピンロックに __sync_lock_test_and_set()を使います (Martin Pitt) (9.1)(9.0)(8.4)(8.3)</p>
<p>この関数は、以前使っていた ARMv6 以降では推奨されず使えない SWPB 命令を置き換えます。報告によると、古いコードは最近のARM基盤でも直接的な失敗にはなりません。しかし、同時アクセスの連動が行なえず、マルチプロセス処理での奇妙な失敗が起こります。</p>
</li>
<li>
-fexcess-precision=standard オプションを受け付ける gccバージョンでビルドする時は、それを使います (Andrew Dunstan) (9.1)(9.0)(8.4)(8.3)</p>
<p>これは最近の版の gcc が独創的な結果を生成し、分裂したシナリオになるのを防ぎます。</p>
</li>
<li>
FreeBSD でスレッド化した Python を使えるようになりました (Chris Rees) (9.1)(9.0)(8.4)(8.3)</p>
<p>configureスクリプトでは、これまでこの組合せは動かないとしていました。しかし FreeBSD が問題を修正したので、エラーチェックを外しました。</p>
</li>
<li>
MinGW ビルドで標準的な名前の OpenSSL ライブラリを使うようになりました (Tomasz Ostrowski) (9.1)</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.17 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-17/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 05 Dec 2011 01:01:37 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2812</guid>

					<description><![CDATA[このリリースは 8.3.16 からの修正リリース(2011/12/05リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.8 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.16 からの修正リリース(2011/12/05リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.8 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-8/">8.3.8 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2812"></span></p>
<h3 class="background">PostgreSQL 8.3.16 から 8.3.17 への変更点</h3>
<p>9.1.2、9.0.6、8.4.10、8.3.17、8.2.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
information_schema.referential_constraints ビューの障害が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>この情報スキーマのビューは各テーブルに定義された外部キーの一覧を返すもので、誤った結果を返す場合がありました。<br />既存のデータベースクラスタに修正を適用するには、各データベースに対して情報スキーマを作り直さないといけません。<br />インストール先の share 以下に情報スキーマ定義の SQLファイルがあります。</p>
<p>以下にコマンド例を示します。</p>
<pre>
  $ pg_config --sharedir
  /usr/local/pgsql/share

  $ psql -U postgres db
  db=# DROP SCHEMA information_schema CASCADE;
  db=# i /usr/local/pgsql/share/information_schema.sql
</pre>
</li>
<li>
contrib/citext のアップグレードスクリプトが修正されました。(Tom Lane) (9.1)</p>
<p>citext モジュールは大文字小文字を区別しない文字列型を提供するものです。<br />pg_upgrade で 9.1 以前のデータベースクラスタからアップグレードするときに、存在する citext 型のカラムとインデックスが正しくマークされませんでした。<br />この結果、文字列比較で以下のようなエラーが生じました。</p>
<pre>
ERROR:  could not determine which collation to use for string comparison
HINT:  Use the COLLATE clause to set the collation explicitly.
</pre>
<p>本修正は「CREATE EXTENSION citext FROM unpackaged」コマンドで、モジュールをアップグレードする場合にも対応します。</p>
<p>既にアップグレードをしていて問題が生じている場合には、管理者権限ユーザで、以下アップグレードスクリプトの末尾に記述されている UPDATE コマンドを手動実行してください。<br />share ディレクトリは「pg_config --sharedir」で確認できます。</p>
<pre>
PGSQL_INSTALL_DIR/share/extension/citext--unpackaged--1.0.sql
</pre>
</li>
<li>
スカラ値を返す関数と結合する UPDATE または DELETE でクラッシュする可能性が修正されました。(Tom Lane) (9.1)(9.0)</p>
<p>ここでスカラ値とは複数行でなく一行分の値という意味です。クラッシュは対象行が同時更新されている場合のみ発生するため、発生したりしなかったりします。</p>
</li>
<li>
GIN インデックス更新の WALレコードのリプレイの誤りが修正されました。(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>WAL レコードのリプレイは、クラッシュリカバリ、PITR バックアップからのリストア、レプリケーションで実行される動作です。</p>
<p>この誤りにより、クラッシュ後やホットスタンバイサーバで一時的にインデックス要素の検索に失敗します。ただし、当該インデックスに対する次の VACUUM で修復されます。</p>
</li>
<li>
「CREATE TABLE dest AS SELECT * FROM src」または「INSERT INTO dest SELECT * FROM src」という問い合わせで TOAST 関連のデータ破損が起きる問題が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>「ALTER TABLE ADD COLUMN」でテーブル変更されていると、そのテーブル内容を他のテーブルに転写するとき、データ破損が生じることが稀にありました。</p>
<p>この問題が明白に現れるのは 8.4 以降バージョンです。しかし、別の実行パターンで同様の誤りを引き起こす可能性があるため、それ以前のバージョンにも修正を適用しています。</p>
</li>
<li>
ホットスタンバイの起動に失敗する可能性があり、修正されました。(Simon Riggs) (9.1)(9.0)</li>
<li>
初期スナップショットが不正である場合のホットスタンバイの起動を高速にしました。(Simon Riggs) (9.1)(9.0)</li>
<li>
古い syscache 項目からの TOAST テーブルへのアクセスでの競合状態が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>syscache とはシステムカタログ内容のキャッシュです。</p>
<p>典型的な症状としては、一時的に「missing chunk number 0 for toast value NNNNN in pg_toast_2619」のようなエラーが発生します。メッセージで示される TOAST テーブルは常にシステムカタログに属するものとなります。</p>
</li>
<li>
依存関係を確認するときに、パラメータのデフォルト式で依存している関数を追跡するようになりました。(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>これまでは、参照されているものでも削除できてしまいました。そのため、以下のようなエラーが発生しました。</p>
<pre>
=# CREATE FUNCTION f2(x int DEFAULT f1(1)::int) RETURNS int
   LANGUAGE sql AS $$ SELECT 1; $$;
CREATE FUNCTION
=# DROP FUNCTION f1(int);
DROP FUNCTION
=# SELECT f2();
ERROR:  cache lookup failed for function 25244
</pre>
<p>この更新を適用しても、依存先オブジェクトが失われている状態は回復しません。デフォルト値にビルトインオブジェクト以外を使用している各関数について CREATE OR REPLACE FUNCTION を実行しなおして確認することが推奨されます。</p>
</li>
<li>
ネストループ結合でプレースホルダ変数の扱いが不適切で、修正されました。(Tom Lane) (9.1)</p>
<p>本障害では以下のエラーが生じます。「ERROR: variable not found in subplan target lists」また、外部結合を伴うとき誤った問い合わせ結果が返る可能性がありました。</p>
</li>
<li>
集約を伴う式でソートする Window 関数が修正されました。(Tom Lane) (9.1)</p>
<p>これまで「ERROR: could not find pathkey item to sort」というプランナのエラーが出ていました。</p>
</li>
<li>
「ERROR: MergeAppend child's targetlist doesn't match MergeAppend」というプランナエラーがでる問題が修正されました。(Tom Lane) (9.1)</li>
<li>
collation 適用可能な入力と collation 適用不能な入力との演算子比較におけるインデックス適用の問題が修正されました。(Tom Lane) (9.1)</p>
<p>ここでの collation とはロケールに従った文字照合のことを指します。<br />「・・・ WHERE hstore_col ? 'text'」など、collation 適用不能な型と可能な型とで比較する場合に、インデックスが想定通り使われないことがありました。</p>
</li>
<li>
複数行を返す OUT パラメータを複数持つ SQL関数がインライン展開できるようになりました。(Tom Lane) (9.1)(9.0)(8.4)</li>
<li>
JOIN REMOVAL 処理において、遅延評価のユニークインデックスを信用しないようになりました。(Tom Lane and Marti Raudsepp) (9.1)(9.0)</p>
<p>JOIN REMOVAL とは不要な結合を除去するオプティマイザの働きです。遅延評価のユニーク制約はトランザクション内では値を拘束しないことから、誤った結果を返すことがありえました。</p>
</li>
<li>
DatumGetInetP() が 1 バイトのヘッダをもつ inet 型データを展開するようになりました。また、そうでない新たなマクロ DatumGetInetPP() が追加されました。(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)</p>
<p>これは PostgreSQL サーバのコアコードには影響ありませんが、アドオンコードが、DatumGetInetP() が一般的な習慣に従ってデータ展開するものと期待していた場合に、クラッシュするのを防ぎます。</p>
<p>C言語関数や独自インデックスの記述に影響があります。</p>
</li>
<li>
money型の入出力においてロケールサポートが改善されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>全ての標準 lc_monetary フォーマットオプションをサポートするわけではないとしても、入出力関数は一貫性を欠いていました。ダンプしたものが再読み込みできないロケールがありました。</p>
</li>
<li>
設定 transform_null_equals が「CASE foo WHEN NULL ...」構文に影響を与えないようになりました。(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>transform_null_equals は CASE 構文から内部的に生成されたイコールチェックは対象外で、「foo = NULL」式が直接記述された場合だけ効果があるべきです。</p>
</li>
<li>
外部キートリガの生成順序が自己参照外部キーによりよく対応するように変更されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>そのテーブル自身を参照しているカスケード外部キーについて、一行の更新に対して ON UPDATE トリガーと CHECK トリガーが一つのイベントとして発火するようになりました。</p>
<p>ON UPDATE トリガーを先に実行しなければいけないところ、CHECK を最終的な状態になっていない行に実行し、不適切なエラーが出ることがありました。</p>
<p>これは 9.2 バージョンで導入された変更の一部を後方適用したものです。本変更を適用するにはトリガーが正しい順序になるように外部キー制約を削除し、再作成する必要があります。
</p>
</li>
<li>
IF EXISTS 節が DROP OPERATOR コマンドに対して正しく働くように修正されました。(Robert Haas) (9.1)</li>
<li>
拡張モジュール自身のスクリプトから拡張モジュールの削除を許さないようになりました。(Tom Lane) (9.1)</p>
<p>不正な拡張モジュール依存関係管理で、奇妙な振る舞いが生じるのを防ぎます。</p>
</li>
<li>
自動的に生成された型を拡張モジュールの要素であると区分しないようになりました。(Robert Haas) (9.1)</p>
<p>テーブルの行型(rowtype)や自動生成された配列型は、pg_depend において拡張モジュールの一員であるとする必要がありません。これらがあることで拡張モジュールのアップグレードが複雑になっていました。</p>
</li>
<li>
CREATE EXISTS コマンドにおいて、先在する無効な search_path 設定に対処できるようになりました。(Tom Lane) (9.1)</li>
<li>
バッファ割り当て率の計算で浮動小数点のアンダーフローを回避するようになりました。(Greg Matthews) (9.1)(9.0)(8.4)(8.3)</p>
<p>これ自体では害はありませんが、ある種のプラットフォームで不快なカーネルログメッセージが生じていました。</p>
</li>
<li>
自動バキュームのトランザクションが SERIALIZABLE モードで動作するのを防止するようになりました。(Tom Lane) (9.1)</p>
<p>自動バキュームはこれまではクラスタ全体のデフォルトトランザクション隔離レベルで動作していました。しかし、READ COMMITTED よりも高レベルで動作する必要はなく、SERIALIZABLE での動作は他のプロセスに不要な遅延をもたらしていました。</p>
</li>
<li>
walsender プロセスが確実に SIGTERM シグナルに即応するようになりました。(Magnus Hagander) (9.1)</li>
<li>
postmaster.opts ファイルがベースバックアップから除外されるようになりました。(Magnus Hagander) (9.1)</li>
<li>
Windows において設定ファイル名と行番号が保持されるようになりました。(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>これまでは、これらは pg_settings ビューで正しく表示されませんでした。</p>
</li>
<li>
ecpg の SQLDA での誤ったフィールドアライメントが修正されました。(Zoltan Boszormenyi) (9.1)(9.0)</li>
<li>
psql のコマンドヒストリで空白行が維持されるようになりました。(Robert Haas) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>これまでは空白行は除外されていました。これは空白行を含む文字列リテラルを表現するときなどに問題を引き起こしていました。</p>
</li>
<li>
プラットフォーム固有の pg_dump における無限ループが回避されました。 (Steve Singer) (9.1)</p>
<p>C言語ライブラリ関数 malloc(0) が NULL を返す場合に該当します。</p>
</li>
<li>
pg_dump におけるテキスト形式出力フォーマットの圧縮が修正されました。 (Adrian Klaver and Tom Lane) (9.1)</p>
<p>pg_dump は歴史的には -F 指定を伴わない -Z オプションを受け付けました。これは gzip 圧縮されたテキスト形式の出力をします。この振る舞いが復活しました。</p>
</li>
<li>
pg_dump が自動生成された型（テーブル行型など）に対するユーザ定義キャストをダンプするように修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)</li>
<li>
pg_dump における外部サーバ名のクオート付けの誤りが修正されました。(Tom Lane) (9.1)</li>
<li>
pg_upgrade の各種の修正が適用されました。(Bruce Momjian) (9.1)(9.0)</p>
<p>排他制約が正しく扱えるようになりました。Windows における失敗を回避します。8.4 データベースの TOASTテーブル名の不一致についてエラー等が出なくなります。</p>
</li>
<li>
PL/pgSQL にて外部テーブルを行型の定義に使えるようになりました。(Alexander Soudakov) (9.1)</li>
<li>
PL/Perl 関数の結果の変換について修正されました。(Alex Hunsaker and Tom Lane) (9.1)</p>
<p>9.1 より前のバージョンの、 void 型を返す PL/Perl 関数は返し値となる最後の Perl 文を無視するという振る舞いに戻されました。9.1.0 では、最後の分がリファレンスを返すと、エラーを投げていました。</p>
<p>また、文字列が型の入力フォーマットに合っていれば、必ず複合型むけの文字列値を返すようにします。</p>
<p>加えて、関数が関数が配列や複合型を返すように定義されていないとき、Perl の配列やハッシュを返そうとした場合、それぞれエラーを投げるようになりました。<br />以前は 'ARRAY(0x221a9a0)' や 'HASH(0x221aa90)' といった文字列が返されていました。</p>
</li>
<li>
PL/Perl の文字列が必ず正しい UTF8 エンコーディングとなるようになりました。 (Amit Khandekar and Alex Hunsaker) (9.1)</li>
<li>
PL/Perl のビルドに 好ましいバージョンの xsubpp が選択されて使われます。 (David Wheeler and Alex Hunsaker) (9.1)(9.0)(8.4)(8.3)(8.2)</li>
<li>
PL/Python 例外で SQLSTATE が正しく伝わるようになりました。(Mika Eloranta and Jan Urbanski) (9.1)</li>
<li>
現在の Python メジャーバージョン以外の PL/Python 拡張ファイルをインストールしなくなりました。 (Peter Eisentraut) (9.1)</li>
<li>
contrib 追加モジュールスクリプトの全てが、psql に与えたとき、有用なエラーメッセージを報告するように変更されました。(Andrew Dunstan and Tom Lane) (9.1)</p>
<p>CREATE EXTENSION でモジュールをロードするときに助けとなります。</p>
</li>
<li>
contrib/dict_int と contrib/dict_xsyn の誤ったコードを修正しました。 (Tom Lane) (9.1)(9.0)(8.4)(8.3)</p>
<p>一部の関数で palloc() の結果がゼロ埋めされていると想定していました。</p>
</li>
<li>
追加モジュール contrib/sepgsql が標準の再帰テストから取り除かれました。 (Tom Lane) (9.1)</p>
<p>これらのテストには root権限が必要で、自動実行させるのには実際的ではありませんでした。代わりに手動で行うものとして、テストスクリプトは提供されます。</p>
</li>
<li>
追加モジュール contrib/unaccent の設定読み込みにおける各種誤りが修正されました。(Tom Lane) (9.1)(9.0)</li>
<li>
pgstatindex() でクエリキャンセル割り込みへの対応を尊重するようになりました。(Robert Haas) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>pgstattuple() にも同様の問題があり、これは過去に修正されています。</p>
</li>
<li>
Mac OS X むけの起動スクリプトでログファイル名の誤ったクオートが修正されました。 (Sidar Lopez) (9.1)(9.0)</li>
<li>
意図しない WAL_DEBUG の有効化がもとに戻されました。 (Robert Haas) (9.1)</p>
<p>ソースコード中の設定項目 WAL_DEBUG が 9.1.0 でデフォルトで有効となっていました。これは軽微な負荷ですがデフォルトとすることは意図したものではないので元に戻されました。</p>
<p>src/include/pg_config_manual.h に設定箇所があります。</p>
</li>
<li>
VPATHビルドで適切に全サーバヘッダファイルがインストールされるようになりました。(Peter Eisentraut) (9.1)(9.0)(8.4)(8.3)(8.2)</li>
<li>
VPATH ビルドした時の verbose モードのエラーメッセージでのファイル名表示が短くなりました。(Peter Eisentraut) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>以下のような長い表示が出ていました。</p>
<pre>
ERROR:  42703: column "foo" does not exist
LINE 1: select foo;
               ^
LOCATION:  transformColumnRef, /build/buildd-postgresql-9.1_9.1.1-3-i386-AP0ovQ/postgresql-9.1-9.1.1/build/../src/backend/parser/parse_expr.c:766
</pre>
<p>ソースを展開したディレクトリ上でビルドする場合には問題となりません。</p>
</li>
<li>
アメリカ中部標準時 の Windows タイムゾーン名の割り当てが修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>中部標準時を CST6CDT でなく CST6 に割り当てます。一般にDST (夏時間) はアメリカ中部で常に使われるわけではないからです。</p>
</li>
<li>
タイムゾーンデータファイルが tzdata release 2011n に更新されました。 (Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>ブラジル、キューバ、フィジー、パレスチナ、ロシア、サモアにおける夏時間法の変更が反映されます。また、アラスカと英領東アフリカの歴史的な修正が含まれます。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.16 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-16/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 26 Sep 2011 01:01:21 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2831</guid>

					<description><![CDATA[このリリースは 8.3.15 からの修正リリース(2011/09/26リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.8 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.15 からの修正リリース(2011/09/26リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.8 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-8/">8.3.8 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2831"></span></p>
<h3 class="background">PostgreSQL 8.3.15 から 8.3.16 への変更点</h3>
<p>9.1.1、9.0.5、8.4.9、8.3.16、8.2.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
テーブル格納パラメータを取得する pg_options_to_table関数で、値のないオプションに対して NULL を返すようになりました。(Tom Lane) (9.1)(9.0)(8.4)</p>
<p>これまでは クラッシュを引き起こしていました。</p>
</li>
<li>
GiSTインデックススキャンの最後でのメモリリークが修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)</p>
<p>多数の行を持つテーブルに対するGiSTベースの排他制約の検証など、分散した GiSTインデックススキャンを多数行うコマンドで、本メモリリークにより、一時的に大量のメモリを必要とすることがありました。</p>
</li>
<li>
CREATE TEMPORARY TABLE で pg_tempスキーマの明示参照を制限する動作が修正されました。(Robert Haas) (9.1)</p>
<p>これまで可能であったものが、9.1.0 で以下のようにエラーになることがありました。</p>
<pre>
=# CREATE TEMP TABLE pg_temp_2.page (id int, v text);
ERROR:  temporary tables cannot specify a schema name
</pre>
</p>
</li>
<li>
システムカタログの VACUUM FULL あるいは CLUSTER の後にカタログキャッシュが無効になるように修正されました。(Tom Lane) (9.0)</p>
<p>システムカタログの行の再配置が、同時実行中のプロセスに認識されず、その行を更新しようとするときにカタログが壊れるケースがありました。<br />最悪の場合、テーブルが完全に失われます。</p>
</li>
<li>
共有データ無効化の間の誤った処理順序が修正され、TOAST OID がシステムカタログに確実に保持されるようになりました。(Tom Lane) (9.0)</p>
<p>この誤りはシステムカタログに対する VACUUM FULL または CLUSTER の後に一時的に障害を引き起こします。</p>
</li>
<li>
疑わしいHOT更新タプルのインデックス作成の障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)</p>
<p>このバグにより、システムカタログの REINDEX の後、インデックス破損が生じる可能性がありました。ユーザインデックスに影響は無いものと考えられます。</p>
</li>
<li>
GiSTインデックスのページ分割処理におけるいくつかの障害が修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)</p>
<p>おそらく発生する可能性は低いですが、インデックス破損を招きます。</p>
</li>
<li>
tsvector_concat関数でバッファオーバランの可能性があり、修正されました。(Tom Lane) (9.0)(8.4)(8.3)</p>
<p>必要メモリ量を過小評価したために問題が生じており、サーバプロセスのクラッシュを招きます。</p>
</li>
<li>
XMLデータ型の処理関数 xml_recv が standaloneパラメータを処理するときにクラッシュする障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)</li>
<li>
ANALYZE と SJIS-2004 エンコーディング変換でバッファオーバランの可能性があり、修正されました。(Noah Misch) (9.0)(8.4)(8.3)</p>
<p>可能性は極めて低いですが、サーバプロセスがクラッシュするおそれがありました。</p>
</li>
<li>
pg_stat_reset_shared関数の引数が NULL のとき、クラッシュしないように修正されました。(Magnus Hagander) (9.0)</li>
<li>
リカバリがサブトランザクションのデッドロック検出と衝突した場合に、失敗する可能性があり、修正されました。(Tom Lane) (9.0)</li>
<li>
ホットスタンバイ中の Btreeインデックスページの再利用における実体のない衝突を避けるようになりました。 (Noah Misch, Simon Riggs) (9.0)</li>
<li>
リカバリの末尾で動作を続けているWALレシーバプロセスを落とすようになりました。(Heikki Linnakangas) (9.0)</p>
<p>これまで postmaster は、そのような状況でパニックになっていましたが、実際には正常な状態でした。</p>
</li>
<li>
定義情報キャッシュ(relcache) の最初のファイル無効化処理で、競合状態が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>新しいバックエンドプロセスが無効化メッセージを見逃し、最新でないファイルを読む可能性がありました。<br />結果、システムカタログへのアクセスで奇妙な失敗が生じます。典型的には「could not read block 0 in file ...」というエラーが、起動後に生じます。</p>
</li>
<li>
LISTEN が有効で、コマンド文字列で文字エンコーディング変換が行われる場合のメモリリークが修正されました。(Tom Lane) (9.0)</li>
<li>
HOLDカーソルと、PL/pgSQL の RETURN NEXT コマンドにおける、メモリ膨張（メモリリーク）を招く可能性のある誤ったメモリ計算が修正されました。(Tom Lane) (9.0)(8.4)</li>
<li>
トリガーに BEFORE と AFTER の両方が存在する場合の WHEN 条件について修正されました。(Tom Lane) (9.0)</p>
<p>同じ更新で、BEFORE ROWトリガーが在って動作している場合に、AFTER ROW UPDATEトリガーのWHEN条件の評価でクラッシュする可能性がありました。</p>
</li>
<li>
巨大で lossy なビットマップインデックスを構築するときの性能上の問題が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
ユニークカラムにおける JOIN 選択率の見積りが修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>これはJOIN結果の劣悪な見積りを招く誤ったプランナヒューリスティックを修正します。</p>
</li>
<li>
副問い合わせのターゲットリストにだけあらわれる入れ子のプレースホルダ式について修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>外部結合の結果に NULL が不適切に出現する可能性がありました。<br />以下は発現例。sub1 または sub2 だけ出力する SELECT文に分けて実行するとNULL は出現しないが、それらを外部結合すると NULL が現れてしまいます。</p>
<pre>
=# SELECT * FROM (select 1 as key1) sub1
   LEFT JOIN
    (SELECT sub3.key3, sub4.value2 FROM (SELECT 1 as key3) sub3
     LEFT JOIN (SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2
     FROM (SELECT 1 as key5) sub5 LEFT JOIN (SELECT 1 as key6, value1
     FROM (SELECT NULL::integer as value1) sub7 WHERE false) sub6
     ON false) sub4 ON sub4.key5 = sub3.key3) sub2
   ON sub1.key1 = sub2.key3;

 key1 | key3 | value2
------+------+--------
    1 |    1 |
(1 row)
</pre>
</p>
</li>
<li>
プランナが空の親テーブルを本当に空であると仮定できるようになりました。(Tom Lane) (9.0)</p>
<p>通常はプランニング上の理由により、空テーブルは最小だがある程度のサイズを持つものと仮定します。このヒューリスティックは、テーブル継承における親テーブル（たいていは空テーブル）に対しては弊害が大きいと考えられます。</p>
</li>
<li>
入れ子の EXISTS 問い合わせを適切に最適化できるようになりました。 (Tom Lane) (9.0)(8.4)</li>
<li>
配列処理の array_...関数と幾何データ処理の path_... 関数で、処理内部のパディングバイトが確実にゼロの並びになるように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>プランナが本来等価なデータを等しくないと判断する状況が生じ、最適化が劣悪なものになる可能性がありました。</p>
</li>
<li>
EXPLAIN が、inner indexscan 副プランの中の Result ノードとの値の引き渡しを正しく行うように修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>本問題で「ERROR: bogus varno: 65001」のようなエラーが発生します。</p>
</li>
<li>
Btreeインデックスの IS NULL 状態の事前処理について修正されました。(Dean Rasheed) (9.0)</p>
<p>同じカラムで別タイプのインデックス可能な条件が組み合わされている場合に問題があります。<br />該当するケースでは、問い合わせで結果が 0行であるべきところで出力が生じる現象を引き起こします。<br />以下は再現例です。</p>
<pre>
=# CREATE TABLE foo (a int);
=# CREATE INDEX foo_a_idx ON foo (a);
=# INSERT INTO foo VALUES (10), (NULL);
=# SELECT 1 FROM foo WHERE a IS NULL AND a > 10000;
 ?column?
----------
        1
(1 row)
</pre>
</p>
</li>
<li>
gcc 4.6.0 の障害でリカバリ（WAL replay）に失敗するのを回避するように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>クラッシュリカバリでコミット済みトランザクションが失われる可能性がありました。</p>
</li>
<li>
ビューにおける VALUES を正しくダンプできない問題が修正されました (Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>「CREATE VIEW test_view AS VALUES (1), (2), (3) ORDER BY 1」というビューをダンプすると、以下のようになってしまいます。</p>
<pre>
CREATE VIEW test_view AS
    VALUES (1), (2), (3) ORDER BY "*VALUES*".column1;
</pre>
</p>
</li>
<li>
シーケンスに対して SELECT FOR UPDATE/SHARE が禁止されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>この操作はもともと機能しないと考えられ、問題を引き起こします。</p>
</li>
<li>
pg_class.reltuples/relpages を常に更新するように VACUUM が修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>これまでビジビリティマップにより処理を省略している場合、reltuples、relpages は更新されませんでした。結果として、自動VACUUM による、テーブル毎のVACUUM実施判断が劣悪になることがありました。</p>
</li>
<li>
ハッシュテーブルのサイズを計算する際に整数オーバーフローを防ぐようになりました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
CLUSTERコマンドが削除済みTOASTデータにアクセスを試みていたものが修正されました。(Tom Lane) (9.0)(8.4)(8.3)</li>
<li>
初期認証処理の早すぎるタイムアウトが修正されました。 (Tom Lane) (9.0)</li>
<li>
ピア認証むけ証明書管理メッセージの移植性に関する障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
複数往復のやり取りが必要な場合について SSPI認証処理が修正されました。(Ahmed Shinwari, Magnus Hagander) (9.0)(8.4)(8.3)</p>
<p>典型的な症状としては "The function requested is not supported" というエラーが出ます。</p>
</li>
<li>
カスタム変数クラスを postgresql.conf に追加する際の障害が修正されました。(Tom Lane) (9.0)</p>
<p>「SELECT pg_reload_conf();」でサーバプロセスがクラッシュするケースが報告されています。</p>
</li>
<li>
pg_hba.conf に hostssl が含まれているけれど SSL が無効であるときエラーになる振る舞いが修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>従来の hostssl の行は無視されるという振る舞いの方がよりユーザフレンドリであるという結論になりました。</p>
</li>
<li>
DROP OWNED BY でシーケンスのデフォルト権限を除くときの障害が修正されました。(Shigeru Hanada) (9.0)</li>
<li>
移植用の内部関数srand48 でシード初期化の誤りが修正されました。(Andres Freund) (9.0)(8.4)(8.3)(8.2)</p>
<p>これは与えられたシードを正しく適用できませんでした。ランダム性が推測に対して弱くなるため、潜在的なセキュリティ問題をはらんでいます。OS が同名関数を提供するため PostgreSQL の srand48 関数は多くのプラットフォームでは使用されません。</p>
</li>
<li>
LIMIT と OFFSET の合計値が 2 の 63乗を超えているとき 整数オーバーフローを回避するようになりました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)</li>
<li>
int4 型版と int8 型版の generate_series関数でオーバーフロー検査が追加されました。(Robert Haas) (9.0)(8.4)(8.3)(8.2)</li>
<li>
to_char関数で後続のゼロを除く振る舞いが修正されました。(Marti Raudsepp) (9.0)(8.4)(8.3)(8.2)</p>
<p>'FM' (fill mode 充填モード) と小数点の後の数字位置指定なしの整形で、小数点の左側のゼロが誤って除去されていました。<br />以下は再現例です。本来は「10」が出力されなければいけません。</p>
<pre>
=# SELECT to_char(10, 'FM99.');
 to_char
---------
 1
</pre>
</p>
</li>
<li>
pg_size_pretty関数が 2 の 63乗に近い値で入力のオーバーフローを起こすのを回避するように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
PL/pgSQL のレコード値における型修飾子一致の検査をより緩やかにしました。(Tom Lane) (9.0)(8.4)</p>
<p>過剰なチェックは保持すべき長さ修飾の破棄を引き起こしていました。</p>
</li>
<li>
initdb でロケール名に含まれるクオートを正しく扱えるようになりました。(Heikki Linnakangas) (9.0)(8.4)</p>
<p>Windows ロケールの一部（People's Republic of China など）で問題が起きていました。</p>
</li>
<li>
contrib/pg_upgrade で孤児になった（＝自動削除されずに残った）一時テーブルのダンプを避けるように修正されました。(Bruce Momjian) (9.0)</p>
<p>システム用に予約された接頭辞 'pg_' で始まるスキーマは対象から外すようになりました。 テーブル OID が移行後に不一致となることを防ぎます。</p>
</li>
<li>
contrib/pg_upgrade が 8.3 からのアップグレードで、TOASTテーブルの relfrozenxids を保つように修正されました。(Bruce Momjian) (9.0)(8.4)</p>
<p>アップグレード後に pg_clog/ 下のファイルの早すぎる削除を引き起こす可能性がありました。</p>
</li>
<li>
contrib/pg_upgrade で、-l (ログ) オプションが Windows でも動作するように修正されました。(Bruce Momjian) (9.0)</li>
<li>
pg_ctl で Windows のサービス登録する場合にも silent mode (-s) に対応するようになりました。(MauMau) (9.0)(8.4)(8.3)</li>
<li>
psql で別ファイルから COPY を行うときにもスクリプトファイルの行番号をカウントしてしまうものが修正されました。 (Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
データベース名を指定するモードでの standard_conforming_string について pg_restore が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>standard_conforming_string = on で作られたアーカイブファイルを直接データベースにリストアするとき、pg_restore は不正なコマンドを発行する可能性がありました。</p>
</li>
<li>
pg_restore でパラレルリストアがサポートされないケースについて、より親切になりました。(Tom Lane) (9.0)(8.4)</p>
<p>サポートされないケースかをリストア動作を行う前に確認して報告するようになります。</p>
</li>
<li>
libpq の LDAPサービスを検索するコードで、メモリリークとバッファオーバーランが修正されました。(Albe Laurenz) (9.0)(8.4)(8.3)(8.2)</li>
<li>
libpq でノンブロッキング I/O と SSL接続を使っているときのエラーを回避するようになりました。(Martin Pihlak, Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
libpq の接続開始時のエラー取扱いが改善されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>特に SSL接続開始時に fork に失敗したときのエラー報告が、適切ではありませんでした。</p>
</li>
<li>
SSL接続の失敗に対する libpq のエラー出力が改善されました。(Tom Lane) (9.0)(8.4)(8.3)</li>
<li>
クライアント C ライブラリ libpq の PQsetvalue関数が、新たな行を、サーバ問い合わせで取得した PGresult に加えるとき、クラッシュするのが修正されました。(Andrew Chernow) (9.0)(8.4)</li>
<li>
ecpglib は 15桁精度の double 値を書くようになりました。(Akira Kurosawa) (9.0)(8.4)(8.3)(8.2)</li>
<li>
ecpglib で、LC_NUMERIC がエラー後に確実にもとに戻るようになりました。(Michael Meskes) (9.0)(8.4)(8.3)</li>
<li>
contrib/pgcrypto で blowfish の 8ビット文字処理の障害(CVE-2011-2483)に修正が適用されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>char が符号付きであるプラットフォームで不適切なコードでした。これにより暗号化されたパスワードが本来よりも脆弱になります。</p>
</li>
<li>
contrib/seg でメモリリークが修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)</li>
<li>
pgstatindex関数が空のインデックスに対して一貫した結果を返すように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
PL/Perl が perl 5.14 でビルドできるようになりました。(Alex Hunsaker) (9.0)(8.4)(8.3)(8.2)</li>
<li>
空白文字を含むファイルパスへのビルド、インストールの種々の問題が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>タイムゾーンデータファイルが tzdata リリース 2011i に更新されました。 (9.0)(8.4)(8.3)(8.2)
<p>カナダ、エジプト、ロシア、サモア、南スーダンの夏時間法の変更が適用されています。</p>
</li>
<li>
スタートアッププロセスが bgwriterプロセスとの相互作用で断続的なハングアップを起こすのを防ぐようになりました。(Simon Riggs) (8.4)</p>
<p>ホットスタンバイでないリカバリの場合に稀に発生していました。</p>
</li>
<li>
configureスクリプトのシステム機能調査の方式が新しくなりました。(Tom Lane) (8.4)(8.3)(8.2)</p>
<p>8.3 と 8.2 で使用している autoconfバージョン はコンパイラのリンク時の最適化にだまされることがありました。</p>
</li>
<li>
ANALYZE でバッファオーバーランが防止されました。 (Noah Misch) (8.2)</p>
<p>サーバプロセスがクラッシュする僅かな可能性がありました。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-15/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 11 Apr 2011 01:03:09 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2886</guid>

					<description><![CDATA[このリリースは 8.3.14 からの修正リリース(2011/04/18リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.8 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.14 からの修正リリース(2011/04/18リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.8 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-8/">8.3.8 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2886"></span></p>
<h3 class="background">PostgreSQL 8.3.14 から 8.3.15 への変更点</h3>
<p>9.0.4、8.4.8、8.3.15、8.2.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>
contrib/pg_upgrade の TOASTテーブルの処理が修正されました。(Bruce Momjian) (9.0)(8.4)</p>
<p>contrib/pg_upgrade はデータベースクラスタのディレクトリを直接読み取り変換することで、データのダンプ、リストアをすることなく、バージョンアップするツールです。また、TOASTテーブルとは、比較的大きいカラムのデータをテーブル本体とは別に格納するものです。pg_upgrade は、TOASTテーブルむけの pg_class.relfrozenxid 値を新バージョンに正しくコピーしていませんでした。<br />これは後に、TOAST テーブルの行検証にまだ必要な pg_clog ファイルを削除してしまう現象を引き起こし、 "could not access status of transaction xxxx" というエラーが生じます。</p>
</li>
<li>
"PD_ALL_VISIBLE flag was incorrectly set in relation xxxx" というWARNING が不適切に出るのが抑制されるようになりました。VACUUM 処理で時々、実際には問題ない場合にも本警告が発生していました。(Heikki Linnakangas) (9.0)(8.4)</li>
<li>
ホットスタンバイで衝突が発生したケースにて、より適切な SQLSTATEエラーコードを使うようになりました。 (Tatsuo Ishii and Simon Riggs) (9.0)</p>
<p>すべての再試行可能な衝突エラーは、エラーコード中に再試行可能と示すようになりました。また、データベースが落ちたために接続クローズとなったときに、ERRCODE_ADMIN_SHUTDOWN ではなく、ERRCODE_DATABASE_DROPPED と報告されるようになりました。これによりコネクションプーラーは状況に正しく対応できます。</p>
</li>
<li>
スタートアッププロセスとbgwriterプロセスとの相互作用において、断続的なハングアップが起きるのを防ぐようになりました。これは、ホットスタンバイでない通常のリカバリに影響がありました。(Simon Riggs) (9.0)</li>
<li>
複合型の中に自身を含めること（再帰的定義）が禁止されました。これによりサーバが複合型の処理を再帰的に無限に行うことを防ぎます。一方でこのような構造に用途がある可能性はありますが、それが問題なく常に働くことを確認するために要する作業を正当化するものではないと判断されました。(Tom Lane) (9.0)(8.4)(8.3)</li>
<li>
カタログキャッシュ（システムテーブルのキャッシュの一部）の初期化でデッドロックする可能性があり、これを防ぐようになりました。(Nikhil Sontakke) (9.0)(8.4)(8.3)(8.2)</p>
<p>キャッシュに読み込むコードがそのインデックスのカタログにロックを取る前にシステムインデックスに共有ロックを取る場合があり、これはデッドロックを引き起こします。</p>
</li>
<li>
行の同時UPDATE に伴う BEFORE ROW UPDATE トリガー処理で生じるポインタ障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>本障害により UPDATE分で "RETURNING ctid" を行うときに以下のエラーメッセージが断続的に発生します。<br />　　　"ERROR:  cannot extract system attribute from virtual tuple"</p>
<p>また、ごく稀に、誤ったインデックスエントリーを生成してしまうようなより深刻なエラーが起きると考えられます。</p>
</li>
<li>
テーブルに対する DEFERRED トリガーが保留されている状態での DROP TABLE が禁止されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</p>
<p>これまでは DROP できてしまいました。これにより、トリガーが最終的に実行されたときに<br />"could not open relation with OID xxxx" というエラーが生じていました。</p>
</li>
<li>
"replication" を pg_hba.conf におけるユーザ名(ロール名)としては、特別なキーワードではなくしました。通常のユーザ名として "replication" を使うことができます。(Andrew Dunstan) (9.0)</p>
<p>なお、引き続き、データベース名としては "replication" は、ストリーミングレプリケーションの接続を表すキーワードとなります。</p>
</li>
<li>
GEQO による最適化が使われている際に、WHERE句に 必ず false となる条件を指定しているときクラッシュを引き起こす問題が、修正されました。(Tom Lane) (9.0)(8.4)</p>
<p>以下の再現例が報告されています。</p>
<pre>create table tenk1 (u1 int, u2 int , t int);
create or replace view vv as
 select a.u1, b.u2, c.t, 'label'::text as lab from tenk1 a
 left join tenk1 b on a.u1 = b.u2
 left join tenk1 c on a.u1 = c.t;

=# explain select * from vv where lab = 'fool';
(正常に表示)

=# set geqo_threshold = 2;
=# explain select * from vv where lab = 'fool';
(ここで当該バックエンドプロセスがクラッシュすることがあります)</pre>
</p>
</li>
<li>
semi-join、anti-join の場合のプランナ処理が改善されました。(Tom Lane) (9.0)(8.4)</p>
<p>semi-join は「... WHERE id IN (SELECT id FROM ...)」といった形、<br />anti-join は「... WHERE id NOT IN (SELECT id FROM ...)」といった形のときの実行プランです。</p>
</li>
<li>
副問い合わせにおける SELECT FOR UPDATE の扱いが修正されました。(Tom Lane) (9.0)</p>
<p>本障害は典型的には以下のエラーを引き起こします。<br />"ERROR: cannot extract system attribute from virtual tuple"</p>
</li>
<li>
テキスト検索における選択行数の見積もりにおいてNULL数の統計情報が反映されていない問題が修正されました。(Jesper Krogh) (9.0)(8.4)</li>
<li>
インデックスアドバイザープラグインによって付加される仮定のインデックスをサポートするように get_actual_variable_range() 関数(本体コード中の内部関数)が修正されました。(Gurjeet Singh) (9.0)</li>
<li>
PL/Python の配列スライスに伴うメモリリークが修正されました。(Daniel Popowich) (9.0)(8.4)(8.3)(8.2)</li>
<li>
libpq でユーザホームディレクトリが使用できなくても SSL初期化ができるようになりました。(Tom Lane) (9.0)</p>
<p>SSLモードがルート証明書を必要としないモードであるなら、ホームディレクトリへのアクセスができなかったとしても、これを失敗とする必要はありませんでした。この変更は、9.0 以前の振る舞いに戻すものです。</p>
</li>
<li>
libpq が接続文字列の構文解析にあたり、有用なエラーメッセージを返すように修正されました。(Joseph Adams) (9.0)</p>
<p>接続文字列の間違いに対して NULL を返すのではなく、アプリケーションむけにPGConn 構造体に エラーメッセージを含めるようになりました。</p>
</li>
<li>
ecpgプリプロセッサのfloat型定数の扱いが修正されました。(Heikki Linnakangas) (9.0)</li>
<li>
pg_restore が、並列リストアを行うとき、後回しにした要素のコメントを正しく扱えるように、修正されました。(Arnd Hannemann) (9.0)</li>
<li>
pg_restore が、目次ファイル(TOC) の長い行 (1KB 以上) を処理できるように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
コンパイラによる非常に強力な最適化に対応して、ゼロ除算によるクラッシュに対する保護機構が強化されました。(Aurelien Jarno) (9.0)(8.4)(8.3)(8.2)</li>
<li>
dlopen() の利用が MIPS 上の FreeBSD、OpenBSD サポートされるようになりました。MIPS 上のこれらシステムでは利用できないものと固定的に推測されていましたが、新しいバージョンでは利用可能なので、コンパイル時テストで判断するようにしました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)</li>
<li>
HP-UX におけるコンパイル失敗が修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)</li>
<li>
プロセス開始してすぐに Windows コンソールに書き込みをするとクラッシュする問題を回避するように修正されました。標準エラーにメッセージが出力される状態で起動すると、クラッシュするケースがありました。 (Rushabh Lathia) (9.0)</li>
<li>
Windows むけに MinGW 64 bit コンパイラによるビルドがサポートされました。(Andrew Dunstan) (9.0)</li>
<li>
Windows における libintl ライブラリのバージョン非互換問題が修正されました。新しいバージョン(おそらく 0.18 以上) の libintl で問題が起きていました。(Hiroshi Inoue) (9.0)(8.4)(8.3)</li>
<li>
Windows むけビルドスクリプトで xcopy の使い方が修正され、Windows 7 でも正しく動作するようになりました。(Andrew Dunstan) (9.0)(8.4)(8.3)</li>
<li>
Cygwin 上の pg_regress のパスセパレータついて修正されました。Cygwin 環境では「;」でなく「:」を使う必要がありました。(Andrew Dunstan) (9.0)(8.4)(8.3)(8.2)</li>
<li>
タイムゾーンデータファイルが tzdata release 2011f に更新されました。チリ、キューバ、フォークランド、モロッコ、サモア、トルコの夏時間法が更新され、また、南オーストラリア、アラスカ、ハワイの歴史的修正が行われています。(9.0)(8.4)(8.3)(8.2)</li>
<li>
削除された列を持つ行型を扱うPL/pgSQLの機能が改良されました。(Pavel Stehule)(8.4)</p>
<p>これは 9.0 で導入された修正のバックポートです。</p>
</li>
</ol>

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.3.14 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-3-14/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 31 Jan 2011 01:02:31 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2902</guid>

					<description><![CDATA[このリリースは 8.3.13 からの修正リリース(2011/01/31リリース)です。 8.3.x からのアップデートではダンプ、リストアは不要です。 また、8.3.8 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.3.13 からの修正リリース(2011/01/31リリース)です。<br />
8.3.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.3.8 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-3-8/">8.3.8 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2902"></span></p>
<h3 class="background">PostgreSQL 8.3.13 から 8.3.14 への変更点</h3>
<p>9.0.3、8.4.7、8.3.14、8.2.20 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>
pg_restore のラージオブジェクトに関するテキスト出力が、元データベースで standard_conforming_strings = on であった場合について修正されました。(Tom Lane) (8.2、8.3、8.4)</p>
<p>$ pg_restore -O backup.dat | psql<br />のような pg_restore からパイプ出力をする使い方で、文字列エスケープが不適切になります。<br />データベースに直接リストアするケースでは正しく動作します。</p>
</li>
<li>
walreceiver が終了する前に受け取った WALを確実にディスクに fsyncで書き込むようになりました。(Heikki Linnakangas) (9.0)</p>
<p>本修正なしでは、システムクラッシュのタイミングによっては、スタンバイサーバが同期が行われていない WAL を再生して、データ破損を招くことが考えられます。</p>
</li>
<li>
walreceiver が fsync を過剰に発行していたものが修正されました。(Heikki Linnakangas) (9.0)</li>
<li>
ALTER TABLE によってテーブル定義を変更した場合に、制約を再確認するようになりました。(Noah Misch) (9.0)</p>
<p>以下のようなケースで制約違反が見逃されていました。</p>
<pre>   =# INSERT INTO t (1.1),(1.2);
   =# ALTER TABLE t ALTER c TYPE INT;
   =# SELECT * FROM t;
    c
   ---
    1     ユニーク制約違反
    1 </pre>
</li>
<li>
継承ツリーのテーブルがすべて同一でない場合の、継承ツリーの UPDATE に対する EvalPlanQual が修正されました。(Tom Lane)(9.0)</p>
<p>テーブル行型の（一部の子テーブルにのみ削除された列が存在するなど）何らかの変化は EvalPlanQual コードを混乱させ、誤動作、最悪はクラッシュを導きました。EvalPlanQual は同一行に対する同時更新のときだけ実行されますので、この問題は散発的にしか発生しませんでした。</p>
</li>
<li>
EXPLAINがCASE式の簡易構文の表示に失敗するのを防止するようになりました。(Tom Lane)(9.0)(8.4)(8.3)(8.2)</p>
<p>CASE のテスト式が定数の場合、プランナは CASE を式表示用コードを混乱させる形式に単純化してしまいました。その結果 EXPLAIN で以下のようなエラーが生じていました。</p>
<pre>ERROR:  unexpected CASE WHEN clause: 314</pre>
</li>
<li>
部分代入済みの配列に対する部分代入が修正されました。(Tom Lane)(9.0)(8.4)(8.3)(8.2)</p>
<p>新しく追加される添字と過去に存在した添字の先頭との間に隙間があった場合、コードは古い配列のヌルビットマップからコピーしなければならない項目数を誤計算してしまい、データ破損またはクラッシュを導く可能性がありました。以下のような初期化で不正なデータが混入するケースが報告されていました。</p>
<pre>CREATE TABLE test_array (my_array BIGINT[]);
INSERT INTO test_array (my_array) VALUES ('[40:41]={40,41}');
UPDATE test_array SET my_array[1:2]='{1,2}';
SELECT * FROM test_array;</pre>
</li>
<li>
プランナにおける、非常に時間が離れた日付値に対する想定外の変換オーバーフローが修正されました。(Tom Lane)(9.0)(8.4)(8.3)(8.2)</p>
<p>date 型は timestamp 型で表現可能な範囲よりもより広い日付範囲をサポートします。<br />しかしプランナは常に問題なく date から timestamp への変換が可能であることを仮定していました。</p>
</li>
<li>
配列に NULL 項目が含まれる場合の PL/Python のクラッシュが修正されました。(Alex Hunsaker) (9.0)</li>
<li>
ecpg で、配列次元を定義する定数の固定長の制限が取り除かれました。(Michael Meskes) (9.0)</li>
<li>
... & !(subexpression) | ... を含む tsquery 値の間違った解析が修正されました。(Tom Lane)(9.0)(8.4)(8.3)(8.2)</p>
<p>こうした演算子の組み合わせを含む問い合わせは正しく実行されませんでした。同じエラーが contrib/intarray の query_int 型と contrib/ltree の ltxtquery 型に存在しました。 </p>
</li>
<li>
query_int 型に対する contrib/intarray 入力関数におけるバッファオーバーランが修正されました。(Apple)(9.0)(8.4)(8.3)(8.2)</p>
<p>この関数の返すアドレスが上書きされる可能性があるという点で、この不具合はセキュリティ問題です。<br />Apple, Inc. のセキュリティチームにより報告され、修正版が提供されました。(CVE-2010-4015) </p>
</li>
<li>
contrib/seg の GiST picksplit アルゴリズムにおける不具合が修正されました。(Alexander Korotkov)(9.0)(8.4)(8.3)(8.2)</p>
<p>この不具合により、seg 列上の GiST インデックスにおいて実際に不正な結果になることはありませんが、非常に非効率的な結果になることがあり得ました。こうしたインデックスがある場合、この更新版をインストールした後に REINDEX 処理を行うことを検討してください。</p>
</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>
