PostgreSQL 8.1.20 に関する技術情報

このリリースは 8.1.19 からの修正リリース(2010/03/15リリース)です。
8.1.x からのアップデートではダンプ、リストアは不要です。

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

PostgreSQL 8.1.19 から 8.1.20 への変更点

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

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


  1. 設定パラメータ ssl_renegotiation_limit が追加されました。セッションキーをどれくらいの頻度で再調整するかを指定します。(Magnus) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    0 に設定すると再調整は行われません。これは壊れたsslライブラリを使っているときに必要となります。特に一部のベンダーは、セキュリティ脆弱性 CVE-2009-3555 むけの当座のパッチをリリースしており、
    これが再調整の失敗を引き起こします。

  2. バックエンドプロセスの起動中にデッドロックする可能性があり、修正されました。(Tom) (8.4)(8.3)(8.2)
  3. システムテーブルのキャッシュ (relcache) を再ロードする間、エラーを取り扱わないために、クラッシュする可能性があり、修正されました。(Tom) (8.4)(8.3)(8.2)
  4. 実行計画キャッシュのダングリングポインタを参照してバックエンドがクラッシュする可能性があり、修正されました。(Tatsuo) (8.4)(8.3)

    pgpool-II でアクセスする際に特定ケースで PostgreSQLバックエンドがクラッシュする問題が発生していました。

  5. ROLLBACK 時に実行計画キャッシュの無効化をやりすぎてクラッシュする問題が修正されました。(Tom) (8.4)
  6. サブトランザクション開始に失敗してリカバーしようとするときに、クラッシュする可能性があり、修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)
  7. SAVEPOINT を使用し、クライアントエンコーディングがサーバエンコーディングと異なる場合の、メモリリークが修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)
  8. リカバリの最後の GiST インデックスのページ分割の整理で、不正な WAL データが発行される問題が修正されます。(Yoichi Hirai) (8.4)(8.3)(8.2)

    これにより、不完全な GIST 挿入後のリカバリで、インデックスが壊れる、もしくは、WAL 読み込みでエラーとなることがありました。

  9. GIN インデックスに対する WAL 適用(リカバリ)の処理で障害が修正されました。(Heikki) (8.4)
  10. GIN インデックス検索での不正な検索キー比較が修正されました。(Teodor) (8.4)
  11. bit 文字列むけの substring() 関数が、負の長さ指定を「全ての残余ビット列」という意味で扱えるようになりました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    ビット文字列とは bit型 と bit varying型です。以前は -1 だけが上記の意味で処理されていました。その他の負数を指定すると不正な結果を返し、クラッシュにつながるおそれがありました。CVE-2010-0442 としてこの問題が登録されています。

  12. 整数から bit 文字列への変換において、bit 文字列のビット幅が 8 の倍数でない場合に誤動作することがあり、修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)

    => select ((11::int4 >> 23) | 11::int4)::bit(32); -- 正常動作
    00000101100000000000000000001011
    
    => select ((11::int4 >> 23) | 11::int4)::bit(33); -- 誤動作
    000001011100000000000000000001011
  13. 正規表現の照合が異常に遅い場合があり、修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  14. 複合型を複数行返す SQL 関数でエラーが出る障害があり、修正されました。SQL 関数を内部でインライン処理できるようにしたことにより導入された障害です。(Tom) (8.4)
  15. 複合型配列のカラムの 1 要素を UPDATE するときの障害が修正されました。(Tom) (8.4)(8.3)
  16. EXPLAIN でフィールド格納または配列参照での値を割り当てる式を出力するときに失敗するのが回避されました。(Tom) (8.4)

    これらのケースは EXPLAIN VERBOSE でプランノードのターゲットリストを表示しようとしたときに起きます。

  17. UNION、INTERSECT、EXCEPT の副問い合わせで、リテラル文字列が現れたとき不必要なエラーの強制を避けるようになりました。(Tom) (8.4)
  18. 行型の値が欠落したカラムを含む場合において、行型の互換性チェックの不適切な失敗が回避されました。(Tom) (8.4)
  19. バックアップヒストリファイルにおける項目「STOP WAL LOCATION」が、終了位置がセグメント境界であった場合、次の WALセグメント名を報告するように修正されました。(Itagaki Takahiro) (8.4)(8.3)(8.2)(8.1)(8.0)
  20. CREATE FOREIGN DATA WRAPPER 文で指定されるオプション検証関数にカタログ ID を常に渡すようになりました。(Martin Pihlak) (8.4)
  21. いくつかの場合における一時ファイルのリーク(削除漏れ)が修正されました。(Heikki) (8.4)(8.3)(8.2)(8.1)

    以前のマイナーリリースで導入されてしまった問題を修正するものです。ケースの一つとしては、複数行を返す plpgsql 関数が、他の関数の例外ハンドラから呼ばれたとき、というのがあります。

  22. FULL JOIN ON FALSE がサポートされました。(Tom) (8.4)

    単純化できる一部のクエリで定数 FALSE の結合条件について、8.4 以前から退行してしまうのを防ぎます。8.3.x では問題なく使えていましたが、〜 8.4.2 では「ERROR:FULL JOIN is only supported with merge-joinable join condition」が出ました。

  23. boolean 型の値について制約排除(constraint exclusion)の処理が改善されました。特に bool_col = false という制約でパーティションを行うとき効果があります。(Tom) (8.4)(8.3)(8.2)
  24. INOUT キャストを、表現のバイナリ互換性のように処理するのを防ぐようになりました。(Heikki) (8.4)
  25. カラムに対しての GRANT, REVOKE ができないときの警告メッセージに、そのカラムの名前を含めるようになりました。(Stephen Frost) (8.4)

    REVOKE して複数のメッセージが出力されたときに、同じ文を表示しているようでまぎらわしかったのが、この変更によって改善されます。

  26. pg_hba.conf および関連ファイルを読み込む際に「@」がクオート(")の内側にある場合には、ファイル読み込みの記号と見なさないようになります。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    これはロールやデータベース名が「@」で始まる場合に誤った振る舞いをするのを防ぎます。スペースを含むファイル名を指定するときに「"@/path to/file"」とは書けなくなるため、「@"/path to/file"」のように記述してください。

  27. 一部のプラットフォームで無限ループが発生するのを防ぐように修正されました。pg_hba.conf などのファイルで、ファイル読み込みの対象にディレクトリが指定された場合に発生します。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  28. SSL 処理で失敗した際に無限ループに陥るケースが修正されました。これは Windows 版 openssl の一部バージョンで報告されました。(Tom) (8.4)(8.3)(8.2)
  29. 正しく機能してホスト名を要求するなら、ローカル接続での GSSAPI 認証を許可しないようになりました。GSSAPI ライブラリが壊れていなければ、ホスト名指定が必須となります。(Magnus) (8.4)(8.3)
  30. アプリケーションが文字列のメモリ解放を行ったときに ecpg で問題がおきないようになりました。(Michael) (8.4)
  31. NLS を有効にしているときの psql の ¥d で出力される内容の翻訳が修正されました。(Heikki) (8.4)
  32. psql の数値ロケールのオプション(numericlocale)を修正し、latex または troff 出力形式のときには、ロケールに基づく整形をしないようになりました。(Heikki) (8.4)(8.3)(8.2)(8.1)
  33. psql のクエリ単位の小さなメモリリークが修正されました。(Tom) (8.4)
  34. psql が、N_ERROR_STOP 変数が設定されていて、かつ、--single-transaction が指定されているとき COMMIT でエラーが起きた場合、正しい終了コード(3)を返すようになりました。(Bruce) (8.4)(8.3)(8.2)
  35. pg_dump の外部サーバに対するパーミッションの出力が修正されました。(Heikki) (8.4)
  36. 並列の pg_restore で、範囲外 dump ID への依存性により(pg_restore が)クラッシュする可能性があり、修正されました。(Tom) (8.4)

    8.0 以前の古いバージョンのダンプファイルを並列リストアするケースで、クラッシュが報告されています。

  37. plpgsql で複合カラムに NULL を設定するときの障害が修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)
  38. PL/Perl の関数を PL/PerlU から呼び出したとき(あるいはその逆)の障害が修正されました。(Tim Bunce) (8.4)(8.3)(8.2)
  39. PL/Python でコンパイラ固有の誤動作の可能性を避けるように修正されました。(ソースコードで変数に volatile 指定を加えた)(Zdenek Kotala) (8.4)(8.3)(8.2)(8.1)(8.0)
  40. PL/Tcl が確実に Tclインタプリタを完全に初期化するようになりました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    修正前の症状としては Tcl 8.5 以降で、clock コマンドが誤動作することが知られています。

  41. ExecutorEnd 関数が、失敗したトランザクションまたはサブトランザクションで生成されたポータルから実行されるのを、防ぐようになりました。(Tom) (8.4)
  42. contrib/dblink で大量のキーカラムが dblink_build_sql_* 関数に指定されたときクラッシュするのを防ぐようになりました。(Rushabh Lathia, Joe Conway) (8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  43. contrib/ltree の操作においてゼロ次元配列を認めるようになりました。(Tom) (8.4)(8.3)

    これまではエラーとなりましたが、要素が空の配列と同様に便利です。特に ARRAY(SELECT ...) の結果に ltree 操作を行う場合で、サブクエリから 0 行が返るとき、不要なエラーを回避できます。

  44. contrib/xml2 のメモリ管理の不備による種種のクラッシュが修正されました。(Tom) (8.4)(8.3)(8.2)(8.1)(8.0)
  45. Windows における contrib/xml のビルドがより頑強になりました。(Andrew) (8.4)(8.3)(8.2)
  46. Windows のシグナル処理における競合状態が修正されました。(Radu Ilie) (8.4)(8.3)(8.2)

    pg_listener の行が負荷が重いときに落ちてしまうという症状が知られています。

  47. configure スクリプトが、C コンパイラが 64bit 整数データ型をサポートしていないことを報告するようになりました。(Tom) (8.4)
  48. タイムゾーンデータが tzdata release 2010e に更新されました。バングラディシュ、チリ、フィジー、メキシコ、パラグアイ、サモアの夏時間が変更されています。(8.4)(8.3)(8.2)(8.1)(8.0)