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

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

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.4.21 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-21/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 20 Mar 2014 01:00:48 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2418</guid>

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

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.4.20 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-20/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 20 Feb 2014 01:00:55 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2481</guid>

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

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.4.19 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-19/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 05 Dec 2013 01:00:18 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2508</guid>

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

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.4.18 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-18/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 10 Oct 2013 01:00:04 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2526</guid>

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

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

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 8.4.17 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-17/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 04 Apr 2013 01:01:15 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2576</guid>

					<description><![CDATA[このリリースは 8.4.16 からの修正リリース(2013/4/4リリース)です。 8.4.x からのアップデートではダンプ、リストアは不要です。 本リリースでは GiST インデックス管理のエラーがいくつか修正されてい ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.4.16 からの修正リリース(2013/4/4リリース)です。<br />
8.4.x からのアップデートではダンプ、リストアは不要です。</p>
<p>本リリースでは GiST インデックス管理のエラーがいくつか修正されています。<br />
本アップデートのインストール後は、後述する条件に合致する GiST インデックスの REINDEX が推奨されます。</p>
<p>また、8.4.10 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-4-10/">8.4.10 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2576"></span></p>
<h3 class="background">PostgreSQL 8.4.16 から 8.4.17 への変更点</h3>
<p>9.2.4、9.1.9、9.0.13、8.4.17 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol class="technology">
<li>
サーバコマンドラインスイッチの安全でない解析が修正されました。<br />(Mitsumasa Kondo, Kyotaro Horiguchi) (9.2)(9.1)(9.0)</p>
<p>接続リクエストに含まれるデータベース名が "-" で始まっている場合、サーバのデータディレクトリ内のファイルを損傷や破壊するために加工されている可能性があり、要求されても却下するようになります。(CVE-2013-1899)</p>
</li>
<li>
各 postmaster の子プロセスで、OpenSSL の乱数状態をリセットするようになりました。<br />(Marko Kreen) (9.2)(9.1)(9.0)(8.4)</p>
<p>これにより contrib/pgcrypto 機能が生成する乱数列が、別のデータベースユーザから簡単に推測されることを防ぎます。<br />
この脆弱性は postgresql.conf で ssl = on として設定されているが、多くの接続は SSL 暗号化を使用していない場合に重要です。(CVE-2013-1900)</p>
</li>
<li>
REPLICATION 権限のチェックを現在のユーザに対して行なうようになりました。<br />(Noah Misch) (9.2)(9.1)</p>
<p>これまで誤って、接続時に認証された当初のユーザで権限のチェックを行なっていました。<br />
権限のないデータベースユーザが、この間違いを利用して pg_start_backup() や pg_stop_backup() を呼び出すことで、定期バックアップの作成を妨害することが可能でした。(CVE-2013-1901)</p>
</li>
<li>
GiSTインデックスは、適切でない場合には、曖昧な幾何学的比較を行なわないように修正されました。<br />(Alexander Korotkov) (9.2)(9.1)(9.0)(8.4)</p>
<p>コアの幾何学型は、曖昧な比較を行ないます。<br />しかし gist_box_same は厳密な比較を行なうべきで、さもなければこれを使った GiSTインデックスは不整合になります。<br />このアップグレードをインストールした後、利用者は gist_box_same を利用している box, polygon, circle, point カラム、に対するすべての GiSTインデックスを REINDEX する必要があります。</p>
</li>
<li>
text, bytea, bit, numeric などの可変長データ型カラムに対する contrib/btree_gist の使用で、GiSTインデックスの range-union とペナルティロジックに関する誤りが修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>この誤りで、インデックスの不整合で存在するキーが見つからなかったり、不要なインデックスでの肥大化になります。<br />
利用者はこのアップデートをインストールした後、これらのインデックスを REINDEX することが推奨されます。</p>
</li>
<li>
マルチカラムインデックスに対する GiST のページ分割コードのバグを修正しました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>このエラーはインデックスの不整合を起こし、存在するはずのキーが検索で見つからなかったり、不必要に非効率なインデックス検索になります。<br />
利用者はこのアップデートのインストール後、マルチカラム GiST インデックスを REINDEX することが推奨されます。</p>
</li>
<li>
gist_point_consistent が一貫した曖昧さを扱うように修正されました。<br />(Alexander Korotkov) (9.2)(9.1)(9.0)</p>
<p>point カラムの GiSTインデックスへの、インデックススキャンは、時々シーケンシャルスキャンと異なる結果を返します。<br />
これは gist_point_consistent と、基礎のオペレータが正確にあるいは曖昧に比較を行なうかで一致していなかったためです。</p>
</li>
<li>
WAL再生中のバッファリークが修正されました。<br />(Heikki Linnakangas) (9.2)(9.1)(9.0)</p>
<p>このバグにより、バッファの参照カウンタを間違え、再生中にエラーを起こし、リカバリを不可能にします。</p>
</li>
<li>
データベースが正常に停止しておらず、recovery.conf が存在する場合、アーカイブリカバリを実行する前に、クラッシュリカバリが行なわれるようにします。<br />
<br />(Heikki Linnakangas, Kyotaro Horiguchi, Mitsumasa Kondo) (9.2)</p>
<p>稼働中サーバのファイルシステムスナップショットから、スタンバイサーバを初期化するような状況で、データベースの整合性を保証するために必要です。</p>
</li>
<li>
クラッシュリカバリ中に、まだアーカイブされていない WALファイルが削除されないようにします。<br />(Heikki Linnakangas, Fujii Masao) (9.2)</li>
<li>
DELETE RETURNING の競合が修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)</p>
<p>適切な状況では DELETE RETURNING は現プロセスがもはや pin を持っていない共有バッファからデータを取得することができます。<br />
その間に他のプロセスがこのバッファを変更すると、ゴミが返されるか、あるいはクラッシュすることになります。</p>
</li>
<li>
正規表現のコンパイルで無限ループになる危険性が修正されました。<br />(Tom Lane, Don Porter) (9.2)(9.1)(9.0)(8.4)</li>
<li>
正規表現のコンパイルで NULL ポインタ参照になる可能性が修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</li>
<li>
適切な箇所で to_char() が ASCII のみで大文字小文字変換のルールを使うように修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>これにより、いくつかの locale に依存しないテンプレートパターンでの間違った振舞が修正されます。トルコ語ロケールでの I と i の扱いで問題が報告されました。<br />例: to_char(timestamp, 'DAY')</p>
</li>
<li>
タイムスタンプ 1999年12月31日 24:00:00 の意図しない拒絶が修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</li>
<li>
SQL言語関数で安全に使えるように、範囲型用のサポート関数が修正されました。<br />(Tom Lane) (9.2)</li>
<li>
単一トランザクション内で、UNLISTEN して LISTEN を行なう時のロジックエラーが修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)</p>
<p>セッションが壊れて、listen するべき通知イベントが listen できなくなっていました。</p>
</li>
<li>
他のビューに依存されたビューにカラムが追加された場合に、プランナがクラッシュする可能性が修正されました。<br />(Tom Lane) (9.2)(9.1)</li>
<li>
EXPLAIN(ANALYZE, TIMING OFF) の性能問題が修正されました。<br />(Pavel Stehule) (9.2)</li>
<li>
「LOG: picksplit method for column ... of index "..." doesn't support secondary split」という無用なメッセージが廃止されました。<br />
<br />(Josh Hansen, Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>未だ実装されておらず、また、現在の GiST での第二分割のデフォルト処理が良好であり、おそらく今後も実装しないであろう例外処理のために、本メッセージが加わっていました。</p>
</li>
<li>
gist_box_picksplit() の第二分割サポートの残骸は削除されました。<br />(Tom Lane) (9.2)</p>
<p>この第二分割の実装は、デフォルトの実装よりも悪い物でした。<br />この処理は削除され、デフォルトのコードパスで取り扱うようにしました。</p>
</li>
<li>
セッションの最後の数トランザクションの commit/abort 数を、統計情報コレクタに送るのに失敗する可能性が修正されました。<br />
<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</li>
<li>
PL/Perl の spi_prepare() 関数使用におけるメモリリークが除去されました。<br />(Alex Hunsaker, Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>セッションレベルのメモリリークとなります（切断、再接続で解消される）。</p>
</li>
<li>
pg_dumpall が「=」を含むデータベース名を正しく扱えるように修正されました。<br />(Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)</p>
<p>これまでは「=」を含む名前のデータベースがあると pg_dumpall がエラーになっていました。</p>
</li>
<li>
pg_dump が不正な接続文字列を与えられてクラッシュしないように修正されました。<br />(Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)</p>
<p>エラー処理を出して終了すべきところで、pg_dump がクラッシュするケースがありました。</p>
</li>
<li>
pg_dump や pg_upgrade で無効なインデックスを無視するようになりました。<br />(Michael Paquier, Bruce Momjian) (9.2)(9.1)(9.0)</p>
<p>システムテーブル pg_index の indisvalid カラム値で無効であるか判断されます。<br />これによりリストア時にデータがインデックスによるユニーク制約を満たさないことで失敗する等の問題を回避します。これまでは作成途中のインデックスでもダンプに含まれていました。</p>
</li>
<li>
pg_basebackup がテーブルスペースディレクトリ下の対象バージョンのサブディレクトリのみをバックアップ取得するようになりました。<br />
<br />(Heikki Linnakangas) (9.2)(9.1)</p>
<p>これまでは他のバージョンのディレクトリも全てバックアップされていました。<br />
9.0 以降ではテーブルスペースを作成すると、指定したディレクトリの下にバージョン番号の付いたサブディレクトリが作られるため、複数の PostgreSQLバージョンで同じディレクトリをテーブルスペースとして指定する使い方がありえました。</p>
</li>
<li>
pg_basebackup と pg_receivexlog がサーババージョンをチェックするようになりました。<br />(Heikki Linnakangas) (9.2)(9.1)</p>
<p>9.1 バージョンよりも古いサーバ、コマンド自体よりも新しいバージョンに対しては「unsupported server version」というエラーが出ます。</p>
</li>
<li>
contrib/dblink が一貫性のない DateStyle 設定、IntervalStyle 設定を安全に処理できるように修正されました。<br />(Daniel Farina, Tom Lane) (9.2)</p>
<p>これまで、リモートサーバに異なる設定がされていた場合、曖昧な日付表現が誤って解釈される可能性がありました。本修正で、問い合わせ結果を取得するときだけリモートサーバ設定を一時的に適用するようになりました。本修正後も、異なる設定のリモートサーバへの dblink 問い合わせでは、同じリテラル表現が異なる意味に解釈されうるため、危険性は残ります。<br />本問題は全てのバージョンに存在しますが修正は 9.2.x 系列のみとなります。</p>
</li>
<li>
contrib/pg_trgm の similarity() 関数がトリグラムを持たない文字列に対して、 0 を返すように修正されました。<br />(Tom Lane) (9.2)(9.1)(9.0)(8.4)</p>
<p>similarity('', '') や similarity('++%%', '-*#'); のような呼び出しが該当します。以前は内部で 0/0 が行われた結果 NaN が返されていました。</p>
</li>
<li>
Microsoft Visual Studio 2012 でビルド可能になりました。<br />(Brar Piening, Noah Misch) (9.2)</li>
<li>
タイムゾーンデータが tzdata release 2013b に更新されました。<br />(9.2)(9.1)(9.0)(8.4)</p>
<p>チリ、ハイチ、モロッコ、パラグアイ、ロシアのいくつかの地域における夏時間法の変更、いくつかの歴史的な修正が含まれます。また、ロシア等で略記法データが更新されました。CHOT、GET、IRKT、KGT、KRAT、MAGT、MAWT、MSK、NOVT、OMST、TKT、VLAT、WST、YAKT、YEKT が変更され、<br />
VOLT（ボルゴグラード）、MIST（マッコーリー）が追加されました。</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.4.16 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-16/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 07 Feb 2013 01:01:28 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2590</guid>

					<description><![CDATA[このリリースは 8.4.15 からの修正リリース(2013/2/7リリース)です。 8.4.x からのアップデートではダンプ、リストアは不要です。 また、8.4.10 より前のバージョンからアップデートを行う場合は 8. ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.4.15 からの修正リリース(2013/2/7リリース)です。<br />
8.4.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.4.10 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-4-10/">8.4.10 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2590"></span></p>
<h3 class="background">PostgreSQL 8.4.15 から 8.4.16 への変更点</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.4.15 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-15/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 06 Dec 2012 01:01:08 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2621</guid>

					<description><![CDATA[このリリースは 8.4.14 からの修正リリース(2012/12/6リリース)です。 8.4.x からのアップデートではダンプ、リストアは不要です。 また、8.4.10 からアップデートを行う場合は 8.4.10 に関す ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.4.14 からの修正リリース(2012/12/6リリース)です。<br />
8.4.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.4.10 からアップデートを行う場合は <a href="/tech-blog/pgsql/8-4-10/">8.4.10 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2621"></span></p>
<h3 class="background">PostgreSQL 8.4.14 から 8.4.15 への変更点</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.4.14 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-14/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 24 Sep 2012 01:01:51 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2638</guid>

					<description><![CDATA[このリリースは 8.4.13 からの修正リリース(2012/9/24リリース)です。 8.4.x からのアップデートではダンプ、リストアは不要です。 また、8.4.10 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.4.13 からの修正リリース(2012/9/24リリース)です。<br />
8.4.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.4.10 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-4-10/">8.4.10 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2638"></span></p>
<h3 class="background">PostgreSQL 8.4.13 から 8.4.14 への変更点</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.4.13 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/8-4-13/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Fri, 17 Aug 2012 01:02:51 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 8.4]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=2690</guid>

					<description><![CDATA[このリリースは 8.4.12 からの修正リリース(2012/8/17リリース)です。 8.4.x からのアップデートではダンプ、リストアは不要です。 また、8.4.10 より前のバージョンからアップデートを行う場合は 8 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 8.4.12 からの修正リリース(2012/8/17リリース)です。<br />
8.4.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、8.4.10 より前のバージョンからアップデートを行う場合は <a href="/tech-blog/pgsql/8-4-10/">8.4.10 に関する技術情報</a>を参照してください。</p>
<p><span id="more-2690"></span></p>
<h3 class="background">PostgreSQL 8.4.12 から 8.4.13 への変更点</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>
	</channel>
</rss>
