リリース日: 2013-02-07
このリリースは9.2.2に対し、各種不具合を修正したものです。 9.2メジャーリリースにおける新機能については、E.102を参照してください。
SQLからenum_recv
を実行できないようにしました。(Tom Lane)
この関数は誤った宣言をされており、単純なSQLコマンドでサーバをクラッシュさせることが可能でした。 実際のところ、サーバのメモリの内容を検査するために攻撃者がこれを利用することが可能になっていました。 この問題を(Secunia SVCRP経由で)報告してくれたSumit Soniに感謝します。(CVE-2013-0255)
WALの再生時にデータベースが一貫性のある状態に到達したことを検知するときの複数の問題を修正しました。(Fujii Masao、Heikki Linnakangas、Simon Riggs、Andres Freund)
実際の再実行作業が必要でない場合における、バックアップの終了点の検出について修正しました。(Heikki Linnakangas)
この誤りにより、間違って「WAL ends before end of online backup」(オンラインバックアップの終了前にWALが終了)のエラーを起こすことがありました。
リレーションのファイルを切り詰めるときに、最小復旧地点を更新するようにしました。(Heikki Linnakangas)
データが捨てられた後は、タイムライン上のそれより前の地点で復旧を止めることは、もはや安全ではありません。
復旧対象のタイムラインを変更した後のWALセグメントの再利用について修正しました。(Heikki Linnakangas)
カスケードしたスタンバイサーバ上でタイムラインの履歴ファイルをアーカイブから適切にリストアするようにしました。(Heikki Linnakangas)
ホットスタンバイのサーバ上でのロック競合の検出について修正しました。(Andres Freund、Robert Haas)
ホットスタンバイモードで問い合わせの取り消しに失敗するのを修正しました。(Noah Misch、Simon Riggs)
ホットスタンバイでの競合する問い合わせを取り消す要求が失敗することがあり、これらの問い合わせで一貫性のないデータを見ることがありました。
復旧停止機能について、ユーザが接続できるようになる前には停止しないようにしました。(Tom Lane)
副SELECTの結果から添字付けあるいは列選択できるようSQLの文法を修正しました。(Tom Lane)
負荷が大きい時の自動バキュームの切り詰めの性能問題を修正しました。(Jan Wieck)
テーブルの最後にある空のページを切り詰めるときに排他的ロックが必要ですが、競合するロック要求があるとき、自動バキュームのプログラムはそれに失敗してテーブルロックを解放するようになっていました。 負荷が重いと切り詰めが全く起こらず、テーブルが大きくなるということが容易に起こり得ました。 部分的な切り詰めを実行、ロックを解放、その後にロックの再取得と処理の継続を試みるように修正しました。 この修正により、競合するロック要求がある場合に、自動バキュームがロックを解放するまでの平均時間が大きく短縮されます。
SPI_execute
および関連する関数の性能を改善しました。
これにより、PL/pgSQLのEXECUTE
が改善されます。(Heikki Linnakangas、Tom Lane)
計画をキャッシュする機能の見直しの結果として9.2で追加されたデータコピーのオーバーヘッドを削除しました。 これにより9.1と比較した性能の劣化がなくなり、また特に実行される問い合わせ文字列が多数のSQL文を含むときにメモリを節約します。
副次的効果は、複数の文からなる問い合わせの文字列が完全に逐次的に処理されることです。 つまり、前の文の実行が終わってから、次の文の解析と計画をするようになります。 これにより、以前からあった問題が解決され、後の文の動作に影響を与えるDDLは期待通りに動作するようになります。
インデックスの利用について、9.2以前のコスト推定に戻しました。(Tom Lane)
誤差についての適切でない変更により、非常に大きなインデックスを利用する場合について、コストの推定が高くなりすぎることがありました。
DROP INDEX CONCURRENTLY
で時々クラッシュするのを修正しました。(Tom Lane)
CREATE/DROP INDEX CONCURRENTLY
の実行中に、共有メモリのロック表が破損する可能性があるのを修正しました。(Tom Lane)
1つのタプルが(ページサイズ−フィルファクタ)より大きい場合について、COPY
で複数タプルを挿入するコードを修正しました。(Heikki Linnakangas)
以前のコードでは無限ループに陥る可能性がありました。
pg_tablespace
をスキャンするときに競合問題が発生しないようにしました。(Stephen Frost、Tom Lane)
pg_tablespace
のエントリに複数の同時更新があるとき、CREATE DATABASE
およびDROP DATABASE
が正しく動作しない場合がありました。
DROP OWNED
がデータベース全体あるいはテーブル空間を削除しようとしないようにしました。(Álvaro Herrera)
安全のため、これらのオブジェクトは削除するのでなく、所有権を変更すべきです。
vacuum_freeze_table_age
の実装の誤りを修正しました。(Andres Freund)
vacuum_freeze_min_age
の値よりも多くのトランザクションを実行したインストール環境では、この誤りにより自動バキュームが部分テーブルスキャンを実行できなくなり、その結果、必ずテーブル全体のスキャンが発生します。
RowExpr
あるいはXmlExpr
が2度、解析された時に、誤った動作をしないようにしました。(Andres Freund、Tom Lane)
この誤りはCREATE TABLE LIKE INCLUDING INDEXES
などの状況においてユーザに明らかになることがありました。
ハッシュテーブルのサイズ計算で整数のオーバーフローが起きないようにする仕組みを改善しました。(Jeff Davis)
データ型の権限に関連するいくつかのバグを修正しました。(Tom Lane)
型のデフォルト権限にいくつかの問題があり、pg_dumpはそのような権限を全くダンプ出力できませんでした。
サーバがクラッシュした後、残されていた一時テーブルを無視しないという問題を修正しました。(Tom Lane)
Windowsにおいて、postmasterのログファイルをサイズの問題で再利用しないという問題を修正しました。(Jeff Janes、Heikki Linnakangas)
to_date()
が範囲外の日付を拒絶するようにしました。(Hitoshi Harada)
pg_extension_config_dump()
が拡張のアップデートについて適切に処理するよう修正しました。(Tom Lane)
この関数は、対象のテーブルのすべての既存のエントリを置換するようになりました。 これにより、拡張をアップデートするスクリプトから利用可能になります。
PL/pgSQLが単純な式について計画時エラーを出す場合があるのを修正しました。(Tom Lane)
以前のコードでは、このエラーにより、CONTEXT
トレースバックの1行目を無視することがありました。
関数が複数のテーブルのトリガーとして使われる場合について、PL/Pythonの処理を修正しました。(Andres Freund)
Windowsで非ASCIIのプロンプト文字列が、確実に正しいコードページに変換されるようにしました。(Alexander Law、Noah Misch)
このバグはpsqlおよび他のいくつかのクライアントプログラムに影響がありました。
データベースに接続していないとき、psqlの\?
コマンドがクラッシュする可能性があったのを修正しました。(Meng Qingzhong)
pg_basebackupの実行中にリレーションのファイルが削除された時にエラーが起きる可能性があるのを修正しました。(Heikki Linnakangas)
pg_basebackup -X fetch
でスタンバイサーバのバックアップをしているときに、タイムラインの切り替えをできるようにしました。(Heikki Linnakangas)
pg_dumpをホットスタンバイのサーバで実行するとき、ログを取らないテーブルのデータを除外するようにしました。(Magnus Hagander)
スタンバイのサーバにはログを取らないテーブルのデータがありませんから、これはいずれにせよ失敗します。
従って、自動的に--no-unlogged-table-data
と見なすのが最も良い方法であると思われます。
pg_upgradeが不正なインデックスを安全に扱うよう修正しました。(Bruce Momjian)
pg_upgradeの-O/-oオプションを修正しました。(Marti Raudsepp)
libpqのPQprintTuples
でバッファを1バイト行き過ぎてしまう問題を修正しました。(Xi Wang)
この古い関数はPostgreSQL本体によっては使われていませんが、クライアントのプログラムでは今でも使われているかもしれません。
ecpglibで翻訳されたメッセージを適切に使うようにしました。(Chen Huajun)
MSVC上でecpg_compatおよびpgtypesのライブラリを適切にインストールするようにしました。(Jiang Guiqing)
isinf()
をシステムが提供していなければ、我々のバージョンをlibecpgに含めるようにしました。(Jiang Guiqing)
libedit/libreadlineからの誤ったエクスポートに騙されないよう、configureによる提供関数の確認の順序を調整しました。(Christoph Berg)
Windowsのビルド番号が時とともに確実に大きくなるようにしました。(Magnus Hagander)
Windows用にクロスコンパイルしたときに、pgxsが正しく.exe
の拡張子の付いた実行プログラムを生成するようにしました。(Zoltan Boszormenyi)
新しい時間帯の略号FET
を追加しました。(Tom Lane)
これは一部の東ヨーロッパの時間帯で使われています。