2014-07-24
このリリースは8.4.21に対し、各種不具合を修正したものです。 8.4メジャーリリースにおける新機能については、E.120. リリース8.4を参照してください。
本リリースはPostgreSQLの8.4.Xシリーズの最後のリリースとなる予定です。 早めに新しいリリースのブランチに更新することを推奨します。
8.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、本リリースでは、いくつかのGiSTインデックスのインデックス破損問題を修正しています。 下記に示すはじめの変更点を確認し、使用しているインストレーションが影響を受けるか、その場合どのような処置を施すべきか判断してください。
また、8.4.19よりも前のリリースからアップグレードする場合は、E.101. リリース8.4.19を参照して下さい。
contrib/btree_gist
拡張モジュールにおけるbit
カラムのインデックスの初期化パディングバイトを修正しました。(Heikki Linnakangas)
このエラーは、等価であるべき値を等価と見なさないことが原因で、正しくないクエリー結果を引き起こします。
bit
型またはbit varying
型のカラムにGiSTインデックスを使っている場合、このアップデート適用後にREINDEX
が必要です。
GINリストページを削除した際、ページを破損から保護します。(Heikki Linnakangas)
インデックスのページ更新をディスクへの書き込み中にシステムクラッシュが発生した場合、インデックス破損が起こる可能性を防ぐ修正です。
ReceiveSharedInvalidMessages
関数を入れ子で呼ばれた場合、キャッシュの無効化が正しくない可能性があり、修正しました。(Andres Freund)
ターゲットリストに複数行を返す関数がある場合、サブクエリの出力が一意であると決めつけないようにしました。(David Rowley)
この見落としはWHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)
のような構成で最適化ミスを引き起こす可能性がありました。
複合要素の構造体のTOASTフィールド取り出し失敗を修正しました。(Tom Lane)
これは、TOASTポインタが参照している値を得ずに他のテーブルにコピーできたケースの修正です。 オリジナルデータが後から削除された場合、不正な領域を指し示すポインタ(dangling pointer)となってしまい、「missing chunk number 0 for toast value ...」のようなエラーを引き起こしていました。
Appendプラン出力の行全体を参照することによって、「record type has not been registered」エラーとなる問題を修正しました。(Tom Lane)
カーソルを巻き戻している間にユーザ定義関数を呼び出した場合、クラッシュする可能性があり、修正しました。(Tom Lane)
FROM
句で関数が引数を評価する際のメモリリーク(クエリー処理内限定)を修正しました。(Tom Lane)
正規表現処理中のメモリリーク(セッション内限定)を修正しました。(Tom Lane, Arthur O'Dwyer, Greg Stark)
hungarian.stop
のデータエンコーディングエラーを修正しました。(Tom Lane)
実行中のトランザクションで行を挿入し、当該行を削除したサブトランザクションがロールバックした場合の、行の有効性チェックを修正しました。(Andres Freund)
これを行った後、同一トランザクション内で、CREATE INDEX
またはCLUSTER
が実行された場合、
問題(少なくとも誤ったワーニングが出て、最悪の場合、無限ループに陥る)の原因となります。
PREPARE TRANSACTION
中は、pg_stat_activity
のxact_start
の値を消去します。(Andres Freund)
PREPARE
コマンド実行後、トランザクション内に元のセッションは最早存在しないので、トランザクション開始時刻を表示し続けるべきではありません。
REASSIGN OWNED
がテキスト検索オブジェクトにエラーを起こさないように修正しました。(Álvaro Herrera)
postmaster起動中はシグナルをブロックします。(Tom Lane)
これにより、例えば起動途中にSIGINTを受け取っても、postmasterは適切に後片付けを行う事ができるようになります。
make check
で一時的に起動されたpostmasterのUNIXドメインソケットを保護します。(Noah Misch)
ローカルユーザはサーバのブートストラップスーパーユーザとしてソケットファイルにアクセス出来、接続可能でした。
そのため、任意のコードをテストを実行しているオペレーティングシステムのユーザとして実行可能でした。
これは既にCVE-2014-0067の中で指摘されていました。
この変更では、サーバのソケットを一時ファイルシステム/tmp
配下のモード0700のサブディレクトリに配置することで、リスクを防御します。
UNIXソケットがサポートされていないプラットフォーム、特にWindowsでは一時postmasterがローカルTCP接続を必要とするため、この危険性は残ります。
この変更の有益な影響は、DEFAULT_PGSOCKET_DIR
を上書きするビルドのmake check
テストが簡単になることです。
よく使われるデフォルトではない/var/run/postgresql
のようなファイルには、
ビルドユーザに書き込み権限がないために必要とされる回避策が、今後必要とされなくなります。
Windowsで、設定ファイルから(log_connectionsのような)PGC_BACKENDパラメータ値を、新しい接続への適用を許可します。(Amit Kapila)
以前は、起動後にファイルのパラメータを変更しても反映されませんでした。
Windowsの実行パス名を適切にクオートします。(Nikhil Deshpande)
この見落としは、インストールパスにスペースと@
が両方含まれる場合、
Windowsでinitdbやpg_upgradeがエラーになる原因となっていました。
OS Xでlibpythonのリンクを修正しました。(Tom Lane)
これまでの方式では、Xcode 5.0とそれ以降で提供されているPythonライブラリでエラーになります。
クライアントが取り込むよりも速くサーバがデータを送り続けた場合、libpq のバッファが肥大化することを回避しました。(Shin-ichi Morita, Tom Lane)
libpqはOut of Memoryになるまで入力バッファの拡張を強要していた可能性がありました
(「lost synchronization with server」の報告は誤解を招いたかもしれません)。
一般的な環境下では、recv()
ループが取り込むよりもずっと早くデータが送られ続けるというのは、かなりこじつけで、
クライアントが人為的にスケジューラによる制約で遅くなっている場合に観測されているくらいです。
libpqのLDAP照会で、意図した通りのタイムアウトを保証しました。(Laurenz Albe)
pg_restoreの、古いスタイルのラージオブジェクトのコメント処理を修正しました。(Tom Lane)
9.0までのバージョンのpg_dumpで生成したアーカイブファイルで、ラージオブジェクトに数件以上のコメントが含まれている場合、 アーカイブファイルを直接データベースにリストアすると失敗していました。
contrib/pgcrypto
関数で、処理が戻る前にスタック変数から機密情報を削除する事を保証します。(Marko Kreen)
contrib/uuid-ossp
モジュールで、呼び出し間でOSSP UUIDライブラリの状態をキャッシュします。(Tom Lane)
この改善はUUID生成の効率を上げ、/dev/urandom
から取り出すエントロピー量を減らします。
タイムゾーンデータファイルをtzdataリリース2014eに更新しました。 クリミア、エジプト、モロッコでの夏時間の変更が含まれます。