リリース日: 2015-05-22
このリリースは9.0.19に対し、各種不具合を修正したものです。 9.0メジャーリリースにおける新機能については、E.151 を参照してください。
PostgreSQLコミュニティは2015年9月に9.0.Xシリーズの更新リリースを終了する予定です。 早めに新しいリリースのブランチに更新することを推奨します。
9.0.Xからの移行ではダンプ/リストアは不要です。
しかしながら、9.0.18よりも前のリリースからアップグレードする場合は、E.133を参照して下さい。
認証タイムアウトになる直前にクライアントが切断したときにクラッシュする可能性を防止しました。 (Benkocs Norbert Attila)
タイムアウト割り込みがセッション切断処理の途中で生じると、SSL関連状態が二重に解放するおそれがあり、典型的にはクラッシュを引き起こし、そのために他のセッションでもサービス不能を引き起こします。実験では認証されていないリモート攻撃者がある程度一貫して本障害を引き起こすことができたため、セキュリティ問題として扱います。 (CVE-2015-3165)
システムコールのエラー判定を改善しました。 (Noah Misch)
snprintf()
の代替実装は下にあるシステムライブラリ呼び出しから報告されるエラーの確認を怠っていました。
主な問題はメモリ不足状況を見逃すおそれがあったことです。
実装コードがバッファが上書きされていないのを上書きされたとみなしていることにより、最悪の場合には情報露出をもたらすおそれがありました。
また、他のシステムライブラリ関数呼び出しでも、エラーチェックをしていないセキュリティに関連した箇所が少しありました。
いくつかの*printf()
族関数の呼び出しで、メモリ不足エラーがちょうど悪いときに起きた場合に情報露出する脆弱性がある可能性が残ります。
私たちはリスクは大きくないと判断しましたが、該当箇所の分析は継続します。
(CVE-2015-3166)
contrib/pgcrypto
で、復号失敗を報告するメッセージを「Wrong key or corrupt data」(誤ったキーまたは不正なデータ)に統一しました。
(Noah Misch)
以前は、間違ったキーによる復号の場合には異なったエラーメッセージが報告されていました。
この様なエラーメッセージの違いは、他システムからキーを復元しようとする攻撃者への助けになるとみられます。
pgcrypto
のこの振る舞いが攻撃に利用できるかは不明ですが、一つの何にでも当てはまるメッセージを使う方がリスクを避けるのにより良いと考えられます。
(CVE-2015-3167)
HOT更新後の遅延排他制約の誤った検査を修正しました。 (Tom Lane)
遅延排他制約に違反する可能性のある新しい行が同じトランザクションで後でHOT更新された(インデックスが付かない列の更新でその行が同テーブルページ内に格納できた)場合、後に削除される行が、新たな行と当初に衝突していた場合でも、排他制約は最後に行われる検査で違反を報告することがありました。
他の外部結合に対する anti-join (NOT EXISTS 結合) の不適切な配置換えを防止しました。 (Tom Lane)
プランナのこの誤りにより「could not find RelOptInfo for given relids」エラーが見られましたが、しかし時には誤ったクエリプランが一貫性チェックを通過して、黙って誤ったクエリ出力が生じることがあると考えられます。
外部結合プランノードでの部分式の誤ったマッチングを修正しました。 (Tom Lane)
これまでは、字面として同一の非STRICTの部分式が外部結合の上位と下位の両方で使われているとき、プランナが結合の下位で計算した値を再利用しようとすることがありましたが、エグゼキュータは外側の行にマッチしない場合は値をNULLに強制するはずなので、これは正しくありません。
結合順序のヒューリスティックが失敗した場合に対応できるようにGEQOプランナを修正しました。 (Tom Lane)
この誤りがLATERAL
を含む問い合わせでエラー「failed to join all relations together」(全てのリレーションを一緒に結合するのに失敗しました)を導くのが見かけられ、また、そのほかの場合でも起きるようです。
max_prepared_transactions
が小さすぎるとき、PostgreSQL起動時にデッドロックの可能性があり、修正しました。
(Heikki Linnakangas)
タイムライン切り替え後、使えない事前割り当てされたWALファイルをアーカイブしないようにしました。 (Heikki Linnakangas)
「cannot GetMultiXactIdMembers() during recovery」(リカバリ中にGetMultiXactIdMembers()は実行できません)というエラーが発生しないようにしました。 (Álvaro Herrera)
クラッシュ後に再帰的にfsync()
を行うようにしました。
(Abhijit Menon-Sen, Robert Haas)
これにより別のクラッシュがすぐ後に生じた場合でも一貫性を確実にします(問題となるのは二番目のクラッシュが単なるデータベースクラッシュではなくシステムレベルのクラッシュである場合です)。
SIGTERMシグナルを受け取った後にエラーが起きた場合に、autovacuumランチャープロセスがシャットダウンに失敗する可能性があったのを修正しました。 (Álvaro Herrera)
LockBufferForCleanup()
で予期せぬシグナルに対応するようにしました。
(Andres Freund)
この誤りは「multiple backends attempting to wait for pincount 1」(複数バックエンドがピンカウント1を待とうとしています)という偽性のエラーをひき起こすことがあります。
read-only であるトランザクションのコミットにおいては、当該のユーザに限り、WALフラッシュや同期レプリケーションを待たないようにしました。 (Andres Freund)
これまでは、HOTページ掃除のためにWALを書くトランザクションのコミットにて遅延がおきる可能性があり、全スタンバイがダウンしている場合には、セッションが開始時に固まってしまうなどの望ましくない結果に至りました。 同期レプリケーションのときのキャッチアップ割り込み処理でもセッションが固まることがありました。 本修正はこれらの問題を解消します。
一時テーブル上のハッシュインデックスを操作するときに生じるクラッシュを修正しました。 (Heikki Linnakangas)
他プロセスが同時にインデックスを変更している場合、ハッシュインデックスのバケツ分割に失敗する可能性があり、修正しました。 (Tom Lane)
インデックス式のANALYZE中に割り込みを検査するようにしました。 (Jeff Janes)
ANALYZE
ではインデックスの式を何度も実行します。
こういった式の中に遅い関数があった場合、ANALYZE
をループが終わる前にキャンセルできることが望まれます。
外部サーバユーザマッピングのオブジェクト説明文字列にターゲットサーバ名を追加しました。 (Álvaro Herrera)
Kerberos/GSSAPI/SSPI認証を使うとき、include_realm
を1に設定することを推奨します。
(Stephen Frost)
これが無いと、他レルムからの同名ユーザが区別できません。 当面はドキュメント変更のみですが、これはPostgreSQL 9.5でデフォルト設定になります。
IPv4のpg_hba.conf
項目をIPv4-in-IPv6アドレスと照合する実装を除去しました。
(Tom Lane)
この実装は2003年にその時の一部のLinuxカーネルでIPv4-in-IPv6アドレスを持ちながらIPv4接続を報告するというレポートに応えて追加されました。
しかしながら、このロジックは9.0で図らずも壊れていました。
それ以来、どこにも苦情が無いことは、それがもう必要でないことを示しています。
現在、壊れた実装が一部システムでクラッシュをひき起こすという報告がされているので、これを修正するのでなく、単に除去します
(私たちが修正することを選んだなら、それは IPv4のpg_hba.conf
項目の現在の意味に対する、微妙で潜在的にセキュリティ影響のある変更に向かい、これはマイナーリリースで行うこととして良いことではありません)。
Windows でサービスシャットダウンするときに、サービスが早くに強制終了されてしまうのを防ぐために、サービスコントロールマネージャに周期的に状態更新を送るようにしました。 また、pg_ctlが確実にシャットダウンを待つようにしました。 (Krystian Bigaj)
libpqのノンブロッキングモードを使うとき、ネットワークデッドロックの危険性を軽減しました。 (Heikki Linnakangas)
大きいデータを送るとき、サーバが出力をブロックするほどの応答データを送ってくる場合には、時々に入力バッファが捌けることが重要です
(典型的なシナリオは、サーバがCOPY FROM STDIN
の実行中に連続して NOTICE メッセージを送ってくる場合です)。
このとき、通常のブロッキングモードなら適切に動作しますが、ノンブロッキングモードの場合はそうではありません。
私たちはlibpqを日和見的に可能なときに入力を排出するように修正しましたが、この問題に対する完全な対策にはアプリケーションの協力が必要です。
アプリケーションは write-ready 状態だけでなく、read-ready に気を付けなければならず、read-ready に応じて確実にPQconsumeInput()
を呼ばなければいけません。
ecpgで配列の扱いが修正されました。 (Michael Meskes)
\connect
の最初の引数として、URIと接続文字列を正常に扱えるようにpsqlを修正しました。
(David Fetter, Andrew Dunstan, Álvaro Herrera)
この構文は(ドキュメント化されていませんが)永らく受け入れられてきました。 しかし、これまで一部パラメータにて与えられた文字列でなく以前の接続から取得されることがあり、これは望ましくない動作であると合意されています。
一部のプラットフォームでpsqlから終了時に~/.psql_history
を書くのに失敗したという間違ったエラーメッセージがでるのを抑止しました。
(Tom Lane)
この誤動作はとても古いバージョン(2006年より前)のlibeditのバグを回避するために引き起こされました。 私たちはその回避策を取り除くことで修正しました。 このことで古いバージョンのlibeditを使っている場合、同様の障害を引き起こします。 ライブラリをアップグレードするかlibreadlineを使うことを推奨します。
pg_dumpのシステム提供されたダンプ不要のキャストを判断する規則を修正しました。 (Tom Lane)
VALUES (...) だけであるけれどカラム別名を持つビューのダンプについて修正しました。 (Tom Lane)
pg_upgradeで、新たなクラスタのタイムラインを強制的に1にするようにしました。 (Bruce Momjian)
この変更は、WALヒストリファイルが無いという誤ったエラーによるアップグレード失敗を防ぎます。
pg_upgradeで、不適切な接続不能データベースが無いか処理前に検査するようにしました。 (Bruce Momjian)
pg_upgradeで、生成されるdelete_old_cluster
スクリプトの中でディレクトリパスを適切にクオートするようにしました。
(Bruce Momjian)
pg_upgradeで、データベースレベルの凍結情報を適切に保持するようにしました。 (Bruce Momjian)
この誤りはpostgres
データベースとtemplate1
データベースのテーブルに対してclogファイルが無いというエラーを引き起こす可能性がありました。
Administratorで実行しても失敗しないように、Windows上でpg_upgradeとpg_resetxlogを制限された権限で実行するようにしました。 (Muhammad Asif Naeem)
contrib/intarray
で遅いソートアルゴリズムを修正しました。
(Tom Lane)
Sparc V8 マシンでのコンパイル失敗を修正しました。 (Rob Rowan)
タイムゾーンデータファイルが、エジプト、モンゴル、パレスチナにおける夏時間規則の変更、カナダ、チリの歴史的変更、America/Adak の時間帯省略形の改定(HAST/HADT でなく HST/HDT となる)が含まれるtzdata release 2015d に更新されました。