リリース日: 2018-05-10
このリリースは9.4.17に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.52を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、1番目の変更履歴項目で言及されている誤った印付けの関数の影響があるなら、データベースカタログを補正する手順を行うのが望ましいです。
また、9.4.17より前のバージョンからアップグレードする場合にはE.35を参照してください。
いくつかの組み込み関数での誤った変動性区分を修正しました。 (Thomas Munro, Tom Lane)
関数query_to_xml
、cursor_to_xml
、cursor_to_xmlschema
、query_to_xmlschema
、およびquery_to_xml_and_xmlschema
は、ユーザから供給される不安定な操作を含むかもしれない問い合わせを実行するため、揮発性(volatile)と印付けすべきです。
これらはそうなっておらず、誤った問い合わせ最適化が行われる危険をもたらしました。
これは新たなインストレーションでは補正された初期カタログデータにより修正されますが、既存のインストレーションは誤った印付けを含んだ状態のままとなります。
これら関数の実際の使用ではほとんど害は生じないと見られますが、用心のため、手動でこれら関数のpg_proc
エントリを更新することで修正できます。
例えばALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE
と実行します。
(インストレーションの各データベース上で行う必要があることに注意してください。)
他の選択肢はそのデータベースを正しい初期データを持つバージョンにpg_upgradeすることです。
無効になったものの未バキュームのTOASTエントリと一致するTOAST値のOIDの再使用を回避しました。 (Pavan Deolasee)
一度OIDカウンタが周回すると、同じTOASTテーブルで以前に削除済みのエントリとOIDが一致するTOAST値を割り当てする可能性があります。
そのエントリが未だバキュームされていないと、「unexpected chunk number 0 (expected 1) for toast value nnnnn
(TOAST値nnnnnに対する予期せぬチャンク番号0、(1が期待された))」というエラーをひき起こします。
これは無効なエントリがVACUUM
で除去されるまで持続します。
新たなTOASTエントリを作るときにそのようなOIDを選択しないようにして修正しました。
ANALYZE
のpg_class
.reltuples
を更新するアルゴリズムを変更しました。
(David Gould)
これまでは、ANALYZE
で実際にはスキャンされないページは、以前のタプル密度を維持していると見做されました。
ANALYZE
のサンプル取得が全体のごく一部分となる大きなテーブルにおいては、これは全体のタプル密度見積が決して大きくは変更されないことを意味し、そのため、実際にテーブルに起きていることは無視されて、reltuples
はテーブルの物理サイズ(relpages
)の変化にほぼ比例して変化していました。
これは、事実上自動バキュームを遮断するほどにreltuples
が実際より大きくなる結果としてあらわれました。
ANALYZE
のサンプルがテーブルの統計的に偏りがないサンプルと見做し(そうであるべきなので)、観測されたページ内の密度を単にテーブル全体に外挿することで、修正しました。
SERIALIZABLE
またはREPEATABLE READ
トランザクション隔離で実行される同時実行のCREATE INDEX CONCURRENTLY
コマンドのデッドロックを回避しました。
(Tom Lane)
REFRESH MATERIALIZED VIEW CONCURRENTLY
の実行が遅くなる可能性があり、修正しました。
(Thomas Munro)
参照されるカーソルがインデックスオンリースキャンプランを使うときにUPDATE/DELETE ... WHERE CURRENT OF
が失敗しないように修正しました。
(Yugo Nagata, Tom Lane)
パラメータ化されたパスにプッシュされたJOIN句の誤ったプラン作成を修正しました。 (Andrew Gierth, Tom Lane)
この障害により、「filter」条件のプランであるべきときに、条件が外部結合に対する「join filter」であると誤った分別がされ、間違った結合結果をもたらす可能性がありました。
NULLであると証明可能なトップレベルAND
/OR
条件の副句を持つ、CHECK
制約の誤った最適化が修正されました。
(Tom Lane, Dean Rasheed)
これにより、例えば、制約による除外が、問い合わせから除外すべきでない子テーブルを除外することを許してしまうおそれがありました。
準備されたトランザクションをコミットする間に、問い合わせキャンセルやセッション終了の割り込みが生じた場合の失敗を回避しました。 (Stas Kelvich)
繰り返し実行されたハッシュ結合での問い合わせの間のメモリリークを修正しました。 (Tom Lane)
heap_prepare_freeze_tuple
の厳格すぎる整合性検査を修正しました。
(Álvaro Herrera)
これは、9.2以前からpg_upgradeされたデータベースで間違った「cannot freeze committed xmax」エラーになる可能性がありました。
Cで書かれた更新前実行の行トリガが「old」タプルを返すときの、ダングリングポインタ参照を防止しました。 (Rushabh Lathia)
自動バキュームワーカのスケジューリング中のロックを減らしました。 (Jeff Janes)
これまでの振る舞いは、多数のテーブルを持つデータベースで潜在的なワーカの同時実行性の大幅な損失をひき起こしました。
pg_stat_activity
のデータをローカルメモリにコピーするときに、確実にクライアントホスト名がコピーされるようにしました。
(Edmund Horner)
以前はローカルと見做されていたスナップショットが共有メモリへのポインタを含んでいて、何らかの存在するセッションが切断した場合に、クライアントホスト名の列が予期せず変化することがありました。
ispell
辞書で複合接辞の誤った処理を修正しました。
(Arthur Zakirov)
テキスト列のSP-GiSTインデックスでの照合を伴う検索(すなわち、不等演算子を使うインデックススキャン)を修正しました。 (Tom Lane)
このような検索は大部分の非Cロケールで誤った行集合を返しました。
SP-GiSTインデックスの初期ビルドの際にインデックスのタプル数を正しく数えるようにしました。 (Tomas Vondra)
これまでは、タプル数は元となるテーブルと同じと報告されましたが、これは部分インデックスの場合には誤りです。
GiSTインデックスのバキュームの際にインデックスタプルの数を正しく数えるようにしました。 (Andrey Borodin)
これまでは見積られたヒープタプルの数が報告されましたが、それは不正確かもしれず、部分インデックスでは確実に誤っています。
WALの継続レコードでストリーミングスタンバイが動かなくなる稀な場合が修正されました。 (Kyotaro Horiguchi)
ロジカルデコーディングでwalsenderが再起動したときに起こりうるWALデータの二重処理を回避しました。 (Craig Ringer)
scalarltsel
とscalargtsel
を非コアのデータ型で使用できるようにしました。
(Tomas Vondra)
大量の問い合わせ出力が収集された後にサーバエラーが報告されたときのlibpqのメモリ消費を減らしました。 (Tom Lane)
以前の出力を後でなく先に廃棄して、エラーメッセージを処理します。 一部のプラットフォーム、とりわけLinuxでは、これによりアプリケーションの以降のメモリフットプリントに違いを出すことができます。
ecpgで二重解放のクラッシュを修正しました。 (Patrick Krecker, Jeevan Ladhe)
MSVCビルドでlong long int
変数を正しく扱うようにecpgを修正しました。
(Michael Meskes, Andrew Gierth)
ダンプでリスト値になったGUC変数に対する誤った値のクォート付けを修正しました。 (Michael Paquier, Tom Lane)
local_preload_libraries
、session_preload_libraries
、shared_preload_libraries
、およびtemp_tablespaces
変数は、pg_dump出力で正しくクォート付けされませんでした。
これら変数に対する設定がCREATE FUNCTION ... SET
やALTER DATABASE/ROLE ... SET
句にあるとき、問題を起こしました。
pg_recvlogicalをv10より前のPostgreSQLに対して失敗しないように修正しました。 (Michael Paquier)
前の修正はpg_recvlogicalがサーババージョンにかかわらずコマンドを発行する動作を起こしていましたが、v10以降のサーバにだけ発行されるべきです。
PL/pgSQLの整数FOR
ループでオーバーフローの扱いを修正しました。
(Tom Lane)
以前のコーディングは一部の非gccコンパイラでループ変数のオーバーフローを検知するのに失敗していて、無限ループをもたらしました。
PL/PythonのリグレッションテストをPython 3.7でパスするように修正しました。 (Peter Eisentraut)
Python 3とMSVCでビルドするときにPL/Pythonと関連モジュールのテストをサポートしました。 (Andrew Dunstan)
Solaris 11.4 の組み込み関数との衝突を避けるため内部のb64_encode
およびb64_decode
関数を改名しました。
(Rainer Orth)
タイムゾーンライブラリのコピーをIANA tzcode release 2018eに同期しました。 (Tom Lane)
これはzicタイムゾーンコンパイラを、負の夏時間オフセットを処理できるように修正します。 PostgreSQLプロジェクトが直ちにそのようなタイムゾーンデータを使えるようにすることはありませんが、zicはIANAから直に取得したタイムゾーンデータで使われるかもしれませんので、確実を期してここでzicをアップデートしました。
タイムゾーンデータファイルをtzdata release 2018dに更新しました。 パレスチナと南極(ケーシー基地)の夏時間法の変更に加え、ポルトガルとその植民地、エンダーベリー島、ジャマイカ、タークス・カイコス諸島、ウルグアイの歴史的修正が含まれます。