リリース日: 2018-05-10
このリリースは10.3に対し、様々な不具合を修正したものです。 10メジャーリリースにおける新機能については、E.6を参照してください。
10.Xからの移行ではダンプ/リストアは不要です。
しかしながら、adminpack
拡張を使っているなら、下記の1番目の変更履歴項目にしたがって、それをアップデートするべきです。
また、2番目と3番目の変更履歴項目で言及されている誤った印付けの関数の影響があるなら、データベースカタログを補正する手順を行うのが望ましいです。
また、10.3より前のバージョンからアップグレードする場合にはE.3を参照してください。
contrib/adminpack
のpg_logfile_rotate()
関数からパブリック実行権限を取り除きました。
(Stephen Frost)
pg_logfile_rotate()
はコア関数pg_rotate_logfile()
の廃れたラッパーです。
ハードコードされたスーパーユーザ検査ではなくアクセス制御のためのSQL権限に依存するように関数が変更されたとき、pg_logfile_rotate()
も同様に更新されるべきでしたが、その必要性が見逃されました。
そのために、adminpack
がインストールされていると、任意のユーザがログファイルのローテーションを要求できてしまい、小さいセキュリティ問題が生じていました。
本アップデートをインストール後、管理者は、ALTER EXTENSION adminpack UPDATE
をadminpack
がインストールされた各データベースで実行することで、adminpack
をアップデートすべきです。
(CVE-2018-1115)
いくつかの組み込み関数での誤った変動性区分を修正しました。 (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することです。
いくつかの組み込み関数での誤ったパラレルセーフの印付けが修正されました。 (Thomas Munro, Tom Lane)
関数brin_summarize_new_values
、brin_summarize_range
、brin_desummarize_range
、gin_clean_pending_list
、cursor_to_xml
、cursor_to_xmlschema
、ts_rewrite
、ts_stat
、binary_upgrade_create_empty_extension
、pg_import_system_collations
は、パラレル非安全(parallel unsafe)と印付けされるべきでした。
これらの一部は直接データベース変更を行い、また、他はユーザから供給された同様の直接変更を行うかもしれない問い合わせを実行するためです。
これらはパラレル制限(parallel restricted)と印付けされていて、予期せぬ問い合わせエラーの危険をもたらしました。
これは新たなインストレーションでは補正された初期カタログデータにより修正されますが、既存のインストレーションは誤った印付けを含んだ状態のままとなります。
force_parallel_mode
がonになっていない限り、これら関数の実際の使用ではほとんど害は生じないと見られます。
もし問題が起きたら、手動でこれら関数のpg_proc
エントリを更新することで修正できます。
例えばALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE
と実行します。
(インストレーションの各データベース上で行う必要があることに注意してください。)
他の選択肢はそのデータベースを正しい初期データを持つバージョンに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を選択しないようにして修正しました。
パーティションテーブルへのCOPY
中に、個々のパーティションで正しくあらゆるCHECK
制約を強制するようにしました。
(Etsuro Fujita)
これまでは、パーティションテーブル全体に対して宣言された制約のみが検査されていました。
TRUE
とFALSE
をパーティション境界値として受け入れるようにしました。
(Amit Langote)
これまでは、booleanのパーティション列に文字列リテラル値だけが受け入れられました。
しかし、pg_dumpはそのような値をTRUE
やFALSE
として出力していて、ダンプ/再読み込みの失敗をもたらしていました。
パーティションキーの比較関数に対するメモリ管理を修正しました。 (Álvaro Herrera, Amit Langote)
ユーザ定義演算子クラスをパーティションキーに使っているとき、この誤りはクラッシュをもたらす可能性がありました。
パーティションテーブル内のいくつかのパーティションが同一の行型を持たず、問い合わせがそれらパーティションにタプルを挿入するとき、起こりうるクラッシュを修正しました。 (Etsuro Fujita, Amit Langote)
ANALYZE
のpg_class
.reltuples
を更新するアルゴリズムを変更しました。
(David Gould)
これまでは、ANALYZE
で実際にはスキャンされないページは、以前のタプル密度を維持していると見做されました。
ANALYZE
のサンプル取得が全体のごく一部分となる大きなテーブルにおいては、これは全体のタプル密度見積が決して大きくは変更されないことを意味し、そのため、実際にテーブルに起きていることは無視されて、reltuples
はテーブルの物理サイズ(relpages
)の変化にほぼ比例して変化していました。
これは、事実上自動バキュームを遮断するほどにreltuples
が実際より大きくなる結果としてあらわれました。
ANALYZE
のサンプルがテーブルの統計的に偏りがないサンプルと見做し(そうであるべきなので)、観測されたページ内の密度を単にテーブル全体に外挿することで、修正しました。
CREATE TABLE ... LIKE ... INCLUDING ALL
で複製されたテーブル属性の集合に拡張統計オブジェクトを含めました。
(David Rowley)
これを行うかどうかを細かに制御ができるINCLUDING STATISTICS
オプションも追加しました。
bigint
のIDENTITY列を伴うCREATE TABLE ... LIKE
を修正しました。
(Peter Eisentraut)
long
が32ビットのプラットフォーム(大部分の32ビットマシンのみならず64ビットWindowsも含まれます)で、コピーされたシーケンスパラメータが32ビットに切り捨てされていました。
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」であると誤った分別がされ、間違った結合結果をもたらす可能性がありました。
複合インデックスの列に同じテーブル列が現れ、それらインデックス列の一部だけが列の値を返すことができる演算子クラスを使うときに、起こりうる誤ったインデックスオンリースキャンプランの生成が修正されました。 (Kyotaro Horiguchi)
NULLであると証明可能なトップレベルAND
/OR
条件の副句を持つ、CHECK
制約の誤った最適化が修正されました。
(Tom Lane, Dean Rasheed)
これにより、例えば、制約による除外が、問い合わせから除外すべきでない子テーブルを除外することを許してしまうおそれがありました。
問い合わせが複数GROUPING SETS
を持ち、それらのいずれもソートによる実現ができないときのプランナのクラッシュを防止しました。
(Andrew Gierth)
一部のGROUPING SET
使用における二重解放によるエグゼキュータのクラッシュを修正しました。
(Peter Geoghegan)
遷移テーブルの自己結合の誤った実行を修正しました。 (Thomas Munro)
テーブル書き換えイベントトリガが、そのようなトリガを呼び出す可能性のあるコマンドと同時に追加された場合のクラッシュを回避しました。 (Álvaro Herrera, Andrew Gierth, Tom Lane)
準備されたトランザクションをコミットする間に、問い合わせキャンセルやセッション終了の割り込みが生じた場合の失敗を回避しました。 (Stas Kelvich)
繰り返し実行されたハッシュ結合での問い合わせの間のメモリリークを修正しました。 (Tom Lane)
可視性マップのバッファピンのメモリリークまたは二重解放の可能性があり、修正しました。 (Amit Kapila)
ページが全て可視であるという偽性の印付けを回避しました。 (Dan Wood, Pavan Deolasee, Álvaro Herrera)
これは一部タプルがロックされている(しかし削除されていない)場合に発生するおそれがありました。
問い合わせが未だ正しく動作している間、バキュームは通常そのようなページを無視し、タプルがずっと凍結されないという長期の影響が伴います。
最近のリリースではこれは、「found multixact nnnnn
from before relminmxid nnnnn
」といったエラーをひき起こすでしょう。
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)
以前はローカルと見做されていたスナップショットが共有メモリへのポインタを含んでいて、何らかの存在するセッションが切断した場合に、クライアントホスト名の列が予期せず変化することがありました。
pg_stat_activity
の情報を補助プロセスに対して正しく扱うようにしました。
(Edmund Horner)
このようなプロセスについてapplication_name
、client_hostname
、およびquery
フィールドが誤ったデータを見せるかもしれませんでした。
ispell
辞書で複合接辞の誤った処理を修正しました。
(Arthur Zakirov)
テキスト列のSP-GiSTインデックスでの照合を伴う検索(すなわち、不等演算子を使うインデックススキャン)を修正しました。 (Tom Lane)
このような検索は大部分の非Cロケールで誤った行集合を返しました。
横断値を使うSP-GiST演算子クラスでの問い合わせの間のメモリリークを防止しました。 (Anton Dignös)
SP-GiSTインデックスの初期ビルドの際にインデックスのタプル数を正しく数えるようにしました。 (Tomas Vondra)
これまでは、タプル数は元となるテーブルと同じと報告されましたが、これは部分インデックスの場合には誤りです。
GiSTインデックスのバキュームの際にインデックスタプルの数を正しく数えるようにしました。 (Andrey Borodin)
これまでは見積られたヒープタプルの数が報告されましたが、それは不正確かもしれず、部分インデックスでは確実に誤っています。
WALの継続レコードでストリーミングスタンバイが動かなくなる稀な場合が修正されました。 (Kyotaro Horiguchi)
ロジカルデコーディングでwalsenderが再起動したときに起こりうるWALデータの二重処理を回避しました。 (Craig Ringer)
ローカルとリモートのサーバで型のOIDが一致すると仮定しないようにロジカルレプリケーションを修正しました。 (Masahiko Sawada)
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以降のサーバにだけ発行されるべきです。
pg_rewindが実行中にファイルがソースサーバで削除されている場合、確実にターゲットサーバのそれらファイルを削除するようにしました。 (Takayuki Tsunakawa)
これを行うのに失敗することで、特に問題のファイルがWALセグメントである場合に、ターゲットでデータ不整合が生じる可能性がありました。
デフォルトでないテーブルスペースにあるテーブルを正しく扱うようにpg_rewindを修正しました。 (Takayuki Tsunakawa)
PL/pgSQLの整数FOR
ループでオーバーフローの扱いを修正しました。
(Tom Lane)
以前のコーディングは一部の非gccコンパイラでループ変数のオーバーフローを検知するのに失敗していて、無限ループをもたらしました。
PL/PythonのリグレッションテストをPython 3.7でパスするように修正しました。 (Peter Eisentraut)
Python 3とMSVCでビルドするときにPL/Pythonと関連モジュールのテストをサポートしました。 (Andrew Dunstan)
contrib/bloom
のインデックスの初期ビルドでのエラーを修正しました。
(Tomas Vondra, Tom Lane)
テーブルの最後のタプルがインデックスで無視される可能性があり、修正しました。 部分インデックスの場合にインデックスのタプル数を正しく数えるようにしました。
Solaris 11.4 の組み込み関数との衝突を避けるため内部のb64_encode
およびb64_decode
関数を改名しました。
(Rainer Orth)
タイムゾーンライブラリのコピーをIANA tzcode release 2018eに同期しました。 (Tom Lane)
これはzicタイムゾーンコンパイラを、負の夏時間オフセットを処理できるように修正します。 PostgreSQLプロジェクトが直ちにそのようなタイムゾーンデータを使えるようにすることはありませんが、zicはIANAから直に取得したタイムゾーンデータで使われるかもしれませんので、確実を期してここでzicをアップデートしました。
タイムゾーンデータファイルをtzdata release 2018dに更新しました。 パレスチナと南極(ケーシー基地)の夏時間法の変更に加え、ポルトガルとその植民地、エンダーベリー島、ジャマイカ、タークス・カイコス諸島、ウルグアイの歴史的修正が含まれます。