PostgreSQL 9.1.1 に関する技術情報

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

PostgreSQL 9.1.0 から 9.1.1 への変更点

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


  1. テーブル格納パラメータを取得する pg_options_to_table関数で、値のないオプションに対して NULL を返すようになりました。(Tom Lane) (9.1)(9.0)(8.4)

    これまでは クラッシュを引き起こしていました。

  2. GiSTインデックススキャンの最後でのメモリリークが修正されました。(Tom Lane) (9.1)(9.0)(8.4)(8.3)(8.2)

    多数の行を持つテーブルに対するGiSTベースの排他制約の検証など、分散した GiSTインデックススキャンを多数行うコマンドで、本メモリリークにより、一時的に大量のメモリを必要とすることがありました。

  3. CREATE TEMPORARY TABLE で pg_tempスキーマの明示参照を制限する動作が修正されました。(Robert Haas) (9.1)

    これまで可能であったものが、9.1.0 で以下のようにエラーになることがありました。

    =# CREATE TEMP TABLE pg_temp_2.page (id int, v text);
    ERROR:  temporary tables cannot specify a schema name
    

  4. システムカタログの VACUUM FULL あるいは CLUSTER の後にカタログキャッシュが無効になるように修正されました。(Tom Lane) (9.0)

    システムカタログの行の再配置が、同時実行中のプロセスに認識されず、その行を更新しようとするときにカタログが壊れるケースがありました。
    最悪の場合、テーブルが完全に失われます。

  5. 共有データ無効化の間の誤った処理順序が修正され、TOAST OID がシステムカタログに確実に保持されるようになりました。(Tom Lane) (9.0)

    この誤りはシステムカタログに対する VACUUM FULL または CLUSTER の後に一時的に障害を引き起こします。

  6. 疑わしいHOT更新タプルのインデックス作成の障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)

    このバグにより、システムカタログの REINDEX の後、インデックス破損が生じる可能性がありました。ユーザインデックスに影響は無いものと考えられます。

  7. GiSTインデックスのページ分割処理におけるいくつかの障害が修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)

    おそらく発生する可能性は低いですが、インデックス破損を招きます。

  8. tsvector_concat関数でバッファオーバランの可能性があり、修正されました。(Tom Lane) (9.0)(8.4)(8.3)

    必要メモリ量を過小評価したために問題が生じており、サーバプロセスのクラッシュを招きます。

  9. XMLデータ型の処理関数 xml_recv が standaloneパラメータを処理するときにクラッシュする障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)
  10. ANALYZE と SJIS-2004 エンコーディング変換でバッファオーバランの可能性があり、修正されました。(Noah Misch) (9.0)(8.4)(8.3)

    可能性は極めて低いですが、サーバプロセスがクラッシュするおそれがありました。

  11. pg_stat_reset_shared関数の引数が NULL のとき、クラッシュしないように修正されました。(Magnus Hagander) (9.0)
  12. リカバリがサブトランザクションのデッドロック検出と衝突した場合に、失敗する可能性があり、修正されました。(Tom Lane) (9.0)
  13. ホットスタンバイ中の Btreeインデックスページの再利用における実体のない衝突を避けるようになりました。 (Noah Misch, Simon Riggs) (9.0)
  14. リカバリの末尾で動作を続けているWALレシーバプロセスを落とすようになりました。(Heikki Linnakangas) (9.0)

    これまで postmaster は、そのような状況でパニックになっていましたが、実際には正常な状態でした。

  15. 定義情報キャッシュ(relcache) の最初のファイル無効化処理で、競合状態が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    新しいバックエンドプロセスが無効化メッセージを見逃し、最新でないファイルを読む可能性がありました。
    結果、システムカタログへのアクセスで奇妙な失敗が生じます。典型的には「could not read block 0 in file ...」というエラーが、起動後に生じます。

  16. LISTEN が有効で、コマンド文字列で文字エンコーディング変換が行われる場合のメモリリークが修正されました。(Tom Lane) (9.0)
  17. HOLDカーソルと、PL/pgSQL の RETURN NEXT コマンドにおける、メモリ膨張(メモリリーク)を招く可能性のある誤ったメモリ計算が修正されました。(Tom Lane) (9.0)(8.4)
  18. トリガーに BEFORE と AFTER の両方が存在する場合の WHEN 条件について修正されました。(Tom Lane) (9.0)

    同じ更新で、BEFORE ROWトリガーが在って動作している場合に、AFTER ROW UPDATEトリガーのWHEN条件の評価でクラッシュする可能性がありました。

  19. 巨大で lossy なビットマップインデックスを構築するときの性能上の問題が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  20. ユニークカラムにおける JOIN 選択率の見積りが修正されました。(Tom Lane) (9.0)(8.4)

    これはJOIN結果の劣悪な見積りを招く誤ったプランナヒューリスティックを修正します。

  21. 副問い合わせのターゲットリストにだけあらわれる入れ子のプレースホルダ式について修正されました。(Tom Lane) (9.0)(8.4)

    外部結合の結果に NULL が不適切に出現する可能性がありました。
    以下は発現例。sub1 または sub2 だけ出力する SELECT文に分けて実行するとNULL は出現しないが、それらを外部結合すると NULL が現れてしまいます。

    =# SELECT * FROM (select 1 as key1) sub1
       LEFT JOIN
        (SELECT sub3.key3, sub4.value2 FROM (SELECT 1 as key3) sub3
         LEFT JOIN (SELECT sub5.key5, COALESCE(sub6.value1, 1) as value2
         FROM (SELECT 1 as key5) sub5 LEFT JOIN (SELECT 1 as key6, value1
         FROM (SELECT NULL::integer as value1) sub7 WHERE false) sub6
         ON false) sub4 ON sub4.key5 = sub3.key3) sub2
       ON sub1.key1 = sub2.key3;
    
     key1 | key3 | value2
    ------+------+--------
        1 |    1 |
    (1 row)
    

  22. プランナが空の親テーブルを本当に空であると仮定できるようになりました。(Tom Lane) (9.0)

    通常はプランニング上の理由により、空テーブルは最小だがある程度のサイズを持つものと仮定します。このヒューリスティックは、テーブル継承における親テーブル(たいていは空テーブル)に対しては弊害が大きいと考えられます。

  23. 入れ子の EXISTS 問い合わせを適切に最適化できるようになりました。 (Tom Lane) (9.0)(8.4)
  24. 配列処理の array_...関数と幾何データ処理の path_... 関数で、処理内部のパディングバイトが確実にゼロの並びになるように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    プランナが本来等価なデータを等しくないと判断する状況が生じ、最適化が劣悪なものになる可能性がありました。

  25. EXPLAIN が、inner indexscan 副プランの中の Result ノードとの値の引き渡しを正しく行うように修正されました。(Tom Lane) (9.0)(8.4)

    本問題で「ERROR: bogus varno: 65001」のようなエラーが発生します。

  26. Btreeインデックスの IS NULL 状態の事前処理について修正されました。(Dean Rasheed) (9.0)

    同じカラムで別タイプのインデックス可能な条件が組み合わされている場合に問題があります。
    該当するケースでは、問い合わせで結果が 0行であるべきところで出力が生じる現象を引き起こします。
    以下は再現例です。

    =# CREATE TABLE foo (a int);
    =# CREATE INDEX foo_a_idx ON foo (a);
    =# INSERT INTO foo VALUES (10), (NULL);
    =# SELECT 1 FROM foo WHERE a IS NULL AND a > 10000;
     ?column?
    ----------
            1
    (1 row)
    

  27. gcc 4.6.0 の障害でリカバリ(WAL replay)に失敗するのを回避するように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    クラッシュリカバリでコミット済みトランザクションが失われる可能性がありました。

  28. ビューにおける VALUES を正しくダンプできない問題が修正されました (Tom Lane) (9.0)(8.4)(8.3)(8.2)

    「CREATE VIEW test_view AS VALUES (1), (2), (3) ORDER BY 1」というビューをダンプすると、以下のようになってしまいます。

    CREATE VIEW test_view AS
        VALUES (1), (2), (3) ORDER BY "*VALUES*".column1;
    

  29. シーケンスに対して SELECT FOR UPDATE/SHARE が禁止されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    この操作はもともと機能しないと考えられ、問題を引き起こします。

  30. pg_class.reltuples/relpages を常に更新するように VACUUM が修正されました。(Tom Lane) (9.0)(8.4)

    これまでビジビリティマップにより処理を省略している場合、reltuples、relpages は更新されませんでした。結果として、自動VACUUM による、テーブル毎のVACUUM実施判断が劣悪になることがありました。

  31. ハッシュテーブルのサイズを計算する際に整数オーバーフローを防ぐようになりました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  32. CLUSTERコマンドが削除済みTOASTデータにアクセスを試みていたものが修正されました。(Tom Lane) (9.0)(8.4)(8.3)
  33. 初期認証処理の早すぎるタイムアウトが修正されました。 (Tom Lane) (9.0)
  34. ピア認証むけ証明書管理メッセージの移植性に関する障害が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  35. 複数往復のやり取りが必要な場合について SSPI認証処理が修正されました。(Ahmed Shinwari, Magnus Hagander) (9.0)(8.4)(8.3)

    典型的な症状としては "The function requested is not supported" というエラーが出ます。

  36. カスタム変数クラスを postgresql.conf に追加する際の障害が修正されました。(Tom Lane) (9.0)

    「SELECT pg_reload_conf();」でサーバプロセスがクラッシュするケースが報告されています。

  37. pg_hba.conf に hostssl が含まれているけれど SSL が無効であるときエラーになる振る舞いが修正されました。(Tom Lane) (9.0)(8.4)

    従来の hostssl の行は無視されるという振る舞いの方がよりユーザフレンドリであるという結論になりました。

  38. DROP OWNED BY でシーケンスのデフォルト権限を除くときの障害が修正されました。(Shigeru Hanada) (9.0)
  39. 移植用の内部関数srand48 でシード初期化の誤りが修正されました。(Andres Freund) (9.0)(8.4)(8.3)(8.2)

    これは与えられたシードを正しく適用できませんでした。ランダム性が推測に対して弱くなるため、潜在的なセキュリティ問題をはらんでいます。OS が同名関数を提供するため PostgreSQL の srand48 関数は多くのプラットフォームでは使用されません。

  40. LIMIT と OFFSET の合計値が 2 の 63乗を超えているとき 整数オーバーフローを回避するようになりました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)
  41. int4 型版と int8 型版の generate_series関数でオーバーフロー検査が追加されました。(Robert Haas) (9.0)(8.4)(8.3)(8.2)
  42. to_char関数で後続のゼロを除く振る舞いが修正されました。(Marti Raudsepp) (9.0)(8.4)(8.3)(8.2)

    'FM' (fill mode 充填モード) と小数点の後の数字位置指定なしの整形で、小数点の左側のゼロが誤って除去されていました。
    以下は再現例です。本来は「10」が出力されなければいけません。

    =# SELECT to_char(10, 'FM99.');
     to_char
    ---------
     1
    

  43. pg_size_pretty関数が 2 の 63乗に近い値で入力のオーバーフローを起こすのを回避するように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  44. PL/pgSQL のレコード値における型修飾子一致の検査をより緩やかにしました。(Tom Lane) (9.0)(8.4)

    過剰なチェックは保持すべき長さ修飾の破棄を引き起こしていました。

  45. initdb でロケール名に含まれるクオートを正しく扱えるようになりました。(Heikki Linnakangas) (9.0)(8.4)

    Windows ロケールの一部(People's Republic of China など)で問題が起きていました。

  46. contrib/pg_upgrade で孤児になった(=自動削除されずに残った)一時テーブルのダンプを避けるように修正されました。(Bruce Momjian) (9.0)

    システム用に予約された接頭辞 'pg_' で始まるスキーマは対象から外すようになりました。 テーブル OID が移行後に不一致となることを防ぎます。

  47. contrib/pg_upgrade が 8.3 からのアップグレードで、TOASTテーブルの relfrozenxids を保つように修正されました。(Bruce Momjian) (9.0)(8.4)

    アップグレード後に pg_clog/ 下のファイルの早すぎる削除を引き起こす可能性がありました。

  48. contrib/pg_upgrade で、-l (ログ) オプションが Windows でも動作するように修正されました。(Bruce Momjian) (9.0)
  49. pg_ctl で Windows のサービス登録する場合にも silent mode (-s) に対応するようになりました。(MauMau) (9.0)(8.4)(8.3)
  50. psql で別ファイルから COPY を行うときにもスクリプトファイルの行番号をカウントしてしまうものが修正されました。 (Tom Lane) (9.0)(8.4)(8.3)(8.2)
  51. データベース名を指定するモードでの standard_conforming_string について pg_restore が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    standard_conforming_string = on で作られたアーカイブファイルを直接データベースにリストアするとき、pg_restore は不正なコマンドを発行する可能性がありました。

  52. pg_restore でパラレルリストアがサポートされないケースについて、より親切になりました。(Tom Lane) (9.0)(8.4)

    サポートされないケースかをリストア動作を行う前に確認して報告するようになります。

  53. libpq の LDAPサービスを検索するコードで、メモリリークとバッファオーバーランが修正されました。(Albe Laurenz) (9.0)(8.4)(8.3)(8.2)
  54. libpq でノンブロッキング I/O と SSL接続を使っているときのエラーを回避するようになりました。(Martin Pihlak, Tom Lane) (9.0)(8.4)(8.3)(8.2)
  55. libpq の接続開始時のエラー取扱いが改善されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    特に SSL接続開始時に fork に失敗したときのエラー報告が、適切ではありませんでした。

  56. SSL接続の失敗に対する libpq のエラー出力が改善されました。(Tom Lane) (9.0)(8.4)(8.3)
  57. クライアント C ライブラリ libpq の PQsetvalue関数が、新たな行を、サーバ問い合わせで取得した PGresult に加えるとき、クラッシュするのが修正されました。(Andrew Chernow) (9.0)(8.4)
  58. ecpglib は 15桁精度の double 値を書くようになりました。(Akira Kurosawa) (9.0)(8.4)(8.3)(8.2)
  59. ecpglib で、LC_NUMERIC がエラー後に確実にもとに戻るようになりました。(Michael Meskes) (9.0)(8.4)(8.3)
  60. contrib/pgcrypto で blowfish の 8ビット文字処理の障害(CVE-2011-2483)に修正が適用されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)

    char が符号付きであるプラットフォームで不適切なコードでした。これにより暗号化されたパスワードが本来よりも脆弱になります。

  61. contrib/seg でメモリリークが修正されました。(Heikki Linnakangas) (9.0)(8.4)(8.3)(8.2)
  62. pgstatindex関数が空のインデックスに対して一貫した結果を返すように修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  63. PL/Perl が perl 5.14 でビルドできるようになりました。(Alex Hunsaker) (9.0)(8.4)(8.3)(8.2)
  64. 空白文字を含むファイルパスへのビルド、インストールの種々の問題が修正されました。(Tom Lane) (9.0)(8.4)(8.3)(8.2)
  65. タイムゾーンデータファイルが tzdata リリース 2011i に更新されました。 (9.0)(8.4)(8.3)(8.2)

    カナダ、エジプト、ロシア、サモア、南スーダンの夏時間法の変更が適用されています。

  66. スタートアッププロセスが bgwriterプロセスとの相互作用で断続的なハングアップを起こすのを防ぐようになりました。(Simon Riggs) (8.4)

    ホットスタンバイでないリカバリの場合に稀に発生していました。

  67. configureスクリプトのシステム機能調査の方式が新しくなりました。(Tom Lane) (8.4)(8.3)(8.2)

    8.3 と 8.2 で使用している autoconfバージョン はコンパイラのリンク時の最適化にだまされることがありました。

  68. ANALYZE でバッファオーバーランが防止されました。 (Noah Misch) (8.2)

    サーバプロセスがクラッシュする僅かな可能性がありました。