リリース日: 2016-10-27
このリリースは9.4.9に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.31. リリース9.4を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、インストレーションが下記変更点の最初に書かれたバグの影響を受けている場合には、アップデート後に壊れた空き領域マップを修復する作業が必要になるでしょう。
また、9.4.6よりも前のリリースからアップグレードする場合は、E.25. リリース9.4.6を参照して下さい。
リレーションの空き領域マップと可視性マップの切り捨てに関するWAL記録を修正しました。 (Pavan Deolasee, Heikki Linnakangas)
クラッシュリカバリの際にこれらのファイルが正しくリストアされない、あるいは、スタンバイサーバで誤った書き込みがされる可能性がありました。
空き領域マップ内のでたらめな項目は、リレーション自体から切り捨てられて存在しないページへのアクセスを引き起こすおそれがあり、典型的には「could not read block XXX
: read only 0 of 8192 bytes(ブロックXXXが読み取りできません: 8192バイトのうち0バイトのみ読み取りました)」のようなエラーをもたらします。
チェックサム検査を有効にしているなら、可視性マップでのチェックサムエラーの可能性もあります。
問題があるかどうかの判断とそうであるときの修復の手順について、 https://wiki.postgresql.org/wiki/Free_Space_Map_Problems で説明されています。
ビッグエンディアンのマシンでGINインデックスの不正なWALレコードが生成されるのを修正しました。 (Tom Lane)
典型的な症状はWAL再生中の「unexpected GIN leaf action(予期せぬGINリーフアクション)」というエラーでした。
SELECT FOR UPDATE/SHARE
が、その後に中止されたトランザクションにより更新されたタプルを正しくロックするように修正しました。
(Álvaro Herrera)
9.5以降では、SELECT
は時々そのようなタプルを返すのに失敗しました。
失敗が以前のリリースで発生することは確認されていませんが、同時更新で起こる可能性があります。
CTEスキャンを伴うEvalPlanQualの再検査を修正しました。(Tom Lane)
再検査はCTEを行を返さないものと常にみなしており、これは典型的には最近更新された行の更新の失敗に繋がっていました。
副問い合わせにおけるハッシュ集約の以前の結果の不適切な繰り返しを修正しました。(Andrew Gierth)
以前に計算された集約状態値のハッシュテーブルを再利用可能か確認するテストは集約引数式に外部の問い合わせ参照が現れる可能性を無視していました。 そのような参照の値の変化により、ハッシュテーブルが再計算されることになるはずですが、そうなっていませんでした。
PRIMARY KEY
やREPLICA IDENTITY
インデックスの付いたテーブルのバルクUPDATE
での問い合わせ期間内のメモリリークを修正しました。
(Tom Lane)
track_io_timingがonのとき、有効なXMLを出力するようにEXPLAIN
を修正しました。
(Markus Winand)
これまでXML出力形式オプションは<I/O-Read-Time>
のような文法的に無効なタグを生成していました。
これは<I-O-Read-Time>
となります。
EXPLAIN
において計測されなかった時間に0を表示するのを抑制しました。(Maksim Milyutin)
特定のオプションの組み合わせでは、その組み合わせでは実際には決して計測されない時間に対して0を表示していました。
EXPLAIN
での私たちの一般的な方針は、そのようなフィールドは全く表示しないことですので、すべての場合で首尾一貫してそのようにします。
VACUUM
がテーブルを切り捨てられるよう排他テーブルロックを待っている時のタイムアウト長を修正しました。(Simon Riggs)
タイムアウトは50ミリ秒とされていましたが、実際にはたったの50マイクロ秒でした。そのためVACUUM
は意図したよりもずっと簡単に切り捨てを諦めていました。
意図していた値に設定しました。
テーブルの作成または定義変更における、継承したCHECK
制約のマージでのバグを修正しました。
(Tom Lane, Amit Langote)
同一のCHECK
制約を親テーブルと子テーブルにどの順でも加えることを可能にします。
親テーブルからの有効な制約と子テーブルのNOT VALID
な制約とのマージを防止します。
そのうえ、NO INHERIT
な子の制約と継承された制約とのマージを防止します。
numeric_in()
とnumeric_recv()
が受け付ける値に関する人為的な制限を取り除きました。
(Tom Lane)
格納書式の制限(1e100000
以上)までの数値を許していますので、numeric_in()
が科学的表記法で1000より大きな指数を拒否するのはかなり意味のないことと思われます。
同様にnumeric_recv()
が入力値として1000桁より大きなものを拒否するのも馬鹿げたことでした。
バッファロックの保持なしにタプル可視性をテストすることによる、とても低い確率のデータ破損を回避しました。 (Thomas Munro, Peter Geoghegan, Tom Lane)
サブトランザクションのWAL出力がディスクに溢れるほど大きいとき、適切に動作するようにロジカルWALデコーディングを修正しました。 (Andres Freund)
ロジカルWALデコーディングでバッファオーバーリードを修正しました。(Tom Lane)
タプル更新レコードのロジカルデコーディングで23バイト余分に読み込んでいました。これは普通は害のないものですが、非常に運の悪い場合にはクラッシュという結果になる可能性がありました。
1GBよりも大きな一時リレーションを切り捨てる時のファイルディスクリプタのリークを修正しました。(Andres Freund)
スタンドアローンのバックエンドをstandby_mode
をオンにして開始できないようにしました。(Michael Paquier)
WALデータを取得して処理するWALレシーバがありませんので、これは全く有用ではありません。この状況を考慮して設計されていないコードで誤った動作をする可能性がありました。
以前使われていたスロットをリサイクルする時にレプリケーションスロットを適切に初期化します。(Michael Paquier)
スロットのフィールドをすべてはリセットしないこの失敗は、VACUUM
がデッドタプルを削除するのを妨げる可能性がありました。
Linuxでhuge pagesを使用しようとするとき、共有メモリ割り当て要求を実際のhuge pageサイズの倍数にまるめるようにしました。 (Tom Lane)
これにより、典型的ではないデフォルトhuge pageサイズを持つシステムでmunmap()
中に起こりうる失敗を回避します。
クラッシュリカバリの場合を除いて、ログメッセージの他には悪影響はありませんでした。
動的共有メモリ制御セグメントのIDに、よりランダムな値を使います。(Robert Haas, Tom Lane)
以前は、random()
から取得していましたが、srandom()
が呼ばれていませんでしたので、毎回同じ値が選ばれていました。
比較的害はありませんが、これは意図した振る舞いではありません。
Windowsで、アクセス拒否エラーの後、動的共有メモリ制御セグメントの生成を再度試みます。(Kyotaro Horiguchi, Amit Kapila)
セグメントが存在する場合、Windowsは時々ERROR_ALREADY_EXISTS
ではなくERROR_ACCESS_DENIED
を返します。
後者は回復不能なエラーと考えられていますので、これはpostmasterの開始失敗に繋がりました。
libpqで複数接続を横断してSSLコンテキストを共有をしようとしなくしました。 (Heikki Linnakangas)
特に異なる接続に異なるSSLパラメータを使おうとするとき、これは稀な場合で起きる様々なバグをもたらしました。
libpqで稀な場合のメモリリークを回避しました。 (Tom Lane)
報告された問題はPQreset()
でエラー報告がメモリリークするものですが、関連したケースがいくつかあると思われます。
ecpgの--help
と--version
オプションが他の実行ファイルと首尾一貫して動作するようにしました(Haribabu Kommi)
pgbenchの平均レイテンシの計算を修正しました。 (Fabien Coelho)
\sleep
コマンドがスクリプトに入っている場合やテストの期間が総時間ではなくトランザクション数で指定されていた場合、計算は正しくありませんでした。
pg_dumpでは、範囲コンストラクタ関数を決してダンプしません。 (Tom Lane)
この見過ごしにより、pg_upgradeはコンストラクタ関数を重複して生成していたため範囲型を含む拡張で失敗していました。
pg_xlogdumpで--follow
オプションを使っているとき、新たなWALセグメントのオープンを再試行するようにしました。
(Magnus Hagander)
これはサーバの次セグメント作成における起こりうる遅れを許容します。
2ページ以上に渡る連続レコードで始まるWALファイルをpg_xlogdumpが処理できるよう修正しました。(Pavan Deolasee)
shared_buffers
が256GBを超える場合にもcontrib/pg_buffercache
が動作するよう修正しました。(KaiGai Kohei)
-e
オプションが指定された場合にcontrib/intarray/bench/bench.pl
がEXPLAIN
の結果を表示するよう修正しました。
(Daniel Gustafsson)
拡張のテストで利用できるようTAPテスト基盤をインストールします。(Craig Ringer)
PostgreSQLが--enable-tap-tests
付きで構築された場合、「make install」はPGXSが見つけられる場所にTAPテストのためのPerlサポートファイルをインストールするようになりました。
これにより非コア拡張が余計なテストなしで$(prove_check)
を使えるようになります。
MSVCビルドでは、pg_recvlogicalをクライアントのみのインストールに含めます。(MauMau)
最近のWindowsのバージョンで追加されたタイムゾーン名を認識するようWindowsのタイムゾーンのマッピングを更新しました。(Michael Paquier)
廃止された動的タイムゾーン省略形での失敗を防止します。(Tom Lane)
参照されるタイムゾーンに動的タイムゾーン省略形が一致するものがない場合に、タイムゾーン名と同じであると扱います。
これは、IANAがタイムゾーンデータベースから省略形を削除した場合に発生する予期せぬ失敗を回避します。削除はtzdata release 2016fで行なわれましたし、また、将来再び行なわれる可能性が高いです。
結果は個々の省略形の分別だけに限定されません。ミスマッチによりpg_timezone_abbrevs
ビューが完全に失敗します。
タイムゾーンデータファイルをtzdata release 2016hに更新しました。 パレスチナとトルコの夏時間法の変更、トルコとロシアのいくつかの地域の歴史的修正が含まれます。 南極大陸、旧ソ連、スリランカのいくつかのタイムゾーンでは数値による省略形に切り替えました。
IANAタイムゾーンデータベースはこれまで全てのタイムゾーンについて文字による省略形を提供しましたが、地元の人々の間でほとんど、あるいは全く通用していない省略形をしばしば作成していました。
IANAは英語の省略形が現実に使われている形跡がないゾーンにおいてはUTCオフセット数値を使うことを選ぶという方針に転換しようとしてるところです。
少なくともしばらくの間、PostgreSQLはタイムスタンプの入力に、このような削除された省略形を引き続き受け入れます。
しかし、それらはpg_timezone_names
ビューには現れず、出力にも使用されなくなります。
本更新ではAMT
はもはやアルメニア時間の意味で使われるものとしては現れません。
それゆえに、これをアマゾン時間すなわちUTC+4ではなくUTC-4と解釈するようにDefault
省略形セットを変更しました。