2009-12-14
このリリースは8.4.1に対し、各種の不具合を修正したものです。 8.4メジャーリリースにおける新機能についてはE.120. リリース8.4を参照してください。
8.4.Xからの移行ではダンプ/リストアは不要です。
しかしハッシュインデックスが存在する場合、8.4.2に移行した後に、破損している可能性があるためそれを修復するためにREINDEX
を行わなければなりません。
セッション固有の状態を変更するインデックス関数により引き起こされる間接的なセキュリティ脅威から保護します。(Gurjeet Singh、Tom)
この変更により不変インデックス関数がスーパーユーザのセッションを破壊できることを防ぎます。(CVE-2009-4136)
ヌルバイトが埋め込まれたコモンネーム(CN)フィールドをもつSSL証明書を拒絶します。(Magnus)
これは、SSL検証においてサーバまたはクライアント名に対する証明書が不正に一致しないようにします。(CVE-2009-4034)
ハッシュインデックス破損を修正しました。 (Tom)
8.4では、ハッシュインデックスはハッシュ値でソートして項目を保持するように変更されましたが、順序を保持するためにバケット分割および圧縮処理の更新に失敗します。
このためこうした操作を行うアプリケーションは、永続的なインデックスの破損をもたらす可能性がありました。
これをうまく扱うためには、更新をインストールした後にハッシュインデックスすべてをREINDEX
することを推奨します。
バックエンド起動時のキャッシュ初期化の間でクラッシュする可能性を修正しました。(Tom)
空のシソーラス辞書におけるクラッシュを防止しました。(Tom)
安全ではない時点でのVACUUM
を中断するシグナルを防止します。 (Alvaro)
この修正により、VACUUM FULL
がすでにタプルの移動をコミットした後にキャンセルされた場合のパニックや、通常のVACUUM
がテーブルを切り詰めた後に割り込みを受けた場合の一時的なエラーを防止します。
ハッシュテーブルサイズの計算における整数オーバーフローによるクラッシュの可能性を修正しました。(Tom)
これは、ハッシュ結合の結果のプランナの推定サイズが極端に大きい場合に発生することがありました。
内部的な依存関係をもつオブジェクトに対する DROP
が試行された場合のクラッシュを修正しました。(Tom)
inet
/cidr
の比較における非常にまれなクラッシュを修正しました。 (Chris Mikkelson)
準備されたトランザクションで保持されるタプルレベルの共有ロックを確実に無視しないようにしました。 (Heikki)
副トランザクション内でアクセスされるカーソルで使用される一時ファイルの早すぎる削除を修正しました。 (Heikki)
新しいCSVログファイルに変更する時のsysloggerプロセスのメモリリークを修正しました。(Tom)
pg_hba.conf
の再解析時のpostmasterのメモリリークを修正しました。(Tom)
Windowsにおける権限ダウングレードロジックを修正しました。(Jesse Morris)
これは、Windowsにおいて「could not locate matching postgres executable」といった誤解を招くエラーメッセージでよくデータベースの起動が失敗する状況の一部を修正します。
主問い合わせにおけるFOR UPDATE/SHARE
が WITH
問い合わせに伝搬されないようにしました。(Tom)
たとえば
WITH w AS (SELECT * FROM foo) SELECT * FROM w, bar ... FOR UPDATE
では、FOR UPDATE
はbar
に影響し、 foo
には影響しなくなります。
これは、以前の8.4の動作より有用かつ一貫性があります。
以前はFOR UPDATE
をWITH
まで伝搬させようとし、常に雑多な実装上の制限により失敗していました。
また、WITH
問い合わせは主問い合わせと独立して実行されるという設計規則にも従います。
そのすぐ内側に別のWITH RECURSIVE
を持つWITH RECURSIVE
問い合わせの不具合を修正しました。 (Tom)
ハッシュインデックスにおける同時実行性に関する不具合を修正しました。(Tom)
同時実行の挿入によりインデックス走査が一時的に間違った結果を報告することがありました。
GiSTインデックスページ分割において、分割がインデックスの最初の列以外に依存する場合の不正なロジックを修正しました。(Paul Ramsey)
fastupdate
が有効な場合、複数列に対するGINインデックスの検索結果が不正となる点を修正しました。(Teodor)
GINインデックスにおけるWAL項目の生成における不具合を修正しました。(Tom)
これらの不具合は、 full_page_writes
が有効な場合は現れることはありませんが、無効にした場合、次のチェックポイント以前にクラッシュが起きた場合、WAL再生は確実に失敗しました。
チェックポイントの最後で古いWALファイルの回収や削除が失敗した場合にエラーを出力しません。(Heikki)
致命的ではないものと扱い、チェックポイントを完了させることができるようにする方が優れています。 将来のチェックポイントでは削除を再試行します。 こうした問題は通常の操作では想定されませんが、うまく設計されていないWindowsのアンチウィルスソフトウェアやバックアップソフトウェアにより現れることがあります。
WindowsにおいてWALファイルが繰り返しアーカイブされないようにしました。 (Heikki)
別の症状として、一部の他のプロセスが不要となったファイルの削除に干渉する場合にも発生します。
PAMパスワード処理をより堅牢に修正しました。(Tom)
以前のコードでは、Linuxのpam_krb5
PAMモジュールとドメインコントローラとしてのMicrosoft Active Directoryを組み合わせると失敗することが知られていました。
PAMスタックに渡される引数に関する正当ではない仮定を作成することであるため、どこかで問題になるかもしれません。
GSSAPIおよびSSPI認証方式における認証トークン(Kerberosチケット)の最大サイズを上げました。(Ian Turner)
以前の2000バイトという制限はUnix Kerberosの実装では十分でしたが、Windowsドメインコントローラで発行されるチケットではより大きくなることがあります。
ドメインが配列型を管理する場合、ドメイン制約がARRAY[...]::domain
のような式として確実に強制されるようにしました。 (Heikki)
複合型の列を外部キーとして含む一部の場合における外部キーのロジックを修正しました。 (Tom)
カーソルのスナップショットが生成後、確実に変更されないようにしました。(Alvaro)
これは、同じトランザクション内で後の操作が、そのカーソルが返すものと想定するデータを変更する場合、カーソルが間違った結果をもたらすようになります。
CREATE TABLE
が別の継承する親テーブル由来のデフォルト式を適切にマージするように修正しました。(Tom)
これは動作していましたが、8.4では壊れていました。
シーケンスのアクセス統計情報の収集を再度有効にしました。 (Akira Kurosawa)
これは動作していましたが、8.3では壊れていました。
CREATE OR REPLACE FUNCTION
における所有権限の依存関係の処理を修正しました。(Tom)
WHERE
x
=x
条件の不正な処理を修正しました。(Tom)
一部の場合、これらは冗長なものとして無視されることがありましたが、そうではありません。
— これらはx
IS NOT NULL
と等価です。
テキスト等価性に関する揮発式においてハッシュ集約を使用してDISTINCT
を実装する場合における不正な計画生成を修正しました。(Tom)
揮発SELECT DISTINCT ON
式におけるアサート失敗を修正しました。(Tom)
空のtsvector
値に対してts_stat()
が失敗しないように改修しました。 (Tom)
全文検索パーサがXML属性内のアンダースコアを受け付けるようにしました。(Peter)
xml
バイナリ入力における符号化方式の扱いを修正しました。(Heikki)
XMLヘッダにて符号化方式の指定がない場合、デフォルトでUTF-8を仮定するようになります。 以前の扱いには一貫性がありませんでした。
plperlu
からplperl
の呼び出し、またはその逆における不具合を修正しました。(Tom)
内部の関数からのエラー終了が、外側の関数用のPerlインタプリタを正しく再選択できずにクラッシュをもたらす可能性がありました。
PL/Perl関数が再定義された時のセッション有効期間のメモリリークを修正しました。(Tom)
集合を返すPL/Perl関数により返される場合Perl配列が適切にPostgreSQL配列に返還されることを確実にしました。(Andrew Dunstan、Abhijit Menon-Sen)
集合以外を返す関数ではすでに正しく動作しました。
PL/Pythonの例外処理におけるまれなクラッシュを修正しました。(Peter)
DECLARE CURSOR
文におけるコメントに関するecpg問題を修正しました。(Michael)
ecpgが最近追加されたキーワードを予約語と扱わない問題を修正しました。(Tom)
これは、CALLED
、CATALOG
、DEFINER
、ENUM
、FOLLOWING
、INVOKER
、OPTIONS
、PARTITION
、PRECEDING
、RANGE
、SECURITY
、SERVER
、UNBOUNDED
、WRAPPER
キーワードに影響します。
psqlの\df
関数名パラメータにおいて正規表現特殊文字を再度許します。(Tom)
contrib/fuzzystrmatch
において、デフォルト以外のコストによるlevenshtein
距離の計算を正しくしました。(Marcin Mank)
contrib/pg_standby
にて、Windowsのシグナルを使用したフェイルオーバの通知を無効にしました。(Fujii Masao)
WindowsではUnixのようなシグナルを持ちませんので、これはまったく役に立っていませんでした。 さらに最近の変更により実際にクラッシュしてしまいます。
FREEZE
およびVERBOSE
オプションをcontrib/vacuumdb
が生成するVACUUM
コマンドの右側につけました。(Heikki)
contrib/dblink
がエラーになった場合の接続が漏えいする可能性を修正しました。(Tatsuhito Kasahara)
psqlのflexモジュールが正しいシステムヘッダファイルを使用してコンパイルされることを確実にしました。(Tom)
これは、--enable-largefile
が生成されたコード内に非互換の変更を引き起こすプラットフォームにおける構築失敗を修正します。
今後のバージョンのlibpqとの互換性を高めるために、postmasterが接続要求パケットにおけるapplication_name
パラメータをすべて無視するようにしました。(Tom)
最新の現実に合うように時間帯省略形ファイルを更新しました。(Joachim Wieland)
デフォルト時間帯群にIDT
の追加が含まれます。
タイムゾーンデータファイルをtzdata release 2009sまで更新しました。 南極、アルゼンチン、バングラデシュ、フィジー、ノヴォクズネツク、パキスタン、パレスチナ、サモア、シリアにおける夏時間規則の変更、および香港に関する歴史的な修正が含まれます。