他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.3. リリース11.3

リリース日: 2019-05-09

このリリースは11.2に対し、様々な不具合を修正したものです。 11メジャーリリースにおける新機能については、E.6を参照してください。

E.3.1. バージョン11.3への移行

11.Xからの移行ではダンプ/リストアは不要です。

しかしながら、11.1よりも前のバージョンからアップグレードする場合には、E.5を参照してください。

E.3.2. 変更点

  • 行単位セキュリティポリシーが選択率の見積処理を通して回避されてしまうのを防止しました。 (Dean Rasheed)

    一部のプランナの選択率見積処理はユーザ定義演算子をpg_statisticから得た値に適用します。 それゆえ漏洩のある演算子により、呼び出すユーザに列を読む権限が無くとも、データ列要素の一部が漏洩する可能性があります。 CVE-2017-7484ではこれを未然に防ぐ対処をしましたが、行単位セキュリティの影響を考慮していませんでした。 列を読むSQL権限を持つけれどRLSポリシーによりいくつかの行の参照は禁じられているユーザが、漏洩のある演算子を通してこれら行内容について何らかを知るかもしれませんでした。 本修正はルールをより厳しくして、漏洩のある演算子は関連するRLSポリシーが無いときだけ統計データに適用できるようにします。 (CVE-2019-10130)

  • パーティション振り分けのエラー報告時の解放済みメモリの使用を回避しました。 (Michael Paquier)

    この誤りはクラッシュをもたらし、また、原理的にはサーバメモリ内容を露出させるのに使われる可能性があります。 (CVE-2019-10129)

  • パーティションテーブルに対するALTER TABLEがパーティションインデックスが再利用可能と判断した場合のカタログ破損を回避しました。 (Amit Langote, Tom Lane)

    例えばALTER COLUMN TYPEが物理テーブルの書き換えが必要ないと判断した場合に発生します。

  • 単一文のトランザクションでON COMMIT DROPと識別列を伴う一時テーブルが作られたときのカタログ破損を回避しました。 (Peter Eisentraut)

    一時テーブルは作成後すぐに削除されますので本ケースは実際には役に立たず、そのため本障害は見逃されました。

  • パーティションテーブルが属するパーティションよりも削除された列を多く含む場合における、ALTER INDEX ... ATTACH PARTITIONでのエラー発生を修正しました。 (Álvaro Herrera)

  • 一部の場合でパーティションの既存インデックスを新たに作成されたパーティションインデックスに付加するのに失敗するのを修正しました。 (Amit Langote, Álvaro Herrera)

    これは続くこのパーティションインデックスを使うDDLでindex ... not found in partition(インデックス...がパーティションに見つかりません)のようなエラーをもたらします。

  • パーティション問い合わせの結果リレーションに対してEPQ再チェックが実行されたときのクラッシュを回避しました。 (Amit Langote)

    これは、READ COMMITTED隔離レベルを使っていて他のセッションが同時に対象行の一部を更新しているときに発生します。

  • 削除された列を持つ複数階層のパーティションテーブルでのタプル振り分けを修正しました。 (Amit Langote, Michael Paquier)

  • 外部キー制約の初期検証の遅い処理パスがパーティションテーブルに適用されたときのエラーを修正しました。 (Hadi Moshayedi, Tom Lane, Andres Freund)

    これは(権限の問題などで)速い処理パスが使われないという稀な場合を除いて、出現しません。

  • 全てのテーブルを除外できる継承ツリーやパーティションテーブルへのUPDATEDELETEの振る舞いを修正しました。 (Amit Langote, Tom Lane)

    このような場合、RETURNINGがあるときに問い合わせが正しい出力列集合を報告せず、発動すべき文単位トリガがあるときにそれが発動しませんでした。

  • constraint_exclusiononに設定されていてパーティションディレクトリにアクセスするとき、パーティションのパーティション制約を排他検査におけるCHECK制約と同様に使用するようにしました。 (Amit Langote, Tom Lane)

    この変更は振る舞いをバージョン10のものに戻します。

  • トランザクションコミットをまたがるカーソル問い合わせを永続化しようとする間にエラーが発生したときのサーバクラッシュを回避しました。 (Tom Lane)

    プロシージャが明示的または暗黙的なカーソル(例えばPL/pgSQLのFORループ問い合わせ)をオープンしている間にコミットしようとした場合、そのカーソルは完全に実施されなければならず、トランザクションコミットが行われる前に保存されたその結果が使用可能になります。 このような処理の際に起きるエラーがクラッシュをもたらしました。

  • FOR ALL TABLESのパブリケーションがあるときに、一時テーブルとログを取らないテーブルの更新に対して誤ったエラーが投げられるのを回避しました。 (Peter Eisentraut)

    このようなテーブルはパブリケーションの対象として無視されるべきですが、いくらかのコード箇所ではそのようになっていませんでした。

  • 対象リレーションが更新可能ビューである場合に、複数のVALUES行を伴うINSERT ... VALUESコマンドでの明示的なDEFAULT要素の処理を修正しました。 (Amit Langote, Dean Rasheed)

    更新可能ビューは列にデフォルトを持たないけれども、元となるテーブルにはあるとき、単一行のINSERT ... VALUESは元となるテーブルのデフォルトを使用します。 しかしながら、複数行の場合には、常にNULLが使われました。 これを単一行の場合と同様に動作するように修正しました。

  • CREATE VIEWをゼロ列のビューを許容するように修正しました。 (Ashutosh Sharma)

    ゼロ列のテーブルを許容していることとの一貫性のため、私たちはこれを許容すべきです。 テーブルはビューに転換される可能性があるので、制限があっても代わりにゼロ列ビューが作られて、ダンプ/リストアの失敗をひき起こす可能性がありました。

  • 欠けていたCREATE TABLE IF NOT EXISTS ... AS EXECUTE ...のサポートが追加されていた。 (Andreas Karlsson)

    IF NOT EXISTSEXECUTEの組み合わせは動作すべきですが、文法で省かれていました。

  • 行単位セキュリティポリシーの式にあらわれる副SELECTが正しいユーザの権限で実行されることを保証しました。 (Dean Rasheed)

    これまでは、RLSポリシーを持つテーブルがビューを通してアクセスされた場合、その検査が本来そうあるべきビュー所有者としてではなく、ビューを呼び出したユーザとして実行されるかもしれませんでした。

  • SQL:2006以降の要求により、xmloptioncontentに設定されているとき、XMLドキュメントをxml型の有効な値として受け入れるようにしました。 (Chapman Flack)

    これまではPostgreSQLは、これを許さないSQL:2003の定義に従っていました。 しかし、これによりダンプ/リストアに、全ての有効なXMLデータを受け付けるxmloptionの設定が無いという重大な問題が生じます。 そこで、2006の定義に切り替えました。

    さらにpg_dumpはデータのリストアに際してSET xmloption = contentを出力するように変更され、有力な設定がdocumentであってもダンプ/リストアが機能することを保証します。

  • サーバの起動時の、既存の共有メモリセグメントが未だ使われているかどうかの検査を改善しました。 (Noah Misch)

    postmasterは、たとえpostmaster.pidファイルが削除されていても、未だ動作中の以前のpostmasterで生じたプロセスがあることをより良く検出するようになりました。

  • btreeインデックスのバキュームのロジックでゼロ除算の可能性があり、回避しました。 (Piotr Stefaniak, Alexander Korotkov)

    これはインデックスのクリーンアップが必要かどうかについて誤った判断をもたらします。

  • パラレルワーカのトランザクションを別トランザクションとして数えるのを回避しました。 (Haribabu Kommi)

  • GINインデックスのWALレコードの非互換性を修正しました。 (Alexander Korotkov)

    2月のマイナーリリースで適用された修正は後方互換性に十分な注意が払われておらず、そのリリースのスタンバイサーバがより以前のマイナーリリースのプライマリサーバで生成されたGINページ削除のWALレコードを読む場合に問題をもたらしました。

  • レプリケーション接続でSHOWコマンド実行中にクラッシュの可能性があり、修正されました。 (Michael Paquier)

  • ポータルから一件ずつ行を取り出すときのサーバのメモリリークを回避しました。 (Tom Lane)

  • パーティションのリレーションキャッシュの項目が再構築されるときのメモリリークを回避しました。 (Amit Langote, Tom Lane)

  • 適切な場所において、fsyncsync_file_rangeの呼び出しに対して、EINVALENOSYSのエラー結果に寛容に扱うようにしました。 (Thomas Munro, James Sewell)

    以前のファイル同期の失敗をパニックとする変更は、失敗が想定できて本質的に操作がサポートされないといういくつかの場合において過度に偏執的であることがわかりました。

  • BRINの要約操作の時にautovacuumのpg_stat_activityが正しいリレーション名を報告するようにしました。 (Álvaro Herrera)

  • GEQOが有効なときにパーティションに関する結合プランの作成を試みたときのクラッシュを回避しました。 (Tom Lane)

  • FULL外部結合の中から外に導くラテラル参照でのfailed to build any N-way joins(N-way結合の構成に失敗しました)というプランナのエラーを修正しました。 (Tom Lane)

  • 集合を返す関数が空といえるリレーションに適用される問い合わせにおけるプラン作成の誤りを修正しました。 (Tom Lane, Julien Rouhaud)

    v10では、この見過ごしは僅かに効率的でないプランを導くだけですが、v11 ではset-valued function called in context that cannot accept a set(集合値の関数が集合を受け付けない文脈で呼ばれました)のエラーをひき起こします。

  • 漏洩のある演算子にpg_statisticのデータを参照させる場合の規則を強制するときに、適切なユーザ権限を検査するようにしました。 (Dean Rasheed)

    基となるテーブルがビューを通してアクセスされているとき、漏洩のある演算子をテーブルの統計データに適用するかどうかの判断に、問い合わせを実行したユーザの権限ではなくビュー所有者の権限を考慮します。 これにより、プランナのどのデータが可視かに関する規則をエクゼキュータのものと一致させて、無駄に劣ったプランを回避します。

  • グループ化問い合わせに対するプランナのパラレル安全の検査を修正しました。 (Etsuro Fujita)

    これまでは、並列化されていた可能性のある対象リストの検査動作が無いかもしれませんでした。

  • プランナの一意性インデックスのロジックで、含められたインデックス列の処理を修正しました。 (Tom Lane)

    これにより、含められた列を伴う一意性インデックスが問い合わせ結果の一意性を証明することを認識できない結果になる可能性がありました。

  • 配列の強制式に対する誤った厳格性(STRICT)の検査を修正しました。 (Tom Lane)

    これにより、例えば、誤ったSTRICTなSQL関数のインライン化を許してしまうかもしれず、厳格性の条件が強制されない結果をもたらしました。

  • 多数の同値条件と多数の潜在的に関連する外部キー制約があるときのプラン作成を高速化しました。 (David Rowley)

  • 多数のテーブルを作るトランザクションをロールバックする際にO(N^2)性能になる問題を回避しました。 (Tomas Vondra)

  • 動的共有メモリの割り当てで稀な場合のサーバクラッシュを修正しました。 (Thomas Munro, Robert Haas)

  • 動的共有メモリの制御での競合状態を修正しました。 (Thomas Munro)

    これにより、dsa_area could not attach to segment(dsa_areaがセグメントにアタッチできません)cannot unpin a segment that is not pinned(ピンされていないセグメントをピン解除できません)のエラーが生じる可能性がありました。

  • それによりシャットダウン要求を受け取った後にホットスタンバイpostmasterがシャットダウンに失敗する可能性のある競合状態を修正しました。 (Tom Lane)

  • pg_identify_object_as_address()に無効な入力が与えられたときに起こりうるクラッシュを修正しました。 (Álvaro Herrera)

  • txid_status()で起きる可能性のあるcould not access status of transaction(トランザクションの状態にアクセスできません)エラーを修正しました。 (Thomas Munro)

  • 複数OpenSSLライブラリバージョンを混用してSCRAM認証を使おうとしたときの認証失敗を修正しました。 (Michael Paquier, Peter Eisentraut)

    libpqがOpenSSL 1.0.1以前を使っていて、サーバがOpenSSL 1.0.2以降を使っているとき、どのSASLメカニズムを使うかのネゴシエーションに失敗して、混乱させるchannel binding not supported by this build(このビルドではチャンネルバインディングはサポートされません)エラーメッセージをもたらしました。

  • エンコードされたSCRAM-SHA-256およびMD5パスワードの検証を厳格にしました。 (Jonathan Katz)

    一致する先頭の文字列を持つパスワード文字列がSCRAM-SHA-256やMD5形式で適切にハッシュ化されたものと誤認される可能性がありました。 パスワードは受け入れられますが後で使うことができません。

  • データベースエンコーディングと異なるエンコーディングを暗示するlc_time設定の処理を修正しました。 (Juan José Santamaría Flecha, Tom Lane)

    以前は、そのようなロケールで非ASCII文字を含むローカライズされた月と日の名前が予期せぬエラーや誤った出力をひき起こしていました。

  • current_logfilesファイルをサーバのデータディレクトリの他のファイルと同じパーミッションで作成するようにしました。 (Haribabu Kommi)

    これまではlog_file_modeで指定されたパーミッションが使われましたが、これはバックアップユーティリティで問題を起こすおそれがあります。

  • 単項マイナス演算子に関する誤ったoperator_precedence_warningの検査を修正しました。 (Rikard Falkeborn)

  • 浮動小数点のサーバ設定値としてNaNを禁止しました。 (Tom Lane)

  • pg_classの個々のインデックスを再構築するときにアサート失敗を回避するようにREINDEX処理を再調整しました。 (Andres Freund, Tom Lane)

  • プランナのパラメータ化されたダミーパスに対するアサート失敗を修正しました。 (Tom Lane)

  • SnapBuildInitialSnapshot()の結果に正しいテスト関数を挿入するようにしました。

    これはコアコードには無関係ですが、いくつかの拡張に影響します。

  • Windowsにおける断続的なcould not reattach to shared memory(共有メモリに再アタッチできません)でのセッション開始失敗を修正しました。 (Noah Misch)

    これまで認識されていなかった本障害の原因は、プロセスのデフォルトスレッドプールに対するスレッドのスタック作成です。 そのようなスタックが異なるメモリ領域に割り当てられるように調整しました。

  • Windowsにおけるディレクトリのスキャンでのエラー検出を修正しました。 (Konstantin Knizhnik)

    ディレクトリを読むのに権限が不足してる、といったエラーが、検出されないか、あるいは正しく報告されず、そのかわりにディレクトリが空であるかのように黙って動作していました。

  • ecpgで文法の問題を修正しました。 (Tom Lane)

    ecpgプログラムで、セミコロンの欠如がSET variable = DEFAULT(ただしSET variable TO DEFAULTではない)の誤変換をもたらし、サーバが拒絶するであろう構文的に不正な出力を生成していました。 加えて、複数の型名を列挙するDROP TYPEDROP DOMAINコマンドで、最初の型名だけが実際に処理されました。

  • CREATE TABLE ASに対するecpgの構文をサーバの構文と一致させました。 (Daisuke Higuchi)

  • ecpgのインクルードファイル名の処理で、起こりうるバッファオーバーランを修正しました。 (Liu Huailing, Fei Wu)

  • 対象データディレクトリ内の一時ファイルの削除失敗によるpg_rewindのエラーを修正しました。 (Michael Paquier)

  • pg_verify_checksumsが指定されたデータディレクトリが正しいPostgreSQLバージョンのものであるかを確認するようにしました。 (Michael Paquier)

  • contrib/postgres_fdwで、リモートのグルーピングまたは集約を使う問い合わせが、関連しない副SELECTや外部参照あるいはパラメータシンボルのSELECTリスト要素を持つときのクラッシュを回避しました。 (Tom Lane)

  • 振り分けられた行を挿入するのに選択されたリモートパーティションが、同コマンドにて後で更新されるUPDATEサブプランの対象でもあるとき、エラーを報告するようにcontrib/postgres_fdwを変更しました。 (Amit Langote, Etsuro Fujita)

    これまでは、このような状況はサーバクラッシュやUPDATEの不正な結果をもたらしていました。 このような場合に正しく動作できるようにすることは今後の課題です。

  • contrib/pg_prewarmで、何らか理由でプレウォームに失敗した場合にバックグラウンドワーカプロセスを際限なく再作成しないようにしました。 (Mithun Cy)

  • contrib/vacuumlolo_unlink()呼び出しに失敗した場合のクラッシュを回避しました。 (Tom Lane)

  • タイムゾーンライブラリのコピーをIANA tzcode release 2019aに同期しました。 (Tom Lane)

    これは、zicでのAfrica/Casablancaゾーンで誤った2440年の遷移を出力する小さなバグを直し、zicの新たな-rオプションの対応を追加します。

  • タイムゾーンデータファイルをtzdata release 2019aに更新しました。パレスチナとメトラカトラの夏時間法の変更とイスラエルの歴史的な修正が含まれます。

    Etc/UCTは、現在では一般的にタイプミスとされる略記法UCTを生成する別のゾーンである代わりに、後方互換性のあるEtc/UTCへのリンクになりました。 PostgreSQLは未だUCTを入力のゾーン略記法として受け入れますが、出力はしません。