PostgreSQL 9.1.2 に関する技術情報

このリリースは 9.1.1 からの修正リリース(2011/12/05リリース)です。
9.1.x からのアップデートではダンプ、リストアは不要です。

ただし、本バージョンで修正された information_schema.referential_constraints ビューの不具合による影響がある場合、本バージョンへのアップデート後に情報スキーマを作り直す必要があります。また、CREATE EXTENSION コマンドによるアップグレードの際に問題が生じている場合、UPDATE コマンドを手動実行が必要になります。

PostgreSQL 9.1.1 から 9.1.2 への変更点

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


  1. information_schema.referential_constraints ビューの障害が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    この情報スキーマのビューは各テーブルに定義された外部キーの一覧を返すもので、誤った結果を返す場合がありました。
    既存のデータベースクラスタに修正を適用するには、各データベースに対して情報スキーマを作り直さないといけません。
    インストール先の share 以下に情報スキーマ定義の SQLファイルがあります。

    以下にコマンド例を示します。

      $ pg_config --sharedir
      /usr/local/pgsql/share
    
      $ psql -U postgres db
      db=# DROP SCHEMA information_schema CASCADE;
      db=# \i /usr/local/pgsql/share/information_schema.sql
    
  2. contrib/citext のアップグレードスクリプトが修正されました。(Tom Lane) (9.1)

    citext モジュールは大文字小文字を区別しない文字列型を提供するものです。
    pg_upgrade で 9.1 以前のデータベースクラスタからアップグレードするときに、存在する citext 型のカラムとインデックスが正しくマークされませんでした。
    この結果、文字列比較で以下のようなエラーが生じました。

    ERROR:  could not determine which collation to use for string comparison
    HINT:  Use the COLLATE clause to set the collation explicitly.
    

    本修正は「CREATE EXTENSION citext FROM unpackaged」コマンドで、モジュールをアップグレードする場合にも対応します。

    既にアップグレードをしていて問題が生じている場合には、管理者権限ユーザで、以下アップグレードスクリプトの末尾に記述されている UPDATE コマンドを手動実行してください。
    share ディレクトリは「pg_config --sharedir」で確認できます。

    PGSQL_INSTALL_DIR/share/extension/citext--unpackaged--1.0.sql
    
  3. スカラ値を返す関数と結合する UPDATE または DELETE でクラッシュする可能性が修正されました。(Tom Lane) (9.1)(9.0)

    ここでスカラ値とは複数行でなく一行分の値という意味です。クラッシュは対象行が同時更新されている場合のみ発生するため、発生したりしなかったりします。

  4. GIN インデックス更新の WALレコードのリプレイの誤りが修正されました。(Tom Lane) (9.1)(9.0)(8.4)

    WAL レコードのリプレイは、クラッシュリカバリ、PITR バックアップからのリストア、レプリケーションで実行される動作です。

    この誤りにより、クラッシュ後やホットスタンバイサーバで一時的にインデックス要素の検索に失敗します。ただし、当該インデックスに対する次の VACUUM で修復されます。

  5. 「CREATE TABLE dest AS SELECT * FROM src」または「INSERT INTO dest SELECT * FROM src」という問い合わせで TOAST 関連のデータ破損が起きる問題が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    「ALTER TABLE ADD COLUMN」でテーブル変更されていると、そのテーブル内容を他のテーブルに転写するとき、データ破損が生じることが稀にありました。

    この問題が明白に現れるのは 8.4 以降バージョンです。しかし、別の実行パターンで同様の誤りを引き起こす可能性があるため、それ以前のバージョンにも修正を適用しています。

  6. ホットスタンバイの起動に失敗する可能性があり、修正されました。(Simon Riggs) (9.1)(9.0)
  7. 初期スナップショットが不正である場合のホットスタンバイの起動を高速にしました。(Simon Riggs) (9.1)(9.0)
  8. 古い syscache 項目からの TOAST テーブルへのアクセスでの競合状態が修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    syscache とはシステムカタログ内容のキャッシュです。

    典型的な症状としては、一時的に「missing chunk number 0 for toast value NNNNN in pg_toast_2619」のようなエラーが発生します。メッセージで示される TOAST テーブルは常にシステムカタログに属するものとなります。

  9. 依存関係を確認するときに、パラメータのデフォルト式で依存している関数を追跡するようになりました。(Tom Lane) (9.1)(9.0)(8.4)

    これまでは、参照されているものでも削除できてしまいました。そのため、以下のようなエラーが発生しました。

    =# CREATE FUNCTION f2(x int DEFAULT f1(1)::int) RETURNS int
       LANGUAGE sql AS $$ SELECT 1; $$;
    CREATE FUNCTION
    =# DROP FUNCTION f1(int);
    DROP FUNCTION
    =# SELECT f2();
    ERROR:  cache lookup failed for function 25244
    

    この更新を適用しても、依存先オブジェクトが失われている状態は回復しません。デフォルト値にビルトインオブジェクト以外を使用している各関数について CREATE OR REPLACE FUNCTION を実行しなおして確認することが推奨されます。

  10. ネストループ結合でプレースホルダ変数の扱いが不適切で、修正されました。(Tom Lane) (9.1)

    本障害では以下のエラーが生じます。「ERROR: variable not found in subplan target lists」また、外部結合を伴うとき誤った問い合わせ結果が返る可能性がありました。

  11. 集約を伴う式でソートする Window 関数が修正されました。(Tom Lane) (9.1)

    これまで「ERROR: could not find pathkey item to sort」というプランナのエラーが出ていました。

  12. 「ERROR: MergeAppend child's targetlist doesn't match MergeAppend」というプランナエラーがでる問題が修正されました。(Tom Lane) (9.1)
  13. collation 適用可能な入力と collation 適用不能な入力との演算子比較におけるインデックス適用の問題が修正されました。(Tom Lane) (9.1)

    ここでの collation とはロケールに従った文字照合のことを指します。
    「・・・ WHERE hstore_col ? 'text'」など、collation 適用不能な型と可能な型とで比較する場合に、インデックスが想定通り使われないことがありました。

  14. 複数行を返す OUT パラメータを複数持つ SQL関数がインライン展開できるようになりました。(Tom Lane) (9.1)(9.0)(8.4)
  15. JOIN REMOVAL 処理において、遅延評価のユニークインデックスを信用しないようになりました。(Tom Lane and Marti Raudsepp) (9.1)(9.0)

    JOIN REMOVAL とは不要な結合を除去するオプティマイザの働きです。遅延評価のユニーク制約はトランザクション内では値を拘束しないことから、誤った結果を返すことがありえました。

  16. DatumGetInetP() が 1 バイトのヘッダをもつ inet 型データを展開するようになりました。また、そうでない新たなマクロ DatumGetInetPP() が追加されました。(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)

    これは PostgreSQL サーバのコアコードには影響ありませんが、アドオンコードが、DatumGetInetP() が一般的な習慣に従ってデータ展開するものと期待していた場合に、クラッシュするのを防ぎます。

    C言語関数や独自インデックスの記述に影響があります。

  17. money型の入出力においてロケールサポートが改善されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    全ての標準 lc_monetary フォーマットオプションをサポートするわけではないとしても、入出力関数は一貫性を欠いていました。ダンプしたものが再読み込みできないロケールがありました。

  18. 設定 transform_null_equals が「CASE foo WHEN NULL ...」構文に影響を与えないようになりました。(Heikki Linnakangas) (9.1)(9.0)(8.4)(8.3)(8.2)

    transform_null_equals は CASE 構文から内部的に生成されたイコールチェックは対象外で、「foo = NULL」式が直接記述された場合だけ効果があるべきです。

  19. 外部キートリガの生成順序が自己参照外部キーによりよく対応するように変更されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    そのテーブル自身を参照しているカスケード外部キーについて、一行の更新に対して ON UPDATE トリガーと CHECK トリガーが一つのイベントとして発火するようになりました。

    ON UPDATE トリガーを先に実行しなければいけないところ、CHECK を最終的な状態になっていない行に実行し、不適切なエラーが出ることがありました。

    これは 9.2 バージョンで導入された変更の一部を後方適用したものです。本変更を適用するにはトリガーが正しい順序になるように外部キー制約を削除し、再作成する必要があります。

  20. IF EXISTS 節が DROP OPERATOR コマンドに対して正しく働くように修正されました。(Robert Haas) (9.1)
  21. 拡張モジュール自身のスクリプトから拡張モジュールの削除を許さないようになりました。(Tom Lane) (9.1)

    不正な拡張モジュール依存関係管理で、奇妙な振る舞いが生じるのを防ぎます。

  22. 自動的に生成された型を拡張モジュールの要素であると区分しないようになりました。(Robert Haas) (9.1)

    テーブルの行型(rowtype)や自動生成された配列型は、pg_depend において拡張モジュールの一員であるとする必要がありません。これらがあることで拡張モジュールのアップグレードが複雑になっていました。

  23. CREATE EXISTS コマンドにおいて、先在する無効な search_path 設定に対処できるようになりました。(Tom Lane) (9.1)
  24. バッファ割り当て率の計算で浮動小数点のアンダーフローを回避するようになりました。(Greg Matthews) (9.1)(9.0)(8.4)(8.3)

    これ自体では害はありませんが、ある種のプラットフォームで不快なカーネルログメッセージが生じていました。

  25. 自動バキュームのトランザクションが SERIALIZABLE モードで動作するのを防止するようになりました。(Tom Lane) (9.1)

    自動バキュームはこれまではクラスタ全体のデフォルトトランザクション隔離レベルで動作していました。しかし、READ COMMITTED よりも高レベルで動作する必要はなく、SERIALIZABLE での動作は他のプロセスに不要な遅延をもたらしていました。

  26. walsender プロセスが確実に SIGTERM シグナルに即応するようになりました。(Magnus Hagander) (9.1)
  27. postmaster.opts ファイルがベースバックアップから除外されるようになりました。(Magnus Hagander) (9.1)
  28. Windows において設定ファイル名と行番号が保持されるようになりました。(Tom Lane) (9.1)(9.0)(8.4)

    これまでは、これらは pg_settings ビューで正しく表示されませんでした。

  29. ecpg の SQLDA での誤ったフィールドアライメントが修正されました。(Zoltan Boszormenyi) (9.1)(9.0)
  30. psql のコマンドヒストリで空白行が維持されるようになりました。(Robert Haas) (9.1)(9.0)(8.4)(8.3)(8.2)

    これまでは空白行は除外されていました。これは空白行を含む文字列リテラルを表現するときなどに問題を引き起こしていました。

  31. プラットフォーム固有の pg_dump における無限ループが回避されました。 (Steve Singer) (9.1)

    C言語ライブラリ関数 malloc(0) が NULL を返す場合に該当します。

  32. pg_dump におけるテキスト形式出力フォーマットの圧縮が修正されました。 (Adrian Klaver and Tom Lane) (9.1)

    pg_dump は歴史的には -F 指定を伴わない -Z オプションを受け付けました。これは gzip 圧縮されたテキスト形式の出力をします。この振る舞いが復活しました。

  33. pg_dump が自動生成された型(テーブル行型など)に対するユーザ定義キャストをダンプするように修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)
  34. pg_dump における外部サーバ名のクオート付けの誤りが修正されました。(Tom Lane) (9.1)
  35. pg_upgrade の各種の修正が適用されました。(Bruce Momjian) (9.1)(9.0)

    排他制約が正しく扱えるようになりました。Windows における失敗を回避します。8.4 データベースの TOASTテーブル名の不一致についてエラー等が出なくなります。

  36. PL/pgSQL にて外部テーブルを行型の定義に使えるようになりました。(Alexander Soudakov) (9.1)
  37. PL/Perl 関数の結果の変換について修正されました。(Alex Hunsaker and Tom Lane) (9.1)

    9.1 より前のバージョンの、 void 型を返す PL/Perl 関数は返し値となる最後の Perl 文を無視するという振る舞いに戻されました。9.1.0 では、最後の分がリファレンスを返すと、エラーを投げていました。

    また、文字列が型の入力フォーマットに合っていれば、必ず複合型むけの文字列値を返すようにします。

    加えて、関数が関数が配列や複合型を返すように定義されていないとき、Perl の配列やハッシュを返そうとした場合、それぞれエラーを投げるようになりました。
    以前は 'ARRAY(0x221a9a0)' や 'HASH(0x221aa90)' といった文字列が返されていました。

  38. PL/Perl の文字列が必ず正しい UTF8 エンコーディングとなるようになりました。 (Amit Khandekar and Alex Hunsaker) (9.1)
  39. PL/Perl のビルドに 好ましいバージョンの xsubpp が選択されて使われます。 (David Wheeler and Alex Hunsaker) (9.1)(9.0)(8.4)(8.3)(8.2)
  40. PL/Python 例外で SQLSTATE が正しく伝わるようになりました。(Mika Eloranta and Jan Urbanski) (9.1)
  41. 現在の Python メジャーバージョン以外の PL/Python 拡張ファイルをインストールしなくなりました。 (Peter Eisentraut) (9.1)
  42. contrib 追加モジュールスクリプトの全てが、psql に与えたとき、有用なエラーメッセージを報告するように変更されました。(Andrew Dunstan and Tom Lane) (9.1)

    CREATE EXTENSION でモジュールをロードするときに助けとなります。

  43. contrib/dict_int と contrib/dict_xsyn の誤ったコードを修正しました。 (Tom Lane) (9.1)(9.0)(8.4)(8.3)

    一部の関数で palloc() の結果がゼロ埋めされていると想定していました。

  44. 追加モジュール contrib/sepgsql が標準の再帰テストから取り除かれました。 (Tom Lane) (9.1)

    これらのテストには root権限が必要で、自動実行させるのには実際的ではありませんでした。代わりに手動で行うものとして、テストスクリプトは提供されます。

  45. 追加モジュール contrib/unaccent の設定読み込みにおける各種誤りが修正されました。(Tom Lane) (9.1)(9.0)
  46. pgstatindex() でクエリキャンセル割り込みへの対応を尊重するようになりました。(Robert Haas) (9.1)(9.0)(8.4)(8.3)(8.2)

    pgstattuple() にも同様の問題があり、これは過去に修正されています。

  47. Mac OS X むけの起動スクリプトでログファイル名の誤ったクオートが修正されました。 (Sidar Lopez) (9.1)(9.0)
  48. 意図しない WAL_DEBUG の有効化がもとに戻されました。 (Robert Haas) (9.1)

    ソースコード中の設定項目 WAL_DEBUG が 9.1.0 でデフォルトで有効となっていました。これは軽微な負荷ですがデフォルトとすることは意図したものではないので元に戻されました。

    src/include/pg_config_manual.h に設定箇所があります。

  49. VPATHビルドで適切に全サーバヘッダファイルがインストールされるようになりました。(Peter Eisentraut) (9.1)(9.0)(8.4)(8.3)(8.2)
  50. VPATH ビルドした時の verbose モードのエラーメッセージでのファイル名表示が短くなりました。(Peter Eisentraut) (9.1)(9.0)(8.4)(8.3)(8.2)

    以下のような長い表示が出ていました。

    ERROR:  42703: column "foo" does not exist
    LINE 1: select foo;
                   ^
    LOCATION:  transformColumnRef, /build/buildd-postgresql-9.1_9.1.1-3-i386-AP0ovQ/postgresql-9.1-9.1.1/build/../src/backend/parser/parse_expr.c:766
    

    ソースを展開したディレクトリ上でビルドする場合には問題となりません。

  51. アメリカ中部標準時 の Windows タイムゾーン名の割り当てが修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    中部標準時を CST6CDT でなく CST6 に割り当てます。一般にDST (夏時間) はアメリカ中部で常に使われるわけではないからです。

  52. タイムゾーンデータファイルが tzdata release 2011n に更新されました。 (Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    ブラジル、キューバ、フィジー、パレスチナ、ロシア、サモアにおける夏時間法の変更が反映されます。また、アラスカと英領東アフリカの歴史的な修正が含まれます。