リリース日: 2017-02-09
このリリースは9.5.5に対し、各種不具合を修正したものです。 9.5メジャーリリースにおける新機能については、E.16. リリース9.5を参照してください。
9.5.Xからの移行ではダンプ/リストアは不要です。
しかしながら、インストレーションが下記変更点の最初の項目に書かれたバグの影響を受けている場合には、アップデート後に壊れたインデックスを修復する作業が必要になるでしょう。
また、9.5.5よりも前のリリースからアップグレードする場合は、E.11. リリース9.5.5を参照して下さい。
CREATE INDEX CONCURRENTLY
で作られたインデックスの破損をもたらす競合状態を修正しました。
(Pavan Deolasee, Tom Lane)
CREATE INDEX CONCURRENTLY
が前もってインデックスされていない列に依存するインデックスの作成に使われていたなら、CREATE INDEX
コマンドと同時実行するトランザクションにより挿入あるいは更新された行が誤ったインデックスエントリを受け入れるおそれがありました。
この現象が生じた疑いがあるなら、最も確実な対応はアップデート実施後に影響をうけたインデックスを再作成することです。
カタログのスキャンに使われる特別なスナップショットが早すぎるデータ除去処理により無効化されないようにしました。 (Tom Lane)
バックエンドが自身の最も古いxminを知らせるときにこのスナップショットを考慮しておらず、潜在的に同時実行のバキューム操作が未だ必要なデータを削除するのを許していました。 これは「cache lookup failed for relation 1255」(リレーション1255のキャッシュ検索に失敗しました)という一時的なエラーをもたらしていました。
BRINインデックスの誤ったWALログ出力を修正しました。 (Kuntal Ghosh)
インデックスタプルを異なるページに移動するときにBRINの「revmap」ページに対して出力されるWALレコードが誤っていました。 リプレイでインデックスの関連する部分が使えなくなり、再計算を強いられるでしょう。
ログをとらないテーブルに対する「init fork」生成を無条件にWAL出力するようにしました。 (Michael Paquier)
これまでwal_level = minimal
のときには省略されていましたが、ログをとらないテーブルがクラッシュ後に適切に空に初期化されることを保証するために、実際にはその場合でも必要でした。
Btreeインデックスのバキューム操作の再生中のスタンバイサーバ上のインターロックを減らしました。 (Simon Riggs)
この変更はこのような操作の再生で時々発生するかなりのレプリケーション遅延を回避します。
統計情報コレクタがホットスタンバイ動作中に落ちたときに、それを再起動するようにしました。 (Takayuki Tsunakawa)
ホットスタンバイフィードバックがスタンバイサーバ開始時に有効にされた場合に正しく動作するようにしました。 (Ants Aasma, Craig Ringer)
ホットスタンバイが衝突する問い合わせを待機している間、割り込みを検査するようにしました。 (Simon Riggs)
稀な場合に絶えず自動バキュームランチャーが再生成されるのを回避しました。 (Amit Khandekar)
この修正は自動バキュームが名目上offでいくつか凍結を要するテーブルがあるけれども全てのそのようなテーブルは既に自動バキュームワーカにより処理中である場合の問題を回避します。
拡張のメンバオブジェクトが削除できるときのチェックを修正しました。 (Tom Lane)
拡張のアップグレードスクリプトはメンバオブジェクトを削除できなければいけませんが、serial列のシーケンスについてできませんでした。また、他の場合でもそうなる可能性がありました。
インデックス再作成のときにALTER TABLE
がインデックスのテーブル空間の割り当てを確実に維持するようにしました。
(Tom Lane, Michael Paquier)
これまではdefault_tablespaceのデフォルト以外の設定によりインデックス破壊をもたらす可能性がありました。
ALTER TABLE ... ALTER CONSTRAINT
で外部キー制約の遅延可能性属性を変更するときのトリガ関数属性の誤った更新を修正しました。
(Tom Lane)
これは、その後に外部キーを使用する際にトリガが間違ったタイミングで発動することで奇妙なエラーをもたらしました。
参照先リレーションに対する待機中トリガイベントがあるときに外部キー制約を削除しないようにしました。 (Tom Lane)
これにより「could not find trigger NNN
」(トリガNNNが見つかりません)または「relation NNN
has no triggers」(リレーションNNNにトリガがありません)というエラーを回避します。
子テーブルが親テーブルとは異なる列の順序を持つときのALTER TABLE ... SET DATA TYPE ... USING
を修正しました。
(Álvaro Herrera)
USING
式で列の番号付けの調整に失敗して、エラーをもたらしました。
典型的には「attribute N
has wrong type」(属性Nの型が間違っています)です。
OIDを持つテーブルがOIDを持つ親テーブルとALTER TABLE ... INHERIT
を通して関連づけられているときのOID列の処理を修正しました。
(Amit Langote)
この場合、OID列は通常のユーザ列と同様に扱われるべきでしたが、そうなっておらず、後の継承の変更で奇妙な振る舞いをひき起こしていました。
新たなビューオプションを適用しようとする前にビュー問い合わせを更新するようにCREATE OR REPLACE VIEW
を修正しました。
(Dean Rasheed)
これまでは新たなオプションが古いビュー定義と矛盾するときにコマンドが失敗していました。
ALTER TEXT SEARCH CONFIGURATION
のとき、正しいオブジェクト識別を報告するようにしました。
(Artur Zakirov)
ロジカルデコーディングなどの拡張に誤ったカタログOIDが報告されていました。
特別なXIDのFrozenTransactionId
とBootstrapTransactionId
について問われたとき、コミットタイムスタンプの仕組みが失敗しないように修正しました。
(Craig Ringer)
直列化可能かを、制約違反エラーを報告する前に検査するようにしました。 (Thomas Munro)
シリアライザブルトランザクション隔離を使っているとき、同時トランザクションを原因とするいかなるエラーも直列化の失敗として表明するのが望ましく、それによりアプリケーションにリトライが成功するかもしれないという手がかりを与えます。 残念ながら、キー重複の失敗が同時挿入で引き起こされた場合には、これは確実には生じません。 本変更は、アプリケーションがトランザクションのより早くに明示的に競合するキーの存在をチェックした(そして見つからなかった)なら、このようなエラーが直列化のエラーとして報告されることを保証します。
誤って通常テーブルのreloptionと同様にビューのreloptionを使用しているのを修正しました。 (Tom Lane)
症状はINSERT ... ON CONFLICT
の対象がカスケードオプションを伴うビューであるときの偽性の「ON CONFLICT is not supported on table ... used as a catalog table」(ON CONFLICTはカタログテーブルとして使われるテーブル...ではサポートされません)エラーです。
幅の広いテーブルにON CONFLICT
を使ったときの誤った「target lists can have at most N
entries」(対象リストは最大でNエントリ持つことができます)エラーを修正しました。
(Tom Lane)
UPDATE
のソース式でのfoo
.*
の複数列の展開を防止しました。
(Tom Lane)
これは「UPDATE target count mismatch --- internal error」(UPDATE対象数が不一致です --- 内部エラー)をもたらしました。 これからは、この構文は他のコンテキストと同様に行全体の変数として解釈されます。
複数行のVALUES
コンストラクトに対して列のtypemodが精密に決定されるようにしました。
(Tom Lane)
これは、列の最初の値が決定可能なtypmod(例えばvarchar
の長さ)を持つけれど続く値は同じ制限を共有しないときに発生する問題を修正します。
ユニコード文字列の末尾における完結しないユニコードのサロゲートペアにエラーを出すようにしました。 (Tom Lane)
通常、ユニコードのサロゲート先頭文字にはユニコードのサロゲート末尾文字が続かなければなりませんが、先頭文字がユニコード文字列リテラル(U&'...'
)またはユニコード識別子(U&"..."
)の最後の文字である場合に、これについての検査が見逃されていました。
!foo
のような純粋な否定のテキスト検索問い合わせが空のtsvector
にマッチするようにしました。
(Tom Dunstan)
このようなマッチはGINインデックス検索では見つかりましたが、シーケンシャルスキャンやGiSTインデックススキャンでは見つかりませんでした。
ts_rewrite()
が非トップレベルのサブツリーを空クエリで置き換えるときのクラッシュを、防止しました。
(Artur Zakirov)
ts_rewrite()
での性能問題を修正しました。
(Tom Lane)
ts_rewrite()
の入れ子NOT演算子の扱いを修正しました。
(Tom Lane)
遷移関数としてarray_append()
を使うユーザ定義集約の速度を改善しました。
(Tom Lane)
空配列を適切に扱うようにarray_fill()
を修正しました。
(Tom Lane)
レコードの配列を処理しているときにarray_position()
またはarray_positions()
でクラッシュの可能性があり、修正しました。
(Junseok Yang)
quote_literal_cstr()
で1バイトのバッファオーバランを修正しました。
(Heikki Linnakangas)
このオーバランは入力全体がシングルクォートおよび/またはバックスラッシュで構成される場合でのみ発生します。
pg_start_backup()
とpg_stop_backup()
の複数回の呼び出しが同時に実行されないようにしました。
(Michael Paquier)
誰かがこれらの関数を並列に実行しようとしたときの、アサート失敗あるいはもっと悪い事態を回避します。
何もしないAT TIME ZONE
変換を取り除こうとする変換を無効にしました。
(Tom Lane)
これは単純化された式がインデックス条件で使われるときに誤った答えをもたらしました。
実際にはノーオペレーションではないinterval
からinterval
へのキャストを捨てないようにしました。
(Tom Lane)
一部の場合に下位のinterval
フィールドのゼロ埋めした結果になるべきキャストが誤って何もしない処理と認識され、捨てられていました。
一例はINTERVAL MONTH
からINTERVAL YEAR
へのキャストが月フィールドをクリアしないことです。
GUCパラメータ値をパラレルワーカに渡す際のバグを修正しました。 (Michael Paquier, Tom Lane)
キャッシュされたプランが外部テーブルオプションの変更により確実に無効化されるようにしました。 (Amit Langote, Etsuro Fujita, Ashutosh Bapat)
組み込み関数を使うユーザ定義キャストと変換をダンプするようにpg_dumpを修正しました。 (Stephen Frost)
アーカイブが認識できないDROP
コマンドを含む場合に--create --if-exists
を伴うpg_restoreをより分別のある振る舞いをするように修正しました。
(Tom Lane)
これは今あるバグを修正するわけではありませんが、将来pg_restoreが、後のpg_dumpバージョンで生成されたアーカイブに使用する場合の振る舞いを改善すると考えられます。
遅いI/Oがある中でのpg_basebackupのレート制限を修正しました。 (Antonin Houska)
ディスクI/Oが一時的に指定されたレート制限よりも非常に遅い場合、計算がオーバーフローして、残りの実行に対してレート制限が事実上使えませんでした。
pg_basebackupのシンボリックリンクされたサブディレクトリpg_stat_tmp
およびpg_replslot
の扱いが修正されました。
(Magnus Hagander, Michael Paquier)
WALファイルを含めたときスタンバイサーバで起こりうるpg_basebackupの失敗を修正しました。 (Amit Kapila, Robert Haas)
ドメインのチェック制約とCASE
実行にて、拡張された配列の誤操作を修正しました。
(Tom Lane)
これらのコンテキストで実行されたPL/pgSQL関数が続く操作のために保持される必要のある配列値を変更またはさらに削除する可能性がありました。
PL/pgSQL変数への割り当ての際に評価されたドメインのチェック制約のようなコンテキストでのPL/pgSQL関数の入れ子使用を修正しました。 (Tom Lane)
PL/Pythonむけに作成したPython例外オブジェクトが確実に適切にリファレンスカウントされるようにしました。 (Rafa de la Torre, Tom Lane)
これはPythonのガーベージコレクションのサイクルが起きた後にオブジェクトが使われた場合の失敗を回避します。
列名として.tupno
を持つテーブルのトリガに対応するようにPL/Tclを修正しました。
(Tom Lane)
これは(以前の文書化されていない)PL/Tclのspi_exec
およびspi_execp
コマンドの振る舞いと調和させます。
すなわち、.tupno
マジック列はその名前の真の列が無い場合だけ挿入されます。
Unix上であってもDOS形式の改行文字が~/.pgpass
ファイルで許されるようにしました。
(Vik Fearing)
この変更は同じパスワードファイルをUnixマシンとWindowsマシンとで使うのを簡単にします。
ecpgにドットで終わるファイル名が与えられた際の1バイトのバッファオーバランを修正しました。 (Takayuki Tsunakawa)
ALTER DEFAULT PRIVILEGES
に対するpsqlのタブ補完を修正しました。
(Gilles Darold, Stephen Frost)
psqlで、空または全てブランクのPAGER
環境変数設定を「ページャ無し」という意味で扱うようにしました。
(Tom Lane)
これまでは、このような設定はページャにむけようとした出力を全く見えなくしていました。
contrib/dblink
のメモリ不足などの低レベルlibpqエラーの報告を改善しました。
(Joe Conway)
接続オプションのソースとしてcontrib/postgres_fdw
外部サーバを使うとき、contrib/dblink
に無関係なサーバオプションを無視させました。
(Corey Huinker)
これまでは、外部サーバオブジェクトがlibpq接続オプションでは無いオプションを持っているなら、エラーが生じました。
contrib/pageinspect
のGINインデックスむけの関数で移植性の問題を修正しました。
(Peter Eisentraut, Tom Lane)
Windowsで環境変数の変更がデバッグオプションを有効にしてビルドされたDLLに確実に伝播するようにしました。 (Christian Ullrich)
タイムゾーンライブラリをIANA release tzcode2016jに同期しました。 (Tom Lane)
多数の問題が修正されており、最も重要なものとしては対象ディレクトリがハードリンクをサポートしない場合はタイムゾーンデータ導入に失敗していたことがあります。
タイムゾーンデータをtzdata release 2016jに更新しました。 北キプロス(新タイムゾーン Asia/Famagusta 追加)、ロシア(新タイムゾーン Europe/Saratov 追加)、トンガ、Antarctica/Casey における夏時間法の変更と、イタリア、カザフスタン、マルタ、パレスチナにおける歴史的修正、トンガにおける数値によるゾーン略記法を選択する変更が含まれます。