リリース日: 2019-08-08
このリリースは11.4に対し、様々な不具合を修正したものです。 11メジャーリリースにおける新機能については、E.6を参照してください。
関数的キャスト構文で一時型にキャストするにはスキーマ修飾が必要となりました。 (Noah Misch)
私たちは長らく一時関数の実行に、pg_temp.
と、一時スキーマを明示的に指定することを要求してきました。
これを、例えばfunc_name
(args
)pg_temp.
のように、関数的な表記法を用いて一時型のキャストする場合も要求します。
そうでないと、一時オブジェクトを使って関数呼び出しを横取りすることが可能で、CVE-2007-2138で防止したのとほぼ同じ方法で権限昇格ができます。
(CVE-2019-10208)
type_name
(arg
)
型をまたがる比較を要する、ハッシュ化されたサブプランの実行を修正しました。 (Tom Lane, Andreas Seltenreich)
ハッシュ化されたサブプランはハッシュテーブルのエントリを比較するのに外側の問い合わせの元の比較演算子を使っていました。 演算子が型をまたがる場合、全てのハッシュテーブルエントリが副問い合わせの出力型になるので、これは誤りです。 PostgreSQL本体のハッシュテーブルの型をまたがる演算子に対してこの誤りは64ビットマシンではほぼ無害と見られますが、32ビットマシンではクラッシュや場合によっては不当なサーバメモリの露出をひき起こす可能性があります。 拡張が、より大きな危険をもたらす型をまたがるハッシュ可能な演算子を提供しているかもしれません。 (CVE-2019-10209)
一つのコマンドで複数列の型を変更するときのALTER TABLE ... ALTER COLUMN TYPE
の失敗を修正しました。
(Tom Lane)
これは直近のマイナーリリースで導入された劣化を修正します。
それは、変更された列を使用するインデックスが正しく処理されず、ALTER TABLE
実行時に奇妙なエラーをもたらすというものです。
子パーティションに保留されたトリガイベントがある場合に、パーティションテーブルのトリガの削除を防止しました。 (Álvaro Herrera)
これは特に外部キー制約に当てはまります。これらはトリガで実装されているからです。
トリガ定義をパーティションテーブルから、そのパーティションの一つにコピーするときに、ユーザに指定されたトリガ引数を含めるようにしました。 (Patrick McHardy)
パーティションキー列の削除を防止する依存性を導入しました。 (Tom Lane)
ALTER TABLE ... DROP COLUMN
はパーティションキー列である列の削除を拒絶します。
しかしながら、(キー列のデータ型の削除からのカスケードなど)間接的な削除にはこのような検査がなく、キー列の削除を許していました。
この結果、アクセスも削除もできないおそれのある、ひどく壊れたパーティションテーブルが生じました。
この修正はpg_depend
に、カスケード削除がキー列を削除させる場合に、キー列だけでなくパーティションテーブル全体が削除されること強制するエントリを加えます。
しかしながら、このようなエントリはパーティションテーブルが作られるときにしか作成されません。
しがたって、本修正は既存パーティションテーブルのリスクは除去しません。
この問題は、組み込みでないデータ型のパーティションキー列に対してしか発生しないため、大部分のユーザには無害と見られます。
パーティションテーブルとそのデフォルトパーティションの間で列番号が確実に正しくマップされるようにしました。 (Amit Langote)
例えば削除された列が片方のテーブルにだけにあるなど、マッピングが正確に1対1でない場合に、一部の操作が誤動作していました。
パーティションテーブル上にインデックスを作成するとき、外部テーブルであるパーティションを無視するようにしました。 (Álvaro Herrera)
これまでは外部テーブルのパーティションに当たるとエラーが投げられましたが、これは役に立たず、いかなる実際の問題からの保護にもなっていません。
より多くの場合にパーティションテーブルのデフォルトパーティションを除外する(すなわち、それに対する不要なスキャンを回避する)ようにしました。 (Yuzuko Hosoya)
複数のboolean
型のパーティションキー列があるときに起こりうるパーティション除外の失敗を修正しました。
(David Rowley)
対応するテーブルが継承の親であるとき、GROUP BY
の列を最適化で消さないようにしました。
(David Rowley)
通常、テーブルの主キー列がGROUP BY
に含まれていた場合、グループを一意にするのに主キー列で十分であるため、他のグルーピング列を安全に除去できます。
とはいえ、この通例は問い合わせが継承子テーブルも読む場合には機能しません。親の一意性は子には拡張されません。
準結合の問い合わせに対するパラレルハッシュ結合の不正な使用を回避しました。 (Thomas Munro)
この誤りは一部のEXISTS
問い合わせにて結果行の重複をもたらします。
GROUPING SETS
を伴う一部の問い合わせに対して、不要なソート手順を行うのを回避しました。
(Andrew Gierth, Richard Guo)
起こりうるプランナのインデックス端点確認での失敗を修正しました。 (Tom Lane)
最近に作成されたインデックスを列の最小値または最大値の決定に使うとき、プランナが実際には端点の値を含まない最近の無効タプルを選択する可能性がありました。 最悪の場合、そのタプルにはNULLが含まれるかもしれず、結果として目に見えるエラー「found unexpected null value in index(インデックスに予期せぬNULL値が見つかりました)」が生じます。たいていは単に誤った値が使われて、プラン作成での推定の品質が落ちます。
トリガの遷移テーブルへのアクセスでのEvalPlanQual
再チェック時のエラーを修正しました。
(Alex Aktsipetrov)
遷移テーブルに依存したトリガは同時更新が存在する場合、ときどき失敗しました。
外部キー制約を再作成するときに、複数列の外部キーの誤った扱いを修正しました。 (Tom Lane)
ALTER TABLE
は、キーの全列が同じ型でない場合に、外部キーの再検証が必要かどうかを誤って判断するおそれがありました。
誤りは常に安全側に起きるものと見られ、不必要な再検証が行われます。
継承ツリーに対しては拡張統計情報を作成しないようにしました。 (Tomas Vondra)
これはANALYZE
時の「tuple already updated by self(タプルは自身により既に更新済みです)」エラーを回避します。
タプルロックを格上げするときの偽性のデッドロックエラーを回避しました。 (Oleksii Kliukin)
複数トランザクションが、トランザクションT1がタプルレベルロックを解放するのを待っていて、T1がロックをより高いレベルに格上げしたとき、待機中のトランザクションの間で偽性のデッドロックがT1の終了時に報告される可能性がありました。
複数のパラレルワーカープロセスに関するデッドロック解決の失敗を修正しました。 (Rui Hai Jiang)
本バグが人工的でない問い合わせで生じるかどうか明らかではありませんが、発生したならば、バグがなければ解決可能なデッドロックに巻き込まれた問い合わせがキャンセルされるまでブロックします。
infinity
の端点を伴う日付範囲の誤った標準化を防止しました。
(Laurenz Albe)
端点が無限である場合、端点の値を増減させることで開区間を閉区間にあるいはその逆に変換しようと試みることは不適当です。そのため、このような場合には範囲をそのままにしました。
非常に大きいmoney
値をnumeric
に変換するときの小数点以下の精度の劣化を修正しました。
(Tom Lane)
BTREE_META_CLEANUP
のWALレコードの出力を修正しました。
(Michael Paquier)
バージョン2のbtreeメタページの誤った処理によるアサート失敗を防止しました。 (Peter Geoghegan)
MIPS CPU向けのスピンロックのアセンブリコードを、MIPS r6で動作するように修正しました。 (YunQiang Su)
PL/pgSQL関数から返されるレコードや行値が確実に関数で宣言された複合型で印付けされるようにしました。 (Tom Lane)
これは結果が直接テーブルに格納される場合の問題を回避します。
libpqが接続サービスファイルで復帰(\r
)を無視するようにしました。
(Tom Lane, Michael Paquier)
一部の稀な場合に、Windowsスタイルの改行を含むサービスファイルが誤って解釈されて、接続失敗をもたらす可能性がありました。
psqlで、SET
の後の誤ったタブ補完の選択肢を回避しました。
(Tom Lane)
変数
=
psqlの\d
コマンドでの小さなメモリリークを修正しました。
(Tom Lane)
カスタム演算子クラスが確実に正しい順序でダンプされるようにpg_dumpを修正しました。 (Tom Lane)
ユーザ定義opclassが、ユーザ定義の範囲型のサブタイプopclassである場合、関連するオブジェクトが誤った順序でダンプされて、リストア不能なダンプが生じました。 (潜在的なopclassの依存性処理の失敗が他のケースでも現れるかもしれませんが、これが唯一の知られているケースです。)
-R
オプションを使用するとき、pgbenchで起こりうるロックアップを修正しました。
(Fabien Coelho)
contrib/amcheck
のインデックス検証の信頼性を改善しました。
(Peter Geoghegan)
contrib/jsonb_plperl
でPerlのundef
値の処理を修正しました。
(Ivan Panchenko)
他のcheck_password_hook
のユーザと共存するようにcontrib/passwordcheck
を修正しました。
(Michael Paquier)
最近のSELinuxリリースで動作するようにcontrib/sepgsql
のテストを修正しました。
(Mike Palmiotto)
src/test/kerberos
とsrc/test/ldap
のリグレッションテストの安定性を改善しました。
(Thomas Munro, Tom Lane)
src/test/recovery
のリグレッションテストの安定性を改善しました。
(Michael Paquier)
pg_upgradeのテストスクリプトからのstderr出力を減らしました。 (Tom Lane)
Windowsで動作するようにpgbenchのリグレッションテストを修正しました。 (Fabien Coelho)
ビルドディレクトリがルート以外のmsysマウントポイントにある場合に、msysのPerlで動作するようにTAPテストを修正しました。 (Noah Misch)
Microsoft Visual Studio 2019でのPostgresビルドをサポートしました。 (Haribabu Kommi)
Visual StudioビルドでWindowsSDKVersion
環境変数を、それが設定されている場合に、尊重するようにしました。
(Peifeng Qiu)
これは一部の設定でのビルド失敗を修正します。
Visual StudioビルドでOpenSSL 1.1.0以上をサポートしました。 (Juan José Santamaría Flecha, Michael Paquier)
非GNUのmakeがトップレベルで起動されたときに、makeのオプションをgmakeに伝えられるようにしました。 (Thomas Munro)
initdbの際にlocaltime
やposixrules
をTimeZone
として選択するのを回避するようにしました。
(Tom Lane)
一部の場合にinitdbは「本物」のゾーン名に代えてこれらの人工的なゾーン名を選びました。 これら2つよりもCライブラリのタイムゾーン動作に一致する他のものを優先するようになります。
短い短縮形を持つ場合に限ってFactory
タイムゾーンを表示するようにpg_timezone_names
ビューを調整しました。
(Tom Lane)
歴史的にIANAでは、この人工的なゾーンにLocal time zone must be set--see zic manual page
といった「短縮形」を設定していました。
現代的なバージョンのtzdbデータベースは代わりに-00
を出しますが、一部のプラットフォームは歴史的フレーズの何らかを表示するようにデータを変更します。
現代的な短縮形が使われる場合に限って、このゾーンを表示するようにします。
タイムゾーンライブラリのコピーをIANA tzcode release 2019bと同期しました。 (Tom Lane)
これはインストールされたゾーンファイルのサイズを減少させるzicの新たな-b slim
オプションのサポートを追加します。
今のところこれは使用していませんが、将来は有効にするかもしれません。
タイムゾーンデータファイルをtzdata release 2019bに更新しました。ブラジルの夏時間法の変更と、香港、イタリア、パレスチナの歴史的修正が含まれます。