PostgreSQL 8.0.23 に関する技術情報

このリリースは 8.0.22 からの修正リリース(2009/12/14リリース)です。
8.0.x からのアップデートではダンプ、リストアは不要です。

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

PostgreSQL 8.0.22 から 8.0.23 への変更点

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

※ 各項目のカッコ内は担当した開発者名と該当するメジャーバージョン系列です。


  1. インデックス関数がセッションローカル状態を変更することによる、間接的なセキュリティ脅威から保護されるようになりました。(Gurjeet Singh, Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    この修正により、不変とされているインデックス関数によって、スーパーユーザのセッションが奪われる可能性がなくなります。

  2. null バイトが埋め込まれたコモンネーム (CN) フィールドを含む SSL 証明書を、拒否するようになりました。(Magnus) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    この変更により、SSL 検証において、意図しないサーバ名、またはクライアント名の証明書との照合を防ぎます。(CVE-2009-4034)

  3. ハッシュインデックスの破損を修正しました。(Tom) (8.4)

    ハッシュインデックスは、各エントリをハッシュ値でソートして保持します。8.4 での変更で、バケット分割と圧縮ルーチンで順番を保つ処理に、間違いがありました。そのため、これらの操作が適用されると、インデックスの恒久的な破損につながり、存在するはずのエントリが検索しても見つからないことになります。

    これに対処するため、本アップデートのインストール後、すべてのハッシュインデックスに対して REINDEX の実行が推奨されます。

  4. バックエンド起動時のキャッシュ初期化で、クラッシュする可能性が修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  5. 空のシソーラス辞書によってクラッシュするのを避けるようになりました。(Tom) (8.4)(8.3)
  6. 危険なタイミングで VACUUM が中断されないように、シグナルを防ぐようになりました。(Alvaro) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    この修正により、タプルの移動が完了した後に VACUUM FULL がキャンセルされた場合に発生する PANIC や、テーブルが切り詰められた(truncate)後に通常の VACUUM がキャンセルされた時のエラーを防ぎます。

    VACUUM FULL の場合に以下のような PANIC が発生する可能性があります。

    PANIC: cannot abort transaction NNNN, it was already committed

    また、通常 VACUUM の場合に競合した INSERTUPDATE に対して以下のような ERROR が発生する可能性があります。

    ERROR: could not read block XX of relation 1663/NNN/MMMM: read only 0 of 8192 bytes

  7. ハッシュテーブルサイズの計算で、整数オーバーフローによるクラッシュの可能性が修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    プランナが予測したハッシュジョインの結果サイズがとても大きな場合に、この問題が発生する可能性がありました。

  8. 内部的に依存したオブジェクトに対して DROP を試みるとクラッシュするのが修正されました。(Tom) (8.4)
  9. まれに inet/cidr の比較でクラッシュするのが修正されました。(Chris Mikkelson) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  10. プリペアードトランザクション(PREPARE TRANSACTION)が行なう、タプルレベル共有ロックが無視されないようになりました。(Heikki) (8.4)(8.3)(8.2)(8.1)
  11. サブトランザクション内のカーソルが使用している一時ファイルが、早まって削除されないようになりました。(Heikki) (8.4)(8.3)(8.2)(8.1)(8.0)
  12. syslogger プロセスが新しい CSV ログファイルにローテートする時のメモリリークが修正されました。(Tom) (8.4)(8.3)
  13. postmaster が pg_hba.conf を再解析するときのメモリーリークが修正されました。(Tom) (8.4)
  14. Windows の権限降格ロジックが修正されました。(Jesse Morris) (8.4)(8.3)

    これは、Windows でデータベースが「could not locate matching postgres executable」 という誤解を招くエラーメッセージを伴って起動に失敗するケースを修正するものです。

  15. 主問い合わせの FOR UPDATE/SHARE が、副問い合わせに伝搬しないようになりました。(Tom) (8.4)

    たとえば以下の場合、

    WITH w AS (SELECT * FROM foo) SELECT * FROM w, bar ... FOR UPDATE

    FOR UPDATE は "bar" には影響しますが、"foo" には影響を与えません。これまでの 8.4 では、FOR UPDATEWITH 句に伝搬しようとしていましたが、実装上の制約により常に失敗していました。

    この修正は、以前の振るまいよりも有用で一貫性があります。また WITH 句は、主問い合わせとは独立して実行されるデザインルールにもあいます。

  16. WITH RECURSIVE のついた問い合わせが、別の WITH RECURSIVE の中にある場合のバグが、修正されました。(Tom) (8.4)
  17. ハッシュインデックスの並列処理バグが修正されました。(Tom) (8.4)

    同時に挿入が行なわれると、インデックススキャンで一時的に間違った値を報告することがありました。

  18. GiST インデックスページを分割するロジックで、分割がインデックスの最初ではないカラムに依存する時の間違いが、修正されました。(Paul Ramsey) (8.4)(8.3)(8.2)
  19. fastupdate が有効になったマルチカラム GIN インデックスで、間違った検索結果になるのが修正されました。(Teodor) (8.4)
  20. GIN インデックス用の WAL エントリ作成でのバグが修正されました。(Tom) (8.4)

    このバグは full_page_writes が on の時は隠れています。しかし off の場合、次の checkpoint 前にクラッシュが発生すると、WAL の再実行が失敗する形になって現れます。

  21. チェックポイント処理の最後で、古い WAL セグメントの再利用または削除に失敗しても、エラー出力を行なわなくなりました。(Heikki) (8.4)(8.3)(8.2)

    この問題は非致命的な扱いにして、チェックポイントを完了させた方が良いと考えられます。以降のチェックポイント処理で、削除を再実行します。

    なお、この問題は、通常の操作では発生することはないはずです。しかし、一部の Windows アンチウィルスソフトやバックアップソフトウエアによって発生することが知られています。

  22. Windows で WAL ファイルが繰返しアーカイブされないようになりました。(Heikki) (8.4)(8.3)(8.2)

    不要ファイルの削除が、他のプロセスによって妨害されることで発生します。これは、上記のものとは別の症状です。

  23. PAM パスワードの処理がより堅牢になりました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    以前のコードは、Linux の pam_krb5 PAMモジュールに Microsoft Active Directory をドメインコントローラとして組み合わせた場合に、失敗することが知られていました。

    PAM スタックがどんな引数を渡すかについて不当な仮定をしていたので、他にも問題があった可能性があります。

  24. GSSAPI と SSPI 認証方式において、認証トークン(Kerberos ticket)サイズの最大値が増えました。(Ian Turner) (8.4)(8.3)

    以前の 2000バイト制限は Unix Kerberos 実装では十分でしたが、Windows ドメインコントローラが発行するチケットは、より大きくなります。

  25. ARRAY[...]::domain など、配列型に適用する場合に、ドメイン制約が確実に働くように修正されました。(Heikki) (8.4)

    これは、8.3 までは適切に動作していました。

  26. 複合型カラムを外部キーに含むケースのため、外部キーのロジックが修正されました。(Tom) (8.4)
  27. カーソルのスナップショットが作成された後、そのカーソルが生きている間変更されないようになりました。(Alvaro) (8.4)

    同じトランザクション内の後の操作により、カーソルが返すと想定されていたデータが変更された場合に、間違った結果を返していました。

  28. CREATE TABLE」で別々の親テーブルから継承したカラムのデフォルト式について、適切にマージするように修正されました。(Tom) (8.4)

    これまでは動作していましたが、8.4 で壊れていました。

  29. シーケンスのアクセス統計の収集を再び有効にしました。(Akira Kurosawa) (8.4)(8.3)

    これまでは動作していましたが、8.3 で壊れていました。

  30. ロールとの依存関係を保持するシステムカタログ pg_shdepend に、誤った内容を記録する可能性がありました。
  31. WHERE x=x」条件の不正な処理が修正されました。(Tom) (8.4)(8.3)

    一部の場合に、冗長な記述として無視されていました。本来は「x IS NOT NULL」と同じ意味の条件となります。

  32. 不安定な式に対する DISTINCT をハッシュ集約で実現する場合の、不正なプラン構築が修正されました。(Tom) (8.4)

    SELECT DISTINCT random(),random() FROM generate_series(1, 10);」などでハッシュ集約によるプランで、二つの random() が必ず同じ値になってしまっていました。

  33. SELECT DISTINCT ON でアサートフェイルが出る問題が修正されました。(Tom) (8.4)

    該当する場合

    TRAP: FailedAssertion("!(pathkeys_contained_in(root->distinct_pathkeys,
    current_pathkeys))", File: "planner.c", Line: 1527)

    というメッセージが出力されて、バックエンドプロセスがクラッシュします。

  34. テキスト検索の関数 ts_start() が tsvector が空値でも失敗にならないように修正されました。(Tom) (8.4)
  35. テキストサーチのパーサは、アンダースコアが含まれる XML 属性を受け付けるようになりました。(Peter) (8.4)(8.3)
  36. XML バイナリ入力で、エンコーディングの扱いを修正しました。(Heikki) (8.4)(8.3)

    XML ヘッダでエンコーディングが指定されていない場合、デフォルトで UTF-8 と見なすようになります。以前の扱いでは不定でした。

  37. plperl と plperlu 間の相互の呼び出しでのバグを修正しました。(Tom) (8.4)(8.3)(8.2)

    内側の関数がエラー終了した時に、外側の関数のための正しい perl インタープリタを再選択することに失敗し、クラッシュしていました。

  38. PL/perl 関数が再定義された時の、セッション期間内のメモリリークが修正されました。(Tom) (8.4)(8.3)(8.2)
  39. PL/Python の例外処理で、まれにクラッシュすることがある問題が修正されました。(Peter) (8.4)(8.3)(8.2)(8.1)(8.0)
  40. ecpg でコメント付きの DECLARE CURSOR 文での問題を修正しました。(Michael) (8.4)
  41. ecpg が最近追加されたキーワードを予約語として扱わないように修正されました。(Tom) (8.4)

    以下のキーワードに影響します。

    CALLED CATALOG
    DEFINER ENUM FOLLOWING
    INVOKER OPTIONS PARTITION
    PRECEDING RANGE SECURITY
    SERVER UNBOUNDED WRAPPER
  42. psql の ¥df 関数名パラメータで正規表現の特殊文字を許可するようになりました。(Tom) (8.4)

    ¥df コマンドで「¥df (public|my_schema).*」などのパターンマッチが動作しませんでした。

  43. contrib/pg_standby で、Windows において、シグナルによるフェイルオーバーを無効にしました。(Fujii Masao) (8.4)(8.3)

    Windows では UNIX 形式のシグナル処理を行なわないため、シグナルによるフェイルオーバー機能はもともと有用ではありませんでした。これは pg_standby がクラッシュする原因となっていました。

  44. contrib/vacuumdb が、VACUUM コマンドに FREEZEVERBOSE オプションを正しい順序で与えるように修正されました。(Heikki) (8.4)
  45. contrib/dblink でエラーが発生した時に、コネクションリークの可能性があったものが修正されました。(Tatsuhito Kasahara) (8.4)
  46. psql の flex モジュールが正しいシステムヘッダ定義でコンパイルされるようになりました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)

    一部のプラットフォームでビルドに失敗していたものが修正されます。この問題は AIX5.3(64bit) で発見されました。

  47. 将来の libpq バージョンとの互換性向上のため、postmaster はコネクションリクエストパケットの application_name パラメータを無視するようになりました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  48. タイムゾーンの省略名が、現在の状況に一致するように更新されました。IDT (Israel Daylight Time) が、デフォルトの省略名セットに加えられました。(Joachim Wieland) (8.4)(8.3)(8.2)
  49. tzdata の 2009 年リリースに合わせてタイムゾーンデータファイルが更新されました。南極、アルゼンチン、バングラデシュ、フィジー、ノヴォクズネツク、パキスタン、パレスチナ、サモア、シリアの夏時間法の変更、香港の訂正、に対応しています。(8.4)(8.3)(8.2)(8.1)(8.0)