リリース日: 2011-12-05
このリリースは8.4.9に対し、各種の不具合を修正したものです。 8.4メジャーリリースにおける新機能についてはE.174を参照してください。
8.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、information_schema.referential_constraints
ビュー定義において長期に渡って潜在したエラーが見つかりました。
このビューからの正確な結果に依存している場合、後述の変更点の最初で説明する通りその定義を置き換えなければなりません。
また、8.4.8より前のバージョンからアップグレードする場合は、E.166を参照してください。
information_schema.referential_constraints
ビューの不具合を修正しました。(Tom Lane)
このビューでは、外部キーと依存する主キーまたは一意キー制約との対応付けについて十分な注意を行っていませんでした。 このため、外部キー制約がまったく表示されない、何回も表示される、あるいは、実際の依存する制約とは異なる制約に依存するものと言い張るという結果になることがありました。
このビュー定義はinitdbによってインストールされますので、ただアップグレードしただけでは問題は解消されません。
既存のインストレーションでこの問題を解消させなければならない場合、(スーパーユーザとして)information_schema
スキーマを削除して、
を元に再作成することができます。
(SHAREDIR
/information_schema.sqlSHAREDIR
の場所が分からない場合はpg_config --sharedir
を実行してください。)
これは修正対象のデータベースそれぞれで繰り返さなければなりません。
GINインデックス更新に関するWALレコードの不正確な再生を修正しました。(Tom Lane)
このためクラッシュ後またはホットスタンバイサーバにおいて、インデックス項目の検索に過渡的に失敗する結果になり得ました。
しかし、この問題はインデックスに対する次回のVACUUM
で修復されます。
CREATE TABLE dest AS SELECT * FROM src
またはINSERT INTO dest SELECT * FROM src
時のTOAST関連のデータの破損を修正しました。(Tom Lane)
テーブルがALTER TABLE ADD COLUMN
によって変更された場合、データを逐語的に別のテーブルにコピーしようとした時に特定の境界条件で破損した結果になることがありました。
この問題は、8.4以降において、この構文においてのみ明確に発生し得たものですが、同じ不具合を引き起こす他のコードパスがある場合に備えて、より過去のバージョンにおいてもパッチを適用しました。
無効なsyscache項目からTOASTテーブルにアクセスする時の競合条件を修正しました。(Tom Lane)
典型的な兆候は、「missing chunk number 0 for toast value NNNNN in pg_toast_2619」のような一時的なエラーです。 ここで挙げられるTOASTテーブルは常にシステムカタログに属します。
パラメータのデフォルト式で使用される項目について関数の依存関係を追跡します。(Tom Lane)
これまでは、参照されるオブジェクトが、参照する関数を削除または変更することなく、削除されることがあり得ました。
このため関数が使用される時に誤動作することになりました。
単にこの更新をインストールするだけでは依存関係が消失した項目が修正されないことに注意してください。
修正するためには、その後にこうした関数それぞれにCREATE OR REPLACE
を行う必要があります。
デフォルト値が組み込み以外のオブジェクトに依存する関数があれば、これを行うことを勧めます。
複数のOUTパラメータを持つ、集合を返すSQL関数をインライン化することができます。(Tom Lane)
DatumGetInetP()
が1バイトヘッダを持つinetデータを展開するようにしました。
さらに展開を行わない、新しいマクロDatumGetInetPP()
を追加しました。(Heikki Linnakangas)
この変更がコアコードに影響することはありませんが、DatumGetInetP()
が通常の規約の通りに展開したデータを生成することを想定しているアドオンのコードにおけるクラッシュを防止できるかもしれません。
money
型の入出力におけるロケールのサポートを改良しました。(Tom Lane)
すべての標準lc_monetary
書式付けオプションをサポートしていないという点以外にも、入力関数と出力関数に一貫性がなかったため、ダンプされたmoney
値では再度読み取ることができないロケールがありました。
transform_null_equals
がCASE foo WHEN NULL ...
式に影響を与えないようにしました。(Heikki Linnakangas)
transform_null_equals
は、CASE
構文によって内部的に生成された等価な検査ではなく、直接ユーザによって書かれたfoo = NULL
に影響を与えることのみを前提としています。
自己参照外部キーをより良くサポートするために、外部キートリガの生成順序を変更しました。(Tom Lane)
カスケードしている外部キーが自身のテーブルを参照する場合、1行の更新が1つのイベントでON UPDATE
トリガとCHECK
トリガの両方を発行します。
ON UPDATE
トリガを最初に実行しなければなりません。
そうしないと、CHECK
は最終的ではない行の状態を検査することになり、不適切なエラーが発生する可能性があります。
しかしこれらのトリガの発行順序はその名前によって決まります。
トリガは「RI_ConstraintTrigger_NNNN」という規約に従った名前で自動生成されますので、一般的には作成順序によって決まります。
適切な修正にはこの規約の変更が必要です。
9.2で変更する予定ですが、既存のリリースで変更することには危険があるように思われます。
このため、このパッチはトリガの作成順序を変更するだけです。
この種のエラーが起きたユーザは、トリガを正しい順序にするために、外部キー制約を削除し再作成しなければなりません。
バッファ割当率を追跡する際の浮動小数アンダーフローを防止します。(Greg Matthews)
これ自体は害がないものですが、特定のプラットフォームではこれにより煩わしいカーネルログメッセージが現れます。
Windowsにおける子プロセス起動時設定ファイルの名前と行番号を保持します。(Tom Lane)
これまでこれらはpg_settings
ビューで正しく表示されませんでした。
psqlのコマンド履歴内で空行を含むコマンドを保持します。(Robert Haas)
これまでの動作では、例えば文字列リテラル内の空行が削除された場合に問題が起きました。
テーブルの行型など自動生成された型の間でユーザが定義したキャストをダンプするようにpg_dumpを修正しました。(Tom Lane)
PL/Perlの構築時に好みのバージョンのxsubppを使用します。 オペレーティングシステムのメインコピーである必要はありません。(David Wheeler、Alex Hunsaker)
contrib/dict_int
およびcontrib/dict_xsyn
内の間違ったコードを修正しました。(Tom Lane)
一部の関数で、palloc()
で返されるメモリはゼロ埋めされていることが保証されていると間違った前提をしていました。
pgstatindex()
において問い合わせキャンセル割込みを適切に受け付けます。(Robert Haas)
VPATH構築ですべてのサーバヘッダファイルが適切にインストールされることを確実にしました。(Peter Eisentraut)
冗長エラーメッセージ内で報告されるファイル名を短くしました。(Peter Eisentraut)
通常の構築では常にCファイルの名前だけがエラーメッセージ呼び出しの中で報告されました。 しかしこれまでVPATH構築では絶対パス名が報告されました。
中央アメリカ用のWindowsの時間帯名の解釈を修正しました。(Tom Lane)
通常中央アメリカではまったく夏時間が認められませんので、「Central America Standard Time」をCST6CDT
ではなくCST6
に対応付けしました。
タイムゾーンデータファイルをtzdata release 2011nに更新しました。 ブラジル、キューバ、フィジー、パレスチナ、ロシア、サモアにおける夏時間規則の変更、アラスカ、イギリス領東アフリカの歴史的な修正が含まれています。