リリース日: 2020-11-12
このリリースは13.0に対し、様々な不具合を修正したものです。 13メジャーリリースにおける新機能については、E.2を参照してください。
13.Xからの移行ではダンプ/リストアは不要です。
インデックス式とマテリアライズドビューの問い合わせの中でのDECLARE CURSOR ... WITH HOLDと遅延トリガの発動を防止しました。
(Noah Misch)
これは本質的に「セキュリティ制限された操作」のサンドボックス機構の抜け穴です。 テンポラリでないSQLオブジェクトの作成権限を持つ攻撃者は、任意のSQLコードをスーパーユーザとして実行するように抜け穴を拡大できました。
PostgreSQLプロジェクトは本問題を報告してくれたEtienne Stalmansに感謝します。 (CVE-2020-25695)
pg_dump、pg_restore、clusterdb、reindexdb、および、vacuumdbにおける、複雑な接続文字列のパラメータの使用方法を修正しました。 (Tom Lane)
pg_dumpとpg_restoreの-dパラメータや、列記した他のプログラムの--maintenance-dbパラメータは、単一のデータベース名ではなく複数の接続パラメータを含む「接続文字列」とすることができます。
並列処理や複数データベースの処理など、これらのプログラムが追加の接続を初期化する必要がある場合、この接続文字列は無視されて、追加接続には基本の接続パラメータ(データベース名、ホスト、ポート、ユーザ名)だけが使われました。
接続文字列にデフォルトでないSSLやGSSのパラメータなど他に何らか重要な情報が含まれている場合に、この動作は接続失敗をもたらす可能性がありました。
さらに悪いことには、接続は成功するけれども意図通りに暗号化されなかったり、意図した接続パラメータが防ぐはずだった中間者攻撃に脆弱になったりするかもしれませんでした。
(CVE-2020-25694)
psqlの\connectコマンドが接続パラメータを再利用するとき、以前の接続文字列から上書きされていないパラメータが確実に再利用されるようにしました。
(Tom Lane)
これにより、デフォルトでないSSLやGSSのオプションなど、関連するパラメータの脱落により再接続に失敗するかもしれないケースを回避します。 さらに悪いことに、再接続は成功したけれども意図通りに暗号化されなかったり、意図した接続パラメータで防ぐはずの中間者攻撃に脆弱になったりするかもしれませんでした。 ユーザが意図的に一部の接続パラメータを上書きするのでpsqlの振る舞いはより複雑ですが、これは前述のpg_dump等に対するものと大筋で同じ問題です。 (CVE-2020-25694)
psqlの\gsetコマンドが特別扱いされる変数を書き換えるのを防止しました。
(Noah Misch)
接頭辞を伴わない\gsetはサーバが示した変数を何であれ上書きします。
したがって、安全でないサーバがPROMPT1などの特別扱いされる変数を設定して、ユーザのセッションで任意シェルコードを実行できるようにする可能性がありました。
PostgreSQLプロジェクトは本問題を報告してくれたNick Cleatonに感謝します。 (CVE-2020-25696)
レプリケーションプロトコルの意図せぬ破壊を修正しました。 (Álvaro Herrera)
walsenderはSTART_REPLICATIONに対するコマンド完了イベントを2つ報告しました。
これはドキュメント記載されておらず、明らかに意図せぬものです。
それで、私たちは最近の13.0の変更が二重イベントを削除したことを知らせていませんでした。
しかしながら、walreceiverが一部のコードパスで余分なイベントを必要とすることが判明しました。
最も現実的な修正は、余分なイベントをプロトコルの一部と決定し、余分なイベント発生を復活させることです。
チェックポイント時にSLRUディレクトリが適切にfsyncされるようにしました。 (Thomas Munro)
これはオペレーティングシステムのクラッシュ後に起こりうるデータ損失を防止します。
BYPASSRLS属性を持ったユーザに対するALTER ROLEを修正しました。
(Tom Lane, Stephen Frost)
BYPASSRLS属性はスーパーユーザのみ変更することができますが、
パスワード変更などの他のALTER ROLE操作は通常のパーミッション検査に基づき可能とすべきです。
これまでのコードでは誤って、このようなロールへの全ての変更をスーパーユーザからのみに制限していました。
子テーブルがあるときにALTER TABLE ONLY ... DROP EXPRESSIONを禁止しました。
(Peter Eisentraut)
現在の実装ではこの場合について正しく扱うことができないため、当面は単にこれを禁止します。
ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGERが子テーブルに再帰しないようにしました。
(Álvaro Herrera)
これまではONLYフラグが無視されていました。
LOCK TABLEが自己参照ビューで動作するようにしました。
(Tom Lane)
これまでは無限再帰を問題とするエラーを投げていましたが、この場合を禁止する必要はないと思われます。
REINDEX CONCURRENTLYを経てもインデックスに関する統計情報を維持するようにしました。
(Michael Paquier, Fabrízio de Royes Mello)
同時実行でないインデックス再作成では既にこのような統計情報を維持するようになっていました。
REINDEX CONCURRENTLYからの誤った進行報告を修正しました。
(Matthias van de Meent, Michael Paquier)
ルールや更新可能ビューを通して依存する列が更新されたときに、GENERATED列が確実に更新されるようにしました。
(Tom Lane)
この修正は、このような場合において起こりうる列指定トリガの発動失敗にも対処しています。
照合順序に依存したパーティション境界の式でのエラーを修正しました。 (Tom Lane)
テキスト配列のハッシュ化に対応しました。 (Peter Eisentraut)
配列要素型が照合順序を適用できる場合に配列のハッシュ作成に失敗していました。 特に、これはテキスト配列の列をパーティションキーとしたハッシュパーティショニングの使用を妨げました。
異なる型の間で日付時刻を比較する際の内部オーバーフローを防止しました。 (Nikita Glukhov, Alexander Korotkov, Tom Lane)
これまでは、dateがtimestampとして有効な範囲より過去の場合、dateとtimestampとの比較はエラーになりました。 また、関連した稀な場合として、タイムゾーンのローテーションに際して限界値に近いtimestamp値のオーバーフローもありました。
to_date()とto_timestamp()でのマイナス年からBC日付への一つ違いの変換を修正しました。
(Dar Alathar-Yemen, Tom Lane)
また、マイナス年と明示的な「BC」マークとの組み合わせに対して、打ち消してADを生成するように調整しました。
jsonpathの.datetime()メソッドがISO 8601形式のタイムスタンプを受け入れできるようにしました。
(Nikita Glukhov)
これはSQLで要求されていることではありませんが、to_json()関数がJavascriptの互換性のために、このタイムスタンプ形式を生成することから適切と考えられます。
archive_modeがalwaysに設定されているとき、スタンバイサーバがWALタイムラインヒストリファイルを確実にアーカイブするようにしました。
(Grigory Smolkin, Fujii Masao)
この見落としにより、その後のPITRリカバリの試みが失敗する可能性がありました。
kqueue()を使うプラットフォームにて早すぎるpostmasterダウンの検出での境界ケースを修正しました。
(Thomas Munro)
ソートキーが揮発的な式であるときの誤ったインクリメンタルソートのプランの生成を回避しました。 (James Coleman)
GEQOのプラン作成時にパーティション同士の結合を検討したときに起こりうるクラッシュを修正しました。 (Tom Lane)
TOASTの圧縮の展開で起こりうる無限ループまたは壊れた出力データを修正しました。 (Tom Lane)
クリーンアップだけをするVACUUMのときのBツリーインデックスで項目数のカウントを修正しました。
(Peter Geoghegan)
データがBRINインデックスに挿入される前に確実にTOASTから戻すようにしました。 (Tomas Vondra)
インデックスのエントリに行外のTOASTポインタを含むことはサポートされませんが、BRINはこれを考慮していませんでした。
これにより、「missing chunk number 0 for toast value NNN(TOAST値NNNのためのチャンク番号0がありません)」のようなエラーが生じる可能性がありました。
(既存のインデックスでこのようなエラーに遭遇したなら、修正するのにREINDEXを行えばよいです。)
インデックスが付加された列を持つときに動作するように、バッファ付きGiSTインデックスの構築を修正しました。 (Pavel Borisov)
pg_hba_file_rulesビューでgetnameinfo()の移植性に欠ける使用法を修正しました。
(Tom Lane)
FreeBSD 11では、あるいは他のプラットフォームでも、このビューのaddressとnetmask列はこの誤りのために常にnullでした。
パラレルワーカを開始するときにdebug_query_stringがNULLである場合のクラッシュを回避しました。
(Noah Misch)
BEFORE ROW UPDATEトリガが、削除されたか「見つからない」列を持つテーブルの「old」行を返すときの失敗を回避しました。
(Amit Langote, Tom Lane)
この更新を抑制する方法は、「見つからない」列がNULLとして読まれることで、クラッシュや予期せぬCHECK制約エラー、あるいは、誤ったRETURNING出力をもたらす可能性がありました。
(ある列が定数ですが非NULLのデフォルト値でALTER TABLE ADD COLUMNにて追加された場合、その列は「見つからない」ものとなります。)
削除された列も同様に問題を引き起こすおそれがありました。
インクリメンタルソートの計画に対するEXPLAINの出力を、XML出力モードで正しい入れ子のタグを持つように修正しました。
(Daniel Gustafsson)
共有メモリのキューを通して非常に大きな内容を転送するときの不要なエラーを回避しました。 (Markus Wanner)
SQL言語関数でいくつかの場合における結果データ型の強制の欠落を修正しました。 (Tom Lane)
関わるデータ型によっては、これにより誤った結果やクラッシュをもたらす可能性がありました。
JITコード生成でのテンプレート関数属性の誤った扱いを修正しました。 (Andres Freund)
これはs390xでクラッシュを引き起こすことが示されていて、他のプラットフォームでも他の問題がある可能性があります。
PPCでcompare_exchangeとfetch_addの操作についてコード生成を改善しました。 (Noah Misch)
RLSポリシーに関してリレーションキャッシュのメモリリークを修正しました。 (Tom Lane)
index_get_partition()で境界条件的な場合のメモリリークを修正しました。
(Justin Pryzby)
SIGHUP処理が新たなGUC変数値は再起動なしには適用できないと判断するときの小さなメモリリークを修正しました。 (Tom Lane)
PL/pgsqlのCALL処理でメモリリークを修正しました。
(Pavel Stehule, Tom Lane)
Windowsのlibpqで、プロセスごとに一度WSAStartup()を呼び出し、WSACleanup()は全く呼び出さないようにしました。
(Tom Lane, Alexander Lakhin)
これまでは、libpqは接続開始時にWSAStartup()を呼び出し、接続をクリーンアップするときにWSACleanup()を呼び出していました。
しかしながら、WSACleanup()の呼び出しは他のプログラムの操作と干渉する可能性があることがわかりました。
特にstdoutへの期待された出力に稀に失敗することが観測されています。
この呼び出しを省略しても悪影響はないとみられるため、そのようにしました。
(これはプログラムがデータベース接続を連続して行うときのDLLロードとアンロードの繰り返しによる性能問題も取り除きます。)
Windowsでのecpgライブラリのスレッドごとの初期化ロジックを修正しました。 (Tom Lane, Alexander Lakhin)
マルチスレッド化されたecpgアプリケーションは、誤ったロックにより稀に誤動作を起こす可能性がありました。
ecpgのB'...'およびX'...'リテラルに対する誤った処理を修正しました。
(Shenhao Wang)
Windowsで、psqlがバッククォートコマンドの出力をバイナリモードでなくテキストモードで読むようにしました。 (Tom Lane)
これにより改行を適切に扱えます。
pg_dumpが拡張の設定テーブルの列ごとの情報を確実に収集するようにしました。 (Fabrízio de Royes Mello, Tom Lane)
これに失敗することで、--insertsを指定したときにクラッシュしたり、COPYを使用してテーブルのデータを再ロードするときに、(通常は正しいのですが)不十分な指定のCOPYコマンドになったりしました。
pg_upgradeが対象クラスタにテーブルスペースディレクトリが既に存在するかを検査するようにしました。 (Bruce Momjian)
contrib/pgcryptoの潜在的なメモリリークを修正しました。
(Michael Paquier)
contrib/pgcryptoでの起こりそうにない失敗ケースに対する検査を追加しました。
(Daniel Gustafsson)
最近に追加されたtimetzのテストケースを修正して、アメリカが夏時間を守っていないときにも動作するようにしました。
(Tom Lane)
タイムゾーンデータファイルをtzdata release 2020dに更新しました。フィジー、モロッコ、パレスチナ、カナダのユーコン、マッコーリー島、ケーシー基地(南極)の夏時間法の変更と、フランス、ハンガリー、モナコ、パレスチナの歴史的修正が含まれます。
タイムゾーンライブラリのコピーをIANA tzcode release 2020dに同期しました。 (Tom Lane)
これはアップストリームのzicのデフォルト出力オプションの「fat」から「slim」への変更を吸収します。
V13より前のブランチでは引き続き「fat」モードを選択するため、これは単に見た目を整えるためのものです。
この変更はstrftime()が、それが失敗しない限り、errnoを変更しないことも保証します。