このリリースは 9.5.8 からの修正リリース(リリース日 2017/8/31)です。
9.5.x からのアップデートではダンプ、リストアは不要です。
ただし、項目1番には追加の対処が必要です。
また、9.5.8 より前のバージョンからアップデートを行う場合は 9.5.8 に関する技術情報を参照してください。
PostgreSQL 9.5.8 から 9.5.9 への変更点
9.6.5、9.5.9、9.4.14、9.3.19、9.2.23 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。
- information_schema.table_privileges ビューに外部テーブルも含めるようになりました。 (Peter Eisentraut) (9.6)(9.5)(9.4)(9.3)(9.2)
- 失敗したトランザクションの ROLLBACK を実行しようとしている間に発生するFATAL終了(たとえば SIGTERM による終了)のクリーンアップ処理を行うようになりました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)
- FATAL終了中に生じるかもしれないアサートが削除されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)
- 検索対象の、複合型またはドメイン型に対する、範囲型またはドメイン型の列を正しく認識するように修正されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)
- 固定長リファレンス渡しのデータ型をパラレルワーカープロセスに渡すときのクラッシュが防止されました。 (Tom Lane) (9.6)
- パラレルモード(-j、--jobs オプション)で、リストアする要素の選択にリストファイルを使っている場合(-L、--use-list オプション)のpg_restore のクラッシュが修正されました。 (Fabrízio de Royes Mello) (9.6)(9.5)(9.4)(9.3)
- 付随する C変数無しの RETURNING句が扱えるように ecpg のパーサが変更されました。 (Michael Meskes) (9.6)(9.5)(9.4)(9.3)(9.2)
- Cプリプロセッサ制御行のバックスラッシュ継続を認識するようにecpg のパーサが変更されました。 (Michael Meskes) (9.6)
- Windows における PL/Perl むけコンパイラフラグの選択が改善されました。 (Tom Lane) (9.6)(9.5)(9.4)(9.3)(9.2)
- GNU make 以外の make から実行されても正しく動作するようにmake check が修正されました。 (Thomas Munro) (9.6)(9.5)
- walsenderプロセスのシャットダウンシグナルに対する応答での障害が修正されました。 (Marco Nenciarini) (9.4)
他の関連する information_schemaビューでは外部テーブルを含めていますが、このビューだけ外部テーブルを無視していました。
このビュー定義はinitdbで導入されるため、単にアップグレードするだけでは修正されません。既存のデータベースクラスタを修正するには、以下をスーパーユーザとして psqlで各データベースに対して実行してください。
BEGIN; DROP SCHEMA information_schema CASCADE; i SHAREDIR/information_schema.sql COMMIT;
SHAREDIR の部分は pg_config --sharedir コマンドで出力されるディレクトリで置換してください。
この状況はアサート失敗に陥るかもしれませんでした。アサート無しのビルドでも、このような終了は起きますが、その場合「ERROR: cannot drop active portal ...」といった予期せぬメッセージがログ出力
されていました。
複合型またはドメイン型の定義を変えるいくつかのALTERコマンドは、それらデータ型の値が何らかデータベースに格納されている場合に、これらの値を更新または検査するのに必要な基盤が欠けているため、失敗すると考えられます。
これまでは、これらの検査は関連する内側の範囲型またはドメイン型でラップされた値を見逃すおそれがあり、データ不整合を許す可能性がありました。
ドメイン型のドメイン型、複合型のドメイン型、ドメイン型の範囲型、といった組み合わせが本障害に該当するデータ型となります。
これにより ecpgプログラムは、RETURNING句をクライアントに返される値を定義するためでなく、内部(例えば CTE内など)に使う SQL構文を含むことができます。
この修正により、time_t値の幅についての矛盾する仮定に基づく PL/Perl のクラッシュが回避されます。
拡張モジュール開発者には気になるかもしれない副作用は、PostgreSQLのWindowsビルドにおいて、これからは _USE_32BIT_TIME_T がグローバルに定義されなくなることです。time_t型は PostgreSQL API定義では用いられていないため、このことが問題を起こすとは考えられません。
フラグ更新を取りこぼしていたため、シャットダウンシグナルを受けても接続しているスタンバイサーバがいる限り walsenderが稼動を続けていて、immediateモード以外のプライマリサーバのシャットダウンを妨げました。