PostgreSQL 8.4.17 に関する技術情報

このリリースは 8.4.16 からの修正リリース(2013/4/4リリース)です。
8.4.x からのアップデートではダンプ、リストアは不要です。

本リリースでは GiST インデックス管理のエラーがいくつか修正されています。
本アップデートのインストール後は、後述する条件に合致する GiST インデックスの REINDEX が推奨されます。

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

PostgreSQL 8.4.16 から 8.4.17 への変更点

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


  1. サーバコマンドラインスイッチの安全でない解析が修正されました。
    (Mitsumasa Kondo, Kyotaro Horiguchi) (9.2)(9.1)(9.0)

    接続リクエストに含まれるデータベース名が "-" で始まっている場合、サーバのデータディレクトリ内のファイルを損傷や破壊するために加工されている可能性があり、要求されても却下するようになります。(CVE-2013-1899)

  2. 各 postmaster の子プロセスで、OpenSSL の乱数状態をリセットするようになりました。
    (Marko Kreen) (9.2)(9.1)(9.0)(8.4)

    これにより contrib/pgcrypto 機能が生成する乱数列が、別のデータベースユーザから簡単に推測されることを防ぎます。
    この脆弱性は postgresql.conf で ssl = on として設定されているが、多くの接続は SSL 暗号化を使用していない場合に重要です。(CVE-2013-1900)

  3. REPLICATION 権限のチェックを現在のユーザに対して行なうようになりました。
    (Noah Misch) (9.2)(9.1)

    これまで誤って、接続時に認証された当初のユーザで権限のチェックを行なっていました。
    権限のないデータベースユーザが、この間違いを利用して pg_start_backup() や pg_stop_backup() を呼び出すことで、定期バックアップの作成を妨害することが可能でした。(CVE-2013-1901)

  4. GiSTインデックスは、適切でない場合には、曖昧な幾何学的比較を行なわないように修正されました。
    (Alexander Korotkov) (9.2)(9.1)(9.0)(8.4)

    コアの幾何学型は、曖昧な比較を行ないます。
    しかし gist_box_same は厳密な比較を行なうべきで、さもなければこれを使った GiSTインデックスは不整合になります。
    このアップグレードをインストールした後、利用者は gist_box_same を利用している box, polygon, circle, point カラム、に対するすべての GiSTインデックスを REINDEX する必要があります。

  5. text, bytea, bit, numeric などの可変長データ型カラムに対する contrib/btree_gist の使用で、GiSTインデックスの range-union とペナルティロジックに関する誤りが修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    この誤りで、インデックスの不整合で存在するキーが見つからなかったり、不要なインデックスでの肥大化になります。
    利用者はこのアップデートをインストールした後、これらのインデックスを REINDEX することが推奨されます。

  6. マルチカラムインデックスに対する GiST のページ分割コードのバグを修正しました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    このエラーはインデックスの不整合を起こし、存在するはずのキーが検索で見つからなかったり、不必要に非効率なインデックス検索になります。
    利用者はこのアップデートのインストール後、マルチカラム GiST インデックスを REINDEX することが推奨されます。

  7. gist_point_consistent が一貫した曖昧さを扱うように修正されました。
    (Alexander Korotkov) (9.2)(9.1)(9.0)

    point カラムの GiSTインデックスへの、インデックススキャンは、時々シーケンシャルスキャンと異なる結果を返します。
    これは gist_point_consistent と、基礎のオペレータが正確にあるいは曖昧に比較を行なうかで一致していなかったためです。

  8. WAL再生中のバッファリークが修正されました。
    (Heikki Linnakangas) (9.2)(9.1)(9.0)

    このバグにより、バッファの参照カウンタを間違え、再生中にエラーを起こし、リカバリを不可能にします。

  9. データベースが正常に停止しておらず、recovery.conf が存在する場合、アーカイブリカバリを実行する前に、クラッシュリカバリが行なわれるようにします。

    (Heikki Linnakangas, Kyotaro Horiguchi, Mitsumasa Kondo) (9.2)

    稼働中サーバのファイルシステムスナップショットから、スタンバイサーバを初期化するような状況で、データベースの整合性を保証するために必要です。

  10. クラッシュリカバリ中に、まだアーカイブされていない WALファイルが削除されないようにします。
    (Heikki Linnakangas, Fujii Masao) (9.2)
  11. DELETE RETURNING の競合が修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)

    適切な状況では DELETE RETURNING は現プロセスがもはや pin を持っていない共有バッファからデータを取得することができます。
    その間に他のプロセスがこのバッファを変更すると、ゴミが返されるか、あるいはクラッシュすることになります。

  12. 正規表現のコンパイルで無限ループになる危険性が修正されました。
    (Tom Lane, Don Porter) (9.2)(9.1)(9.0)(8.4)
  13. 正規表現のコンパイルで NULL ポインタ参照になる可能性が修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  14. 適切な箇所で to_char() が ASCII のみで大文字小文字変換のルールを使うように修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    これにより、いくつかの locale に依存しないテンプレートパターンでの間違った振舞が修正されます。トルコ語ロケールでの I と i の扱いで問題が報告されました。
    例: to_char(timestamp, 'DAY')

  15. タイムスタンプ 1999年12月31日 24:00:00 の意図しない拒絶が修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  16. SQL言語関数で安全に使えるように、範囲型用のサポート関数が修正されました。
    (Tom Lane) (9.2)
  17. 単一トランザクション内で、UNLISTEN して LISTEN を行なう時のロジックエラーが修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)

    セッションが壊れて、listen するべき通知イベントが listen できなくなっていました。

  18. 他のビューに依存されたビューにカラムが追加された場合に、プランナがクラッシュする可能性が修正されました。
    (Tom Lane) (9.2)(9.1)
  19. EXPLAIN(ANALYZE, TIMING OFF) の性能問題が修正されました。
    (Pavel Stehule) (9.2)
  20. 「LOG: picksplit method for column ... of index "..." doesn't support secondary split」という無用なメッセージが廃止されました。

    (Josh Hansen, Tom Lane) (9.2)(9.1)(9.0)(8.4)

    未だ実装されておらず、また、現在の GiST での第二分割のデフォルト処理が良好であり、おそらく今後も実装しないであろう例外処理のために、本メッセージが加わっていました。

  21. gist_box_picksplit() の第二分割サポートの残骸は削除されました。
    (Tom Lane) (9.2)

    この第二分割の実装は、デフォルトの実装よりも悪い物でした。
    この処理は削除され、デフォルトのコードパスで取り扱うようにしました。

  22. セッションの最後の数トランザクションの commit/abort 数を、統計情報コレクタに送るのに失敗する可能性が修正されました。

    (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  23. PL/Perl の spi_prepare() 関数使用におけるメモリリークが除去されました。
    (Alex Hunsaker, Tom Lane) (9.2)(9.1)(9.0)(8.4)

    セッションレベルのメモリリークとなります(切断、再接続で解消される)。

  24. pg_dumpall が「=」を含むデータベース名を正しく扱えるように修正されました。
    (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)

    これまでは「=」を含む名前のデータベースがあると pg_dumpall がエラーになっていました。

  25. pg_dump が不正な接続文字列を与えられてクラッシュしないように修正されました。
    (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)

    エラー処理を出して終了すべきところで、pg_dump がクラッシュするケースがありました。

  26. pg_dump や pg_upgrade で無効なインデックスを無視するようになりました。
    (Michael Paquier, Bruce Momjian) (9.2)(9.1)(9.0)

    システムテーブル pg_index の indisvalid カラム値で無効であるか判断されます。
    これによりリストア時にデータがインデックスによるユニーク制約を満たさないことで失敗する等の問題を回避します。これまでは作成途中のインデックスでもダンプに含まれていました。

  27. pg_basebackup がテーブルスペースディレクトリ下の対象バージョンのサブディレクトリのみをバックアップ取得するようになりました。

    (Heikki Linnakangas) (9.2)(9.1)

    これまでは他のバージョンのディレクトリも全てバックアップされていました。
    9.0 以降ではテーブルスペースを作成すると、指定したディレクトリの下にバージョン番号の付いたサブディレクトリが作られるため、複数の PostgreSQLバージョンで同じディレクトリをテーブルスペースとして指定する使い方がありえました。

  28. pg_basebackup と pg_receivexlog がサーババージョンをチェックするようになりました。
    (Heikki Linnakangas) (9.2)(9.1)

    9.1 バージョンよりも古いサーバ、コマンド自体よりも新しいバージョンに対しては「unsupported server version」というエラーが出ます。

  29. contrib/dblink が一貫性のない DateStyle 設定、IntervalStyle 設定を安全に処理できるように修正されました。
    (Daniel Farina, Tom Lane) (9.2)

    これまで、リモートサーバに異なる設定がされていた場合、曖昧な日付表現が誤って解釈される可能性がありました。本修正で、問い合わせ結果を取得するときだけリモートサーバ設定を一時的に適用するようになりました。本修正後も、異なる設定のリモートサーバへの dblink 問い合わせでは、同じリテラル表現が異なる意味に解釈されうるため、危険性は残ります。
    本問題は全てのバージョンに存在しますが修正は 9.2.x 系列のみとなります。

  30. contrib/pg_trgm の similarity() 関数がトリグラムを持たない文字列に対して、 0 を返すように修正されました。
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    similarity('', '') や similarity('++%%', '-*#'); のような呼び出しが該当します。以前は内部で 0/0 が行われた結果 NaN が返されていました。

  31. Microsoft Visual Studio 2012 でビルド可能になりました。
    (Brar Piening, Noah Misch) (9.2)
  32. タイムゾーンデータが tzdata release 2013b に更新されました。
    (9.2)(9.1)(9.0)(8.4)

    チリ、ハイチ、モロッコ、パラグアイ、ロシアのいくつかの地域における夏時間法の変更、いくつかの歴史的な修正が含まれます。また、ロシア等で略記法データが更新されました。CHOT、GET、IRKT、KGT、KRAT、MAGT、MAWT、MSK、NOVT、OMST、TKT、VLAT、WST、YAKT、YEKT が変更され、
    VOLT(ボルゴグラード)、MIST(マッコーリー)が追加されました。