PostgreSQL 8.3.15 に関する技術情報

このリリースは 8.3.14 からの修正リリース(2011/04/18リリース)です。
8.3.x からのアップデートではダンプ、リストアは不要です。

また、8.3.8 より前のバージョンからアップデートを行う場合は 8.3.8 に関する技術情報を参照してください。

PostgreSQL 8.3.14 から 8.3.15 への変更点

9.0.4、8.4.8、8.3.15、8.2.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。


  1. contrib/pg_upgrade の TOASTテーブルの処理が修正されました。(Bruce Momjian) (9.0)(8.4)

    contrib/pg_upgrade はデータベースクラスタのディレクトリを直接読み取り変換することで、データのダンプ、リストアをすることなく、バージョンアップするツールです。また、TOASTテーブルとは、比較的大きいカラムのデータをテーブル本体とは別に格納するものです。pg_upgrade は、TOASTテーブルむけの pg_class.relfrozenxid 値を新バージョンに正しくコピーしていませんでした。
    これは後に、TOAST テーブルの行検証にまだ必要な pg_clog ファイルを削除してしまう現象を引き起こし、 "could not access status of transaction xxxx" というエラーが生じます。

  2. "PD_ALL_VISIBLE flag was incorrectly set in relation xxxx" というWARNING が不適切に出るのが抑制されるようになりました。VACUUM 処理で時々、実際には問題ない場合にも本警告が発生していました。(Heikki Linnakangas) (9.0)(8.4)
  3. ホットスタンバイで衝突が発生したケースにて、より適切な SQLSTATEエラーコードを使うようになりました。 (Tatsuo Ishii and Simon Riggs) (9.0)

    すべての再試行可能な衝突エラーは、エラーコード中に再試行可能と示すようになりました。また、データベースが落ちたために接続クローズとなったときに、ERRCODE_ADMIN_SHUTDOWN ではなく、ERRCODE_DATABASE_DROPPED と報告されるようになりました。これによりコネクションプーラーは状況に正しく対応できます。

  4. スタートアッププロセスとbgwriterプロセスとの相互作用において、断続的なハングアップが起きるのを防ぐようになりました。これは、ホットスタンバイでない通常のリカバリに影響がありました。(Simon Riggs) (9.0)
  5. 複合型の中に自身を含めること(再帰的定義)が禁止されました。これによりサーバが複合型の処理を再帰的に無限に行うことを防ぎます。一方でこのような構造に用途がある可能性はありますが、それが問題なく常に働くことを確認するために要する作業を正当化するものではないと判断されました。(Tom Lane) (9.0)(8.4)(8.3)
  6. カタログキャッシュ(システムテーブルのキャッシュの一部)の初期化でデッドロックする可能性があり、これを防ぐようになりました。(Nikhil Sontakke) (9.0)(8.4)(8.3)(8.2)

    キャッシュに読み込むコードがそのインデックスのカタログにロックを取る前にシステムインデックスに共有ロックを取る場合があり、これはデッドロックを引き起こします。

  7. 行の同時UPDATE に伴う BEFORE ROW UPDATE トリガー処理で生じるポインタ障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    本障害により UPDATE分で "RETURNING ctid" を行うときに以下のエラーメッセージが断続的に発生します。
       "ERROR: cannot extract system attribute from virtual tuple"

    また、ごく稀に、誤ったインデックスエントリーを生成してしまうようなより深刻なエラーが起きると考えられます。

  8. テーブルに対する DEFERRED トリガーが保留されている状態での DROP TABLE が禁止されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    これまでは DROP できてしまいました。これにより、トリガーが最終的に実行されたときに
    "could not open relation with OID xxxx" というエラーが生じていました。

  9. "replication" を pg_hba.conf におけるユーザ名(ロール名)としては、特別なキーワードではなくしました。通常のユーザ名として "replication" を使うことができます。(Andrew Dunstan) (9.0)

    なお、引き続き、データベース名としては "replication" は、ストリーミングレプリケーションの接続を表すキーワードとなります。

  10. GEQO による最適化が使われている際に、WHERE句に 必ず false となる条件を指定しているときクラッシュを引き起こす問題が、修正されました。(Tom Lane) (9.0)(8.4)

    以下の再現例が報告されています。

    create table tenk1 (u1 int, u2 int , t int);
    create or replace view vv as
     select a.u1, b.u2, c.t, 'label'::text as lab from tenk1 a
     left join tenk1 b on a.u1 = b.u2
     left join tenk1 c on a.u1 = c.t;
    
    =# explain select * from vv where lab = 'fool';
    (正常に表示)
    
    =# set geqo_threshold = 2;
    =# explain select * from vv where lab = 'fool';
    (ここで当該バックエンドプロセスがクラッシュすることがあります)

  11. semi-join、anti-join の場合のプランナ処理が改善されました。(Tom Lane) (9.0)(8.4)

    semi-join は「... WHERE id IN (SELECT id FROM ...)」といった形、
    anti-join は「... WHERE id NOT IN (SELECT id FROM ...)」といった形のときの実行プランです。

  12. 副問い合わせにおける SELECT FOR UPDATE の扱いが修正されました。(Tom Lane) (9.0)

    本障害は典型的には以下のエラーを引き起こします。
    "ERROR: cannot extract system attribute from virtual tuple"

  13. テキスト検索における選択行数の見積もりにおいてNULL数の統計情報が反映されていない問題が修正されました。(Jesper Krogh) (9.0)(8.4)
  14. インデックスアドバイザープラグインによって付加される仮定のインデックスをサポートするように get_actual_variable_range() 関数(本体コード中の内部関数)が修正されました。(Gurjeet Singh) (9.0)
  15. PL/Python の配列スライスに伴うメモリリークが修正されました。(Daniel Popowich) (9.0)(8.4)(8.3)(8.2)
  16. libpq でユーザホームディレクトリが使用できなくても SSL初期化ができるようになりました。(Tom Lane) (9.0)

    SSLモードがルート証明書を必要としないモードであるなら、ホームディレクトリへのアクセスができなかったとしても、これを失敗とする必要はありませんでした。この変更は、9.0 以前の振る舞いに戻すものです。

  17. libpq が接続文字列の構文解析にあたり、有用なエラーメッセージを返すように修正されました。(Joseph Adams) (9.0)

    接続文字列の間違いに対して NULL を返すのではなく、アプリケーションむけにPGConn 構造体に エラーメッセージを含めるようになりました。

  18. ecpgプリプロセッサのfloat型定数の扱いが修正されました。(Heikki Linnakangas) (9.0)
  19. pg_restore が、並列リストアを行うとき、後回しにした要素のコメントを正しく扱えるように、修正されました。(Arnd Hannemann) (9.0)
  20. pg_restore が、目次ファイル(TOC) の長い行 (1KB 以上) を処理できるように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  21. コンパイラによる非常に強力な最適化に対応して、ゼロ除算によるクラッシュに対する保護機構が強化されました。(Aurelien Jarno) (9.0)(8.4)(8.3)(8.2)
  22. dlopen() の利用が MIPS 上の FreeBSD、OpenBSD サポートされるようになりました。MIPS 上のこれらシステムでは利用できないものと固定的に推測されていましたが、新しいバージョンでは利用可能なので、コンパイル時テストで判断するようにしました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  23. HP-UX におけるコンパイル失敗が修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)
  24. プロセス開始してすぐに Windows コンソールに書き込みをするとクラッシュする問題を回避するように修正されました。標準エラーにメッセージが出力される状態で起動すると、クラッシュするケースがありました。 (Rushabh Lathia) (9.0)
  25. Windows むけに MinGW 64 bit コンパイラによるビルドがサポートされました。(Andrew Dunstan) (9.0)
  26. Windows における libintl ライブラリのバージョン非互換問題が修正されました。新しいバージョン(おそらく 0.18 以上) の libintl で問題が起きていました。(Hiroshi Inoue) (9.0)(8.4)(8.3)
  27. Windows むけビルドスクリプトで xcopy の使い方が修正され、Windows 7 でも正しく動作するようになりました。(Andrew Dunstan) (9.0)(8.4)(8.3)
  28. Cygwin 上の pg_regress のパスセパレータついて修正されました。Cygwin 環境では「;」でなく「:」を使う必要がありました。(Andrew Dunstan) (9.0)(8.4)(8.3)(8.2)
  29. タイムゾーンデータファイルが tzdata release 2011f に更新されました。チリ、キューバ、フォークランド、モロッコ、サモア、トルコの夏時間法が更新され、また、南オーストラリア、アラスカ、ハワイの歴史的修正が行われています。(9.0)(8.4)(8.3)(8.2)
  30. 削除された列を持つ行型を扱うPL/pgSQLの機能が改良されました。(Pavel Stehule)(8.4)

    これは 9.0 で導入された修正のバックポートです。