リリース日: 2019-02-14
このリリースは11.1に対し、様々な不具合を修正したものです。 11メジャーリリースにおける新機能については、E.5を参照してください。
起こりうるデータ破損を避けるため、fsync()
に失敗した後、デフォルトでリトライする代わりにパニックを起こすようにしました。
(Craig Ringer, Thomas Munro)
普及しているオペレーティングシステムの一部は、カーネルデータバッファを書き出せないときに、fsync()
の失敗として報告して、これを廃棄します。
fsync()
要求を再発行した場合、それが成功しても、実際にはデータは失われているのでデータベース破損の危険が持続します。
代わりにパニック状態にすることで、WALからリプレイすることができます。WALにはおそらく、このような状況で唯一残ったデータのコピーが含まれているでしょう。
これは確かに見苦しく非効率的ですが、代替策も乏しく、また、幸いこのような場合はごく稀にしか起きません。
この制御のために新たなサーバパラメータdata_sync_retryが追加されました。
このようなシナリオでカーネルがダーティデータバッファを廃棄しないと確信できる場合には、data_sync_retry
をon
に設定して以前の動作に戻すことができます。
ドキュメントの各メジャーリリースブランチのリリースノートを、そのブランチ以前の全てではなく、そのブランチむけのみ含めるようにしました。 (Tom Lane)
従来の方針でひき起こされた重複が手に負えなくなっていました。 計画ではリリースノートの完全なアーカイブはプロジェクトのWebサイトで提供しますが、各リリース内での重複は作りません。
パーティションテーブル上のINCLUDE
列を伴う一意性インデックスの処理を修正しました。
(Álvaro Herrera)
このような場合に一意性条件が適切に検査されませんでした。
パーティションテーブルのNOT NULL
制約がそのパーティション内で遵守されるようにしました。
(Álvaro Herrera, Amit Langote)
属するパーティションを切り離しするときにパーティションテーブルの制約についてカタログの状態を正しく更新するようにしました。 (Amit Langote, Álvaro Herrera)
これまでは、このような制約に対するpg_constraint
.conislocal
フィールドはおそらく不適切にfalse
のままとなっていて、制約を削除不能にしていました。
ダンプ/リストアやpg_upgraedはこの問題を補正するでしょうが、必要に応じてこのカタログのフィールドを手動補正してもよいです。
外部キー制約を持つパーティションテーブルでパーティションの付加や切り離しをするとき外部キーを強制するトリガを適切に作成または削除するようにしました。 (Amit Langote, Álvaro Herrera)
パーティションテーブルで役に立たない重複した外部キー制約の作成を回避しました。 (Álvaro Herrera)
ONLY
を使ってパーティションテーブルにインデックスが作成されたとき、パーティションが未だ無い場合に、直ちに有効であると印付けするようにしました。
(Álvaro Herrera)
そうでないと、これを有効にする方法がありません。
パーティションを切り離しするときに安全なテーブルロックレベルを使うようにしました。 (Álvaro Herrera)
以前のロックレベルは弱すぎて、そのテーブル上の同時実行のDDLを許して、悪い結果を伴う可能性がありました。
ON COMMIT DROP
とON COMMIT DELETE ROWS
をパーティションテーブルと継承子テーブルを伴うテーブルに適用する際の問題を修正しました。
パーティションテーブルへのCOPY FREEZE
を禁止しました。
(David Rowley)
これは最終的には動作するようにすべきですが、前バージョンを修正するには危険な複雑な修正が必要と考えられます。
インデックス列が「fast default」を持つとき(すなわち非NULLのデフォルト値を指定してALTER TABLE ADD COLUMN
で追加された場合)、起こりうるインデックス破損を修正しました。
(Andres Freund)
ALTER TABLE ... ALTER COLUMN TYPE
の際に「fast default」の値を正しく調整しました。
(Andrew Dunstan)
複数のバッファロックを取得するときにときに起こりうるデッドロックを回避しました。 (Nishant Fnu)
GINのバキュームと同時インデックス挿入との間でのデッドロックを回避しました。 (Alexander Korotkov, Andrey Borodin, Peter Geoghegan)
この変更は、GINポスティングツリーページの削除際にインデックスページロックの数を減らそうとするバージョン10.0で導入された性能改善を部分的に元に戻します。 これがデッドロックをもたらすものとわかったので、より精密な分析が行われるまで取り除きました。
ホットスタンバイ問い合わせとGINインデックスのページ削除のリプレイとの間のデッドロックを回避しました。 (Alexander Korotkov)
ロジカルレプリケーションでインデックスに式や述部が使われているときにクラッシュが起きうるのを修正しました。 (Peter Eisentraut)
テーブル書き換えのときにTOASTデータに対する無用で高コストなロジカルデコーディングを回避しました。 (Tomas Vondra)
同期レプリケーションが有効であるときのWAL senderの一部を停止するロジックを修正しました。 (Paul Guo, Michael Paquier)
タプル削除のWALレコードでのレプリカアイデンティティのフィールドの起こりうる誤った書き込みを回避しました。 (Stas Kelvich)
ビューや外部テーブルに対するCOPY
のとき、WALを省略する最適化の誤使用を防止しました。
(Amit Langote, Michael Paquier)
アーカイバが次にアーカイブするファイルを選ぶときにWALヒストリファイルをWALデータファイルよりも優先するようにしました。 (David Steele)
ソースとして副SELECT
を使う複数のSET
句を伴うUPDATE
でクラッシュが起こりうるのを修正しました。
(Tom Lane)
json[b]_populate_recordset()
またはjson[b]_to_recordset()
にゼロ行を与えたときのクラッシュを修正しました。
(Tom Lane)
libxml2がNULLエラーメッセージを返した場合のクラッシュを回避しました。 (Sergio Conde Gómez)
多数(およそ800以上)の列を持つテーブルに対する誤ったJITタプルでフォーミングのコードを修正しました。 (Andres Freund)
ハッシュに基づくグルーピングで生じる性能劣化とメモリリークを修正しました。 (Andres Freund)
一貫性に欠ける照合順序の割り当て処理で生じていたグルーピング関連の見せ掛けのパーサエラーを修正しました。 (Andrew Gierth)
照合順序が適用されうるデータ型の処理を含んでいるとき、一部の場合に、一致と見做すべき式が一致すると認識されませんでした。
CALL
文の引数において照合順序に敏感な式のパースを修正しました。
(Peter Eisentraut)
CALL
文の引数リストでエラーを検出した後に適切なクリーンアップを確実に行うようにしました。
(Tom Lane)
LEAST()
またはGREATEST()
に基づく比較関数がleakproofかどうかを、想定するだけでなく、検査するようにしました。
(Tom Lane)
Btree比較関数から実際の情報漏洩を起こすのは一般に困難ですが、原理的には起こりえます。
Gatherプランノードの上と下の両方に入れ子ループを伴う問い合わせの、誤ったプラン作成を修正しました。 (Tom Lane)
入れ子ループの両階層で同じ値をその右手側に渡す必要がある場合に、誤ったプランが生成されていたようです。
外部テーブルのスキャンでラテラル参照の評価を要する問い合わせの、誤ったプラン作成を修正しました。 (Tom Lane)
列比較の最初の列がインデックス列と一致し、しかし後の列は一致せず、更にそのインデックスが含められた(キーでない)列を持つときの、プランナのエラーを修正しました。 (Tom Lane)
稀な場合のマージ結合のコストの過小見積を修正しました。 (Tom Lane)
プランナは外側のキー範囲が内側のキー範囲よりも大幅に小さいときに、内側に多数の重複したキーがあってマージ結合が劣った選択になる場合でも、マージ結合を好む可能性がありました。
問い合わせが数千のインデックス利用可能な項を含むときのO(N^2)のプラン作成時間の増大を回避しました。 (Tom Lane)
大きな継承やパーティションテーブルのグループに対してプラン作成速度を改善しました。 (Amit Langote, Etsuro Fujita)
ANALYZE
の同時に更新されている行の処理を改善しました。
(Jeff Janes, Tom Lane)
これまでは、実行中のトランザクションで削除された行はANALYZE
のサンプルで無視されましたが、これは含める場合と比べてより大きい不整合をもたらすことがわかりました。
これからは、事実上ANALYZE
開始時のMVCCスナップショットに対応するようになりました。
TRUNCATE
が他セッションの一時テーブルである継承子テーブルを無視するようにしました。
(Amit Langote, Michael Paquier)
これはTRUNCATE
を他のコマンドの動作に合わせます。
これまでは、このような場合はエラーで終わってました。
正しいテーブルに対して統計カウンタを更新するようにTRUNCATE
を修正しました。
(Tom Lane)
TRUNCATEしたテーブルがTOASTテーブルを持っていた場合、TOASTテーブルのカウンタが代わりにリセットされていました。
ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
を正しく処理するようにしました。
(Greg Stark)
ホットスタンバイモードでUNLISTEN
できるようにしました。
(Shay Rojansky)
ホットスタンバイモードではLISTEN
ができないので、これは必然的に何もしない動作ですが、ダミー操作を許すことでクライアントのセッション状態リセットのロジックを簡単にします。
一部のスキーマとデータ型の許可リストで欠けていたロールの依存性を修正しました。 (Tom Lane)
一部の場合に許可を与えられているロールの削除が可能でした。 これは直ちに問題を起こすことはありませんが、その後のダンプ/リストアやアップグレードが、全て番号のロール名の権限を付与しようとする症状で失敗するでしょう。
二相トランザクションでセッションの一時スキーマの使用を防止しました。 (Michael Paquier)
このようなトランザクション内での一時テーブルへのアクセスは長らく禁止されていましたが、他の一時オブジェクトの操作で問題を起こす可能性が未だありました。
外部キー制約を追加または削除した後、リレーションキャッシュが確実に適切に更新されるようにしました。 (Álvaro Herrera)
この見逃しで、既存セッションが新たに作られた制約を強制するのに失敗する、あるいは削除された制約が強制され続けることになる可能性があります。
制約名を変更した後、リレーションキャッシュが確実に適切に更新されるようにしました。 (Amit Langote)
同時実行のホットスタンバイ問い合わせが不正な状態を参照しないように、GiSTインデックスのマイクロバキューム操作のリプレイを修正しました。 (Alexander Korotkov)
空のGINインデックスページの早すぎる回収を防止しました。これは同時実行の検索で失敗をひき起こしていました。 (Andrey Borodin, Alexander Korotkov)
浮動小数点から整数の型キャストで限界値の障害を修正しました。 (Andrew Gierth, Tom Lane)
ごくわずかに最大有効整数値を上回る値を受け入れてしまうことがあり、その結果オーバーフローして、代わりに最小整数値を生じることがありました。 また、最小または最大の整数値にまるめられるべき値が不正に拒絶されるかもしれませんでした。
pg_hba.conf
のLDAP認証のエントリで、ldapserver
パラメータでのホスト名のスペース区切りリストのパースを修正しました。
(Thomas Munro)
PAM認証要求をするとき、Unixソケット経由の接続の場合にPAM_RHOST
変数を設定しないようにしました。
(Thomas Munro)
これまではこの変数に[local]
が設定されていました。これはホスト名である前提なので全く役に立ちません。
client_min_messages
にERROR
より上を設定することを禁止しました。
(Jonah Harris, Tom Lane)
これまでは、この変数をFATAL
やPANIC
に設定することが可能でした。これはクライアントへの通常のエラーメッセージの送出を抑止する効果をもちます。
しかしながら、これはPostgreSQLのワイヤプロトコル仕様により提供される保証と相反し、また、一部のクライアントを大変に混乱させます。
リリースされたブランチでは、このような設定を代わりにERROR
を意味するものと断りなく処理するように修正されます。
バージョン12以降はこれらの選択肢を完全に拒絶します。
ecpglibがsetlocale()
よりも優先してuselocale()
や_configthreadlocale()
を使うように修正しました。
(Michael Meskes, Tom Lane)
setlocale()
はスレッドローカルではなく、また、おそらくスレッドセーフですらないので、これまでのコーディングはマルチスレッドのecpgアプリケーションで問題をひき起こしました。
ecpgのSQLDA(SQL Descriptor Area)を通して渡される数値データに対する誤った結果を修正しました。 (Daisuke Higuchi)
ゼロで始まる値が正しくコピーされませんでした。
psqlの\g
target
メタコマンドがCOPY TO STDOUT
で動作するように修正しました。
(Daniel Vérité)
これまでは、target
オプションは無視されていたため、コピーデータが常にクライアントの問い合わせ出力対象に送られていました。
psqlのLaTeX出力形式が特殊文字を適切に生成するようにしました。 (Tom Lane)
バックスラッシュと一部の他のASCIIの句読点文字が正しく生成されず、ドキュメントの構文エラーや誤った文字の出力をひき起こしました。
pgbenchで--random-seed=
が指定されたとき、乱数生成を完全に決定的でプラットフォーム独立にしました。
(Fabien Coelho, Tom Lane)
N
いくつかのプラットフォームで、特定のN
値で得られたシーケンスがおそらく本修正の前のものと異なります。
一時ファイルを適切に無視するように、pg_basebackupとpg_verify_checksumsを修正しました。 (Michael Banck, Michael Paquier)
pg_dumpで、間接的なプライマリキーへの依存を伴うマテリアライズドビューの処理を修正しました。 (Tom Lane)
これはこのようなビューのダンプアーカイブエントリに誤ったラベル付けをもたらし、「archive items not in correct section order(正しいセクション順でないアーカイブアイテム)」という無害な警告の原因となります。
--section
など、これらラベルに依存した選択的リストアのオプションでは、無害でもなく、誤動作するかもしれません。
pg_dumpがALTER INDEX SET STATISTICS
コマンドを含むようにしました。
(Michael Paquier)
インデックス式に対する統計情報ターゲットを付加できるようにしたとき、pg_dumpにそのことを教えるのを忘れていました。そのため、ダンプ/リストアでそのような設定が失われていました。
pg_dumpによるOIDを持つテーブルのダンプを修正しました。 (Peter Eisentraut)
ダンプされる最初のテーブルに適用される必要があるとき、WITH OIDS
句が無視されていました。
一部のプラットフォームにおけるpg_dumpやpg_restoreがエラーを報告しようとしたときのNULLポインタ参照によるクラッシュを回避しました。 (Tom Lane)
インライン圧縮されたデータによって生じるcontrib/amcheck
からの偽のインデックス破損の報告を防止しました。
(Peter Geoghegan)
COPY FROM PROGRAM
がプログラム出力の読み込みを早期に中止した場合に、SIGPIPE
エラーを適切に無視するようにしました。
(Tom Lane)
このケースは実際にはCOPY
で直接到達可能ではありませんが、contrib/file_fdw
を使うときに発生する可能性があります。
contrib/hstore
が8.4以前のバージョンで作られた空のhstore
値に対して正しくハッシュ値を計算するように修正しました。
(Andrew Gierth)
これまでのコーディングは、新しいバージョンで作られた空のhstore
値に対して同じ結果を返さず、ハッシュ結合やハッシュ集約で潜在的に誤った結果をひき起こします。
テーブルが元々8.4以前で格納されたデータを含むかもしれず、これまでダンプ/リロードを行っていないのであれば、hstore
列に作られた全てのハッシュインデックスを再構築するのが賢明です。
contrib/intarray
のgist__int_ops
インデックスサポートへの巨大な入力に伴うクラッシュと過大な実行時間を回避しました。
(Andrew Gierth)
configureでpython
が見つからない場合に、python3
を、続いてpython2
を探すようにしました。
(Peter Eisentraut)
これにより、バージョン無しのpython
実行ファイルをもはや提供しなくなったプラットフォームで明示的なPYTHON
の指定無しにPL/Pythonを設定できるようにします。
インストールされるヘッダファイル群にJIT関連のヘッダを含めるようにしました。 (Donald Dong)
pgxsビルドで新たなMakefile変数PG_CFLAGS
、PG_CXXFLAGS
、および、PG_LDFLAGS
に対応しました。
(Christoph Berg)
これは拡張のビルド手順のカスタマイズを簡単にします。
近年のPerlバージョンでは「.
」はサーチパスに含まれないため、Perlで書かれたビルドスクリプトをそれが含まれていると想定しないように修正しました。
(Andrew Dunstan)
OpenBSDでのサーバのコマンドラインオプションのパースの問題を修正しました。 (Tom Lane)
拡張がこれをパラレル問い合わせに対する部分パスを供給するのに使えるようにset_rel_pathlist_hook
の呼び出し位置を移動しました。
(KaiGai Kohei)
これは既存の使用ケースへの影響無いと考えられます。
タイムゾーンデータファイルをtzdata release 2018iに更新しました。カザフスタン、メトラカトラ、および、サントメ・プリンシペの夏時間法の変更が含まれます。 カザフスタンのQyzylordaゾーンは二つに分割され、一部の地域はUTFオフセットを変更しませんが、新たなゾーンAsia/Qostanayが作られました。 香港と多数の太平洋諸島の歴史的な修正があります。