Release date: 2016-10-27
このリリースは9.6.0に対し、各種不具合を修正したものです。 9.6メジャーリリースにおける新機能については、E.17 を参照してください。
9.6.Xからの移行ではダンプ/リストアは不要です。
しかしながら、インストレーションが下記変更点の最初の2項目に書かれたバグの影響を受けている場合には、アップデート後に壊れた空き領域マップおよび/または可視性マップを修復する作業が必要になるでしょう。
リレーションの空き領域マップと可視性マップの切り捨てに関する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 で説明されています。
pg_upgradeがリレーションの可視性マップを9.6形式に書き換えたときに起こりうるデータ破損を修正しました。 (Tom Lane)
ビッグエンディアンのマシンで、新たな可視性マップのバイト列が誤った順で書かれ、完全に誤ったマップをもたらしました。 Windowsで、古いマップがテキストモードを使って読まれていて、偶然に復帰(CR)・改行(LF)と一致したバイト列を含んでいる場合に誤った結果をもたらしました。 後者のエラーは、マップファイルが誤った長さに見えるため、ほとんど常にpg_upgradeのエラーになります。
ビッグエンディアンのマシン(多くの非インテルアーキテクチャはビッグエンディアンです)を使っていて、pg_upgradeを9.6より前のリリースからのアップグレードに使っていた場合には、すべての可視性マップが不正で再生成を要すると考えるべきです。
そのためにはcontrib/pg_visibility
のpg_truncate_visibility_map()
関数を用いて各リレーションの可視性マップを切り捨ればよいです。
詳細については
https://wiki.postgresql.org/wiki/Visibility_Map_Problems
を参照してください。
INSERT ... ON CONFLICT
での自己競合する挿入には直列化のエラーを出さないようにしました。
(Thomas Munro, Peter Geoghegan)
DISTINCT
を使用する集約関数の実行で解放済みメモリ使用の危険があり、修正しました。
(Peter Geoghegan)
これはクラッシュまたは誤った問い合わせ結果をもたらすおそれがあります。
ウィンドウ関数として使用される多様型の集約の誤った扱いを修正しました。 (Tom Lane)
集約の遷移関数は、その第一引数と戻り値が状態の型でなく集約の出力の型であると知らされました。 このことは多様遷移関数のエラーまたはクラッシュを引き起こしました。
行単位セキュリティが有効なテーブルの列名リストを伴うCOPY
を修正しました。
(Adam Brightwell)
track_io_timingがonのとき、有効なXMLを出力するようにEXPLAIN
を修正しました。
(Markus Winand)
これまでXML出力形式オプションは<I/O-Read-Time>
のような文法的に無効なタグを生成していました。
これは<I-O-Read-Time>
となります。
準備されたトランザクションでのTRUNCATE
に対する統計情報の更新が修正されました。
(Stas Kelvich)
テーブルの作成または定義変更における、継承したCHECK
制約のマージでのバグを修正しました。
(Tom Lane, Amit Langote)
同一のCHECK
制約を親テーブルと子テーブルにどの順でも加えることを可能にします。
親テーブルからの有効な制約と子テーブルのNOT VALID
な制約とのマージを防止します。
そのうえ、NO INHERIT
な子の制約と継承された制約とのマージを防止します。
pg_settings
.unit
でmin_wal_size
とmax_wal_size
に実用的な値を表示するようにしました。
(Tom Lane)
jsonb_set()
で配列要素の置換を修正しました。
(Tom Lane)
対象が存在するJSON配列要素の場合、新たな値で置き換えられる代わりに削除されていました。
バッファロックの保持なしにタプル可視性をテストすることによる、とても低い確率のデータ破損を回避しました。 (Thomas Munro, Peter Geoghegan, Tom Lane)
サーバ再起動をまたいでコミットタイムスタンプを維持するようにしました。 (Julien Rouhaud, Craig Ringer)
track_commit_timestampがonのとき、クリーンなサーバ再起動の後に古いコミットタイムスタンプがアクセス不能になっていました。
サブトランザクションのWAL出力がディスクに溢れるほど大きいとき、適切に動作するようにロジカルWALデコーディングを修正しました。 (Andres Freund)
ロジカルWALでコーディングでダングリングポインタ問題を修正しました。 (Stas Kelvich)
Linuxでhuge pagesを使用しようとするとき、共有メモリ割り当て要求を実際のhuge pageサイズの倍数にまるめるようにしました。 (Tom Lane)
これにより、典型的ではないデフォルトhuge pageサイズを持つシステムでmunmap()
中に起こりうる失敗を回避します。
クラッシュリカバリの場合を除いて、ログメッセージの他には悪影響はありませんでした。
libpqで複数接続を横断してSSLコンテキストを共有をしようとしなくしました。 (Heikki Linnakangas)
特に異なる接続に異なるSSLパラメータを使おうとするとき、これは稀な場合で起きる様々なバグをもたらしました。
libpqで稀な場合のメモリリークを回避しました。 (Tom Lane)
報告された問題はPQreset()
でエラー報告がメモリリークするものですが、関連したケースがいくつかあると思われます。
pg_upgradeでライブラリがロード可能かを名前順に検査するようにしました。 (Tom Lane)
これは言語の変換モジュールから、その基となる言語とデータ型のモジュールへの拡張間の依存を処理するための回避策です。
インデックスアクセスメソッドを含む拡張に対して正しく動作するようにpg_upgradeを修正しました。 (Tom Lane)
これを可能にするため、サーバがALTER EXTENSION ADD/DROP ACCESS METHOD
に対応するように拡張されました。
この機能はアクセスメソッドの動的作成に対応した当初のパッチに含まれているべきでしたが、見落とされていました。
pg_upgradeのファイルのコピー/リンク/リライト段階におけるエラー報告を改善しました。 (Tom Lane, Álvaro Herrera)
pg_dumpを7.4より前のサーバに対して動作するように修正しました。 (Amit Langote, Tom Lane)
pg_rewindで--source-server
と--source-target
のオプションを両方指定することを禁止しました。
(Michael Banck)
pg_rewindがソースサーバ上のセッションでsynchronous_commit
をoffにするようにしました。
(Michael Banck, Michael Paquier)
これによりソースサーバが同期レプリケーションを使用していて、何らかの理由でそれが機能していないときでも、pg_rewindが動作するようになります。
pg_xlogdumpで--follow
オプションを使っているとき、新たなWALセグメントのオープンを再試行するようにしました。
(Magnus Hagander)
これはサーバの次セグメント作成における起こりうる遅れを許容します。
ロールバックされた更新の対象となっていた破損したタプルに対して正しいTIDを報告するようにcontrib/pg_visibility
を修正しました。
(Tom Lane)
単独でのPL/Pythonの並行makeが確実に成功するようにmakefileの依存を修正しました。 (Pavel Raiskup)
タイムゾーンデータファイルをtzdata release 2016hに更新しました。 パレスチナとトルコの夏時間法の変更、トルコとロシアのいくつかの地域の歴史的修正が含まれます。 南極大陸、旧ソ連、スリランカのいくつかのタイムゾーンでは数値による省略形に切り替えました。
IANAタイムゾーンデータベースはこれまで全てのタイムゾーンについて文字による省略形を提供しましたが、地元の人々の間でほとんど、あるいは全く通用していない省略形をしばしば作成していました。
IANAは英語の省略形が現実に使われている形跡がないゾーンにおいてはUTCオフセット数値を使うことを選ぶという方針に転換しようとしてるところです。
少なくともしばらくの間、PostgreSQLはタイムスタンプの入力に、このような削除された省略形を引き続き受け入れます。
しかし、それらはpg_timezone_names
ビューには現れず、出力にも使用されなくなります。
本更新ではAMT
はもはやアルメニア時間の意味で使われるものとしては現れません。
それゆえに、これをアマゾン時間すなわちUTC+4ではなくUTC-4と解釈するようにDefault
省略形セットを変更しました。