リリース日: 2014-07-24
このリリースは9.2.8に対し、各種不具合を修正したものです。 9.2メジャーリリースにおける新機能については、E.102を参照してください。
9.2.Xからの移行ではダンプ/リストアは不要です。
しかしながら、本リリースでは、いくつかのGiSTインデックスのインデックス破損問題を修正しています。 下記に示すはじめの変更点を確認し、使用しているインストレーションが影響を受けるか、その場合どのような処置を施すべきか判断してください。
また、9.2.6よりも前のリリースからアップグレードする場合は、E.96を参照して下さい。
contrib/btree_gist
拡張モジュールにおけるbit
カラムのインデックスの初期化パディングバイトを修正しました。(Heikki Linnakangas)
このエラーは、等価であるべき値を等価と見なさないことが原因で、正しくないクエリー結果を引き起こします。
bit
型またはbit varying
型のカラムにGiSTインデックスを使っている場合、このアップデート適用後にREINDEX
が必要です。
GINリストページを削除した際、ページを破損から保護します。(Heikki Linnakangas)
インデックスのページ更新をディスクへの書き込み中にシステムクラッシュが発生した場合、インデックス破損が起こる可能性を防ぐ修正です。
WALからの更新を再実行中にGiSTインデックスページのリンク先を削除しません。(Heikki Linnakangas)
このエラーはホットスタンバイ中にGiSTインデックススキャンを実施した場合、一時的に間違った回答を引き起こす可能性がありました。
SP-GiSTテキストインデックスへの挿入中に無限ループに陥る稀なケースを修正しました。(Tom Lane)
稼働中にhot_standby_feedbackがoffに変更された場合のフィードバックステータスを修正しました。(Simon Riggs)
ReceiveSharedInvalidMessages
関数を入れ子で呼ばれた場合、キャッシュの無効化が正しくない可能性があり、修正しました。(Andres Freund)
入れ子のnestloopプランで生成された、入れ子のプレースホルダ値を取り扱いミスするプランナの不具合を修正しました。(Tom Lane)
この見落としは、「variable not found in subplan target lists」エラーを引き起こすか、黙って誤ったクエリの結果を返す可能性がありました。
継承された子テーブルを読み込むUNION ALL
上のサブクエリによって、
プランナが「could not find pathkey item to sort」エラーになる障害を修正しました。
ターゲットリストに複数行を返す関数がある場合、サブクエリの出力が一意であると決めつけないようにしました。(David Rowley)
この見落としはWHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)
のような構成で最適化ミスを引き起こす可能性がありました。
可能であればAND
/OR
条件の入力から null定数を除去するようにプランナを改善しました。(Tom Lane)
より積極的にパラメータ置換をすることにより、9.2以上の版において古いバージョンのものより悪いプランになるかもしれなかったのを、この変更で修正しました。
to_json()
および関連する関数で、入力型カテゴリの識別を修正しました。(Tom Lane)
JSON
の結果内でmoney
フィールドのクオートが不十分であることが知られており、他のデータタイプでも同様に誤った結果になっていたかもしれません。
複合要素の構造体の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)
default_with_oidsがtrueの場合でも、外部テーブルがOID付で作成される事を防止しました。(Etsuro Fujita)
実行中のトランザクションで行を挿入し、当該行を削除したサブトランザクションがロールバックした場合の、行の有効性チェックを修正しました。(Andres Freund)
これを行った後、同一トランザクション内で、CREATE INDEX
またはCLUSTER
が実行された場合、
問題(少なくとも誤ったワーニングが出て、最悪の場合、無限ループに陥る)の原因となります。
PREPARE TRANSACTION
中は、pg_stat_activity
のxact_start
の値を消去します。(Andres Freund)
PREPARE
コマンド実行後、トランザクション内に元のセッションは最早存在しないので、トランザクション開始時刻を表示し続けるべきではありません。
REASSIGN OWNED
がテキスト検索オブジェクトにエラーを起こさないように修正しました。(Álvaro Herrera)
postmaster起動中はシグナルをブロックします。(Tom Lane)
これにより、例えば起動途中にSIGINTを受け取っても、postmasterは適切に後片付けを行う事ができるようになります。
IPアドレスの代わりにホスト名がpg_hba.conf
に定義されている場合、クライアントのホスト名検索処理を修正しました。(Tom Lane)
DNSの逆引き検索に失敗した場合、エントリーがマッチしない事を黙認せず報告することを保証しました。 また、DNS逆引き検索に失敗した場合に発生していた、ホスト名エントリー毎でなく、コネクション毎に検索する事を保証しました。
rootユーザでも postgres -C 変数
およびpostgres --describe-config
を使うことができるようにしました。(MauMau)
これらの操作はルートでのサーバ起動禁止に必要では無く、制限を緩和することによってpg_ctlが失敗する幾つかのシナリオを回避できます。
make check
で一時的に起動されたpostmasterのUNIXドメインソケットを保護します。(Noah Misch)
ローカルユーザはサーバのブートストラップスーパーユーザとしてソケットファイルにアクセス出来、接続可能でした。
そのため、任意のコードをテストを実行しているオペレーティングシステムのユーザとして実行可能でした。
これは既にCVE-2014-0067の中で指摘されていました。
この変更では、サーバのソケットを一時ファイルシステム/tmp
配下のモード0700のサブディレクトリに配置することで、リスクを防御します。
UNIXソケットがサポートされていないプラットフォーム、特にWindowsでは一時postmasterがローカルTCP接続を必要とするため、この危険性は残ります。
この変更の有益な影響は、DEFAULT_PGSOCKET_DIR
を上書きするビルドのmake check
テストが簡単になることです。
よく使われるデフォルトではない/var/run/postgresql
のようなファイルには、
ビルドユーザに書き込み権限がないために必要とされる回避策が、今後必要とされなくなります。
テーブルスペース作成のWALリプレイをWindowsで動作するように修正しました。(MauMau)
Windowsでソケット生成失敗の判定処理を修正しました。(Bruce Momjian)
Windowsで、設定ファイルから(log_connectionsのような)PGC_BACKENDパラメータ値を、新しい接続への適用を許可します。(Amit Kapila)
以前は、起動後にファイルのパラメータを変更しても反映されませんでした。
Windowsの実行パス名を適切にクオートします。(Nikhil Deshpande)
この見落としは、インストールパスにスペースと@
が両方含まれる場合、
Windowsでinitdbやpg_upgradeがエラーになる原因となっていました。
macOSで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)
char ポインタ
の配列を複数行返すFETCHステートメントがターゲットの場合、ecpgが正しく動作するように修正しました。また、その他の配列操作も修正しました。(Ashutosh Bapat)
pg_restoreの、古いスタイルのラージオブジェクトのコメント処理を修正しました。(Tom Lane)
9.0までのバージョンのpg_dumpで生成したアーカイブファイルで、ラージオブジェクトに数件以上のコメントが含まれている場合、 アーカイブファイルを直接データベースにリストアすると失敗していました。
新しいサーバではTOASTテーブルを作るが古いバージョンでは作らないケースについてpg_upgradeを修正しました。(Bruce Momjian)
この稀な状況により「relation OID mismatch」エラーを引き起こす可能性がありました。
contrib/auto_explain
によってユーザのEXPLAIN
の出力が変化するのを防ぎました。(Tom Lane)
auto_explain
が有効な場合、EXPLAIN (ANALYZE, TIMING OFF)
コマンドを実行してもタイミング情報が出力される可能性がありました。
contrib/dblink
のクエリー実行範囲内でのメモリリークを修正しました。(MauMau, Joe Conway)
contrib/pgcrypto
関数で、処理が戻る前にスタック変数から機密情報を削除する事を保証します。(Marko Kreen)
contrib/pgstattuple
のpgstat_heap()
が解放済メモリを使わないようにしました。(Noah Misch)
contrib/uuid-ossp
モジュールで、呼び出し間でOSSP UUIDライブラリの状態をキャッシュします。(Tom Lane)
この改善はUUID生成の効率を上げ、/dev/urandom
から取り出すエントロピー量を減らします。
タイムゾーンデータファイルをtzdataリリース2014eに更新しました。 クリミア、エジプト、モロッコでの夏時間の変更が含まれます。