他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 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. リリース16.2 #

リリース日: 2024-02-08

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

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

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

しかしながら、同時更新中にGINインデックスの破損を引き起こす可能性があるバグが1件修正されました。 このような破損が疑われる場合は、この更新をインストールした後で、影響を受けるインデックスを再作成してください。

また、16.1より前のバージョンからアップグレードする場合は、E.4を参照してください。

E.3.2. 変更点 #

  • REFRESH MATERIALIZED VIEW CONCURRENTLY内のセキュリティ制限を強化しました。 (Heikki Linnakangas)

    同時リフレッシュコマンドの1つのステップが弱いセキュリティ制限の下で実行されていました。 マテリアライズドビューの所有者がスーパーユーザまたは他の高い権限を持つユーザに、そのビューに対して同時リフレッシュを実行するよう説得できる場合、そのビューの所有者がREFRESHを実行しているユーザの権限で実行されるコードを制御できました。 ユーザが決定したすべてのコードが、期待どおりにビューの所有者として実行されるよう修正しました。

    このエラーに対する唯一の既知のセキュリティ上の弱点はPostgreSQL16.0以降では動作しないため、v16は実際には脆弱ではない可能性があります。

    PostgreSQLプロジェクトは、本問題を報告してくれたPedro Gallegosに感謝します。 (CVE-2024-0985)

  • JITインライン化を実行する時のメモリリークを修正しました。 (Andres Freund, Daniel Gustafsson)

    多数のJITコンパイルの後に、バックエンドプロセスがメモリ不足の状態に陥るという複数の報告がありました。 この修正により、この問題が解決されます。

  • 不正なパーティション結合のプランが生成されないようにしました。 (Richard Guo)

    LATERAL参照を含む一部の特殊な状況では、誤ったプランが作成される可能性がありました。 影響を受ける問い合わせは、間違った答えを出したり、variable not found in subplan target listなどの奇妙なエラーを出したり、エグゼキュータのクラッシュしたりする可能性がありました。

  • PlaceHolderVars内の副問い合わせ出力式の不正なラッピングを修正しました。 (Tom Lane)

    これにより、副問い合わせが外部結合の下にあり、出力列が外部結合の範囲外にあるものをLATERAL参照している場合の不正な結果が修正されます。 出力列は、外部結合の動作により、NULLとして表示されるはずなのにNULLとして表示されないことがありました。

  • ウィンドウ関数の実行条件の誤った処理を修正しました。 (Richard Guo)

    この見落としにより、WindowFunc not found in subplan target listsエラーが発生する可能性がありました。

  • Memoizeプランの内側の一意性検出を修正しました。 (Richard Guo)

    この間違いによりcache entry already completeというエラーが発生する可能性がありました。

  • 定数畳み込みフィールド選択時のnullingrelsの計算を修正しました。 (Richard Guo)

    これを行わないと、wrong varnullingrels (b) (expected (b 3)) for Var 2/2のようなエラーが発生しました。

  • MERGEによるパーティション間の更新が発生する場合に、不適切なアクションをおこなわないようにしました。 (Dean Rasheed)

    パーティションテーブルでMERGE UPDATEアクションを実行するとき、パーティションキー列の変更によりUPDATEDELETEINSERTに変わった場合、AFTER UPDATE ROWトリガの起動や、RLSチェックなどの他のUPDATE後アクションの起動をスキップします。 これらのアクションは通常失敗するため、通常のUPDATEではこのような場合にこれらを行いません。 MERGEもそうすべきではありません。

  • パーティションにまたがるMERGEの更新でBEFORE ROW DELETEトリガを処理するようにしました。 (Dean Rasheed)

    このようなトリガがNULLを返すことで更新を阻止しようとした場合、MERGEはエラーかアサーションエラーを引き起こしてました。

  • BEFORE ROW UPDATEトリガで、固定されていないバッファへのアクセスを防止しました。 (Alexander Lakhin, Tom Lane)

    更新中のタプルが別のセッションによって更新されてから別のページに移動された場合、バッファ上の固定されていない新しいタプルバージョンからデータをフェッチしようとする狭い期間がありました。 これにより、原理的には提案された新しいタプルの更新されていない列にガベージデータが表示される可能性がありました。 しかし、実際に問題が発生する可能性はかなり低いと見られます。

  • パラレルハッシュ結合で、サイズが大きすぎる共有メモリ領域を要求しないようにしました。 (Thomas Munro, Andrei Lepikhov, Alexander Korotkov)

    制限値が大きすぎるため、予想されるハッシュテーブルのサイズが十分に大きい場合にinvalid DSA memory alloc request sizeエラーが発生する可能性がありました。

  • 一時テーブルを拡張しようとしてエラーが発生する場合のローカルバッファ状態の破損を修正しました。 (Tender Wang)

  • 複数の引数を持つDISTINCTが指定された集約を評価する際の間違ったタプルスロットの使用を修正しました。 (David Rowley)

    この間違いは、attribute 1 of type record has wrong typeといったエラーにつながる可能性がありました。

  • 外部キー強制トリガによって更新されるタプルが追加の可視性クロスチェックに失敗した場合、heap_update()heap_delete()でのアサーションエラーを回避します。 (Alexander Lakhin)

    このエラーは、非アサートビルドには影響しませんでした。

  • BRINブルーム演算子クラスのfalse_positive_rateパラメータに関する過度に厳密なアサーションを修正しました。 (Alexander Lakhin)

    このエラーは、非アサートビルドにも影響しませんでした。

  • 複雑な継承ツリーでのALTER TABLE ADD COLUMNの際に起こりうるエラーを修正しました。 (Tender Wang)

    もし、孫テーブルが複数の中間の親テーブルを介して新しい列を継承する場合、コマンドはtuple already updated by selfというエラーで失敗していました。

  • ALTER TEXT SEARCH CONFIGURATION ... MAPPINGコマンドでトークン名が重複する問題を修正しました。 (Tender Wang, Michael Paquier)

  • DROP ROLEで重複したロール名を指定した場合について修正しました。 (Michael Paquier)

    以前は、これによりtuple already updated by selfエラーが発生していました。 代わりに、重複を無視するようにしました。

  • DROP STATISTICSの実行中に、関連するテーブルを適切にロックするようにしました。 (Tomas Vondra)

    ロックの取得に失敗すると、ANALYZEと同時にDROPが実行された場合にtuple concurrently deletedエラーが発生する可能性がありました。

  • GENERATED式とDEFAULT式での関数の揮発性検査を修正しました。 (Tom Lane)

    これらの場所では、デフォルト引数式への揮発性関数の挿入を検出できなかったり、多様関数が実際には対象のデータ型では不変であるにもかかわらず揮発性であると判断したりする可能性がありました。 これにより、GENERATED句を不適切に拒否または受け入れたり、ALTER TABLE ADD COLUMNの定数デフォルト値の最適化が誤って適用されたりする可能性がありました。

  • フィールドをTOASTから展開する時に新しいカタログキャッシュエントリが古くなったことを検出します。 (Tom Lane)

    カタログキャッシュに挿入する前に、カタログタプル内の任意の行外フィールドを展開します。 これは、カタログキャッシュエントリが無効になる可能性があるデータベースアクセスを伴いますが、新しいエントリはまだキャッシュにないので、無効化すべき必要があることに気づかないでしょう。 その結果、既に古いキャッシュエントリが作成され、永続化されるかもしれない競合状態が発生します。 これは、予測が困難な誤動作を引き起こすことになります。 TOAST展開後にタプルの可視性を再確認することで修正します。

  • 一部のプラットフォームでのエッジケースの整数オーバーフロー検出不具合を修正しました。 (Dean Rasheed)

    0 - INT64_MINの計算はオーバーフローエラーとなるべきで、ほとんどのプラットフォームではそのようになっていました。 しかし、組み込みの整数オーバーフローも128ビット整数もないプラットフォームでは、オーバーフローを検出できず、代わりにINT64_MINを返していました。

  • timestamp型にinterval型を加算または減算するときに、ユリウス日付のオーバーフローを検出します。 (Tom Lane)

    範囲外エラーが発生するはずのいくつかのケースで、代わりに誤った結果が生成されていました。

  • interval_mul()interval_div()でオーバーフローの検査をさらに追加しました。 (Dean Rasheed)

    範囲外エラーが発生するはずのいくつかのケースで、誤った結果が生成されていました。

  • scram_SaltedPassword()関数を割り込み可能にしました。 (Bowen Shi)

    大きなscram_iterationsの値では、この関数の実行に長い時間がかかる可能性がありました。 問い合わせのキャンセル要求によって中断できるようにしました。

  • stats_fetch_consistencyの変更後にキャッシュされた統計情報を破棄するようにしました。 (Shinya Kato)

    一部のコードパスで、古い統計情報が返される可能性がありました。

  • pg_file_settingsビューで、backendまたはsuperuser-backendコンテキストの設定に対して、未適用の値の有効性を検査するようにしました。 (Tom Lane)

    無効な値は意図したようにビューに記録されませんでした。 これらのグループには設定がほとんどないため、この問題は検出されませんでした。

  • 既存のインデックスを新しいパーティションインデックスと一致させる場合に、照合順序も一致させます。 (Peter Eisentraut)

    以前は、パーティションキーの対応する要素と異なる照合順序を持つインデックスを受け入れることができ、誤動作につながる可能性がありました。

  • パーティションインデックスに対するREINDEX INDEXで、子インデックスが同時に削除された場合のエラーを回避します。 (Fei Changhong)

  • GINインデックスの内部ページの不完全な分割をクリーンアップする際の不十分なロックを修正しました。 (Fei Changhong, Heikki Linnakangas)

    このコードは、バッファの排他ロックではなく共有ロックを使用してこれを行おうとしました。 このため、2 つのプロセスが同時にクリーンアップを試みた場合に、インデックスが壊れる可能性がありました。

  • GINインデックスの挿入におけるバッファピンの早期解放を回避しました。 (Tom Lane)

    インデックスのルートページの分割が、自身の挿入と同時に起こった場合、コードはbuffer NNNN is not owned by resource ownerで失敗する可能性がありました。

  • パーティションテーブルに対するSP-GiSTインデックスのエラーを回避しました。 (Tom Lane)

    この種のインデックスを使用しようとすると、No such file or directoryエラーが発生する可能性がありました。

  • ラージオブジェクトの所有者検査を修正しました。 (Tom Lane)

    所有者権限を必要とするラージオブジェクト操作は、スーパーユーザによって実行されない限り、unrecognized class ID: 2613で失敗していました。

  • ラージオブジェクトの所有者変更の報告を修正しました。 (Tom Lane)

    何も実行されないALTER LARGE OBJECT OWNERコマンド(すなわち、既存の所有者を選択するコマンド)は、間違ったクラスIDをPostAlterHookに渡したため、そのフックを使用する拡張機能を混乱する可能性がありました。

  • EXPLAIN (BUFFERS)でのI/Oタイミングデータの報告を修正しました。 (Michael Paquier)

    shared/localとラベル付けされた数値は実際には共有バッファのみを参照するため、ラベルをsharedに変更しました。

  • CREATE DATABASEの耐久性を保証します。 (Noah Misch)

    CREATE DATABASEの実行中またはその直後にオペレーティングシステムのクラッシュが発生した場合、リカバリが失敗したり、新しいデータベースへの後続の接続が失敗したりする可能性がありました。 その時間帯にベースバックアップが取られた場合、バックアップを使用しようとすると同様の問題が発生する可能性がありました。 症状は、データベースディレクトリ、PG_VERSIONファイル、またはpg_filenode.mapファイルが存在しないか、空であることでした。

  • バックアップからのリカバリ開始時と終了時に、LOGメッセージをより多く出すようにしました。 (Andres Freund)

    この変更により、リカバリの問題の診断に役立つ追加情報がpostmasterログに提供されます。

  • スタンバイサーバがサブトランザクション中にデッドインデックスタプルを誤って処理しないようにしました。 (Fei Changhong)

    サブトランザクションのstartedInRecoveryフラグが正しく設定されていませんでした。 これは、デッドインデックスタプルの処理にのみ影響します。 これにより、サブトランザクション内の問い合わせが、返すべきインデックスエントリを無視したり(プライマリサーバでは既にデッドになっているが、スタンバイトランザクションではまだデッドになっていない場合)、プライマリでまだデッドになっていないインデックスエントリを早まってデッドとマークしたりする可能性がありました。 後者の場合に重大な結果が生じるかどうかは明らかではないが、意図された動作ではありません。

  • walreceiverプロセスのシグナル処理を修正しました。 (Heikki Linnakangas)

    レプリケーション接続確立の待機中に、walreceiversがSIGTERMに応答しないようにする変更を元に戻しました。

  • レコードがWALデコードバッファに収まるかどうかの検査での整数オーバーフローの危険性を修正しました。 (Thomas Munro)

    この不具合は、64ビットプラットフォーム上で32ビットPostgreSQLビルドを実行する場合を除き、潜在的なものにすぎないようです。

  • 論理レプリケーション適用ワーカー、そのテーブル同期ワーカー、およびサブスクリプションを変更しようとするセッションプロセス間のデッドロックを修正しました。 (Shlok Kyal)

    デッドロック・ループの一方のエッジにはロック待機が含まれていなかったため、デッドロックは検出されず、手動で介入するまで持続しました。

  • pgoutput論理レプリケーションプラグインによって列のデフォルト値が正しく転送されるようにしました。 (Nikhil Benesch)

    新しい列にデフォルトの定数値を持つALTER TABLE ADD COLUMNは、既存のタプルの書き換えを回避し、代わりに読み取りコードがその列を欠いたタプルに正しいデフォルトを挿入することを期待していました。 その後、テーブルでレプリケーションが開始された場合、pgoutputはそのような列の正しいデフォルトの代わりにNULLを送信したため、サブスクライバで誤ったレプリケーションを引き起こしていました。

  • 列のないテーブルに対する論理レプリケーションの初期同期の失敗を修正しました。 (Vignesh C)

    このケースでは、不適切な形式のCOPYコマンドが生成されていました。

  • 使用前にサブスクリプションの接続文字列を再検証します。 (Vignesh C)

    これは、パスワードなしでサブスクリプションが作成された(スーパーユーザに許可されている)が、その後、サブスクリプションの所有者がスーパーユーザ以外に変更された場合を検出することを目的にしています。

  • 新しいクライアントがサーバのパスワードチャレンジに応答せずに接続を切断した場合に正しいステータスコードを返すようにしました。 (Liu Lang, Tom Lane)

    場合によっては、これをログに記録可能なエラーとして処理しますが、これは意図したものではなく、psqlのような一般的なクライアントが頻繁に行うため、ログスパムを生成する傾向がありました。 また、ClientAuthentication_hookを使用する拡張も混乱させる可能性がありました。

  • OpenSSL 3.2との非互換性を修正しました。 (Tristan Partin, Bo Andreson)

    dataフィールドを使用しても問題ないと仮定するのではなく、プライベートストレージにBIOのapp_dataフィールドを使用します。 この間違いは以前は問題を引き起こさなかったが、3.2ではクラッシュや二重解放に関するエラーを引き起こしていました。

  • OpenSSLがエラー時にerrnoを設定しないことについて、より注意するようにしました。 (Tom Lane)

    errnoが設定されていない場合、報告された失敗の原因はEOFの読み込みであると想定していました。 これにより、could not accept SSL connection: Successのような奇妙なエラーレポートの稀なケースが修正されます。

  • 外部データラッパーのForeignAsyncRequest関数が失敗したときのファイル記述子のリークを修正しました。 (Heikki Linnakangas)

  • CREATE SUBSCRIPTIONの接続文字列検証における軽微なメモリリークを修正しました。 (Jeff Davis)

  • ファイル関連のシステムコールによるENOMEMエラーをERRCODE_INTERNAL_ERRORではなくERRCODE_OUT_OF_MEMORYとして報告するようにしました。 (Alexander Kuzmenkov)

  • PL/pgSQLで、SQL標準本体を持つCREATE FUNCTION/CREATE PROCEDUREをサポートしました。 (Tom Lane)

    以前は、関数本体にセミコロンがあるため、このようなケースは解析エラーで失敗していました。

  • パイプライン内のlibpqのエラー処理を修正しました。 (Álvaro Herrera)

    問い合わせの問題以外の理由でエラーが返された場合(たとえば、接続が失われた場合)、パイプラインの状態が同期しなくなる可能性があります。 これにより、呼び出し側アプリケーションでビジーループが発生する可能性がありました。

  • libpqPQsendFlushRequest()関数を、他のPQsend関数と同じ規則に従って、クライアント出力バッファをフラッシュするようにしました。 (Jelte Fennema-Nio)

    パイプラインモードでは、引き続きPQflush()を呼び出す必要がある場合がありますが、この変更により、一部の不整合が解消されます。

  • libpqが2つの異なるスレッドでOpenSSLサポートを同時に初期化する場合の競合状態を回避します。 (Willi Mann, Michael Paquier)

  • GSSAPIデータ送信におけるタイミング依存の障害を修正しました。 (Tom Lane)

    非ブロッキングモードでGSSAPI暗号化を使用すると、libpqGSSAPI caller failed to retransmit all data needing to be retriedというエラーを返すことがありました。

  • postgresql.conflc_xxxパラメータのエントリを常にコメント解除するようinitdbを変更しました。 (Kyotaro Horiguchi)

    initdbはv16より前はこの方法で動作していましたが、現在は再びこの方法で動作するようになりました。 以前の変更により、initdb--no-localeオプションがlc_messagesに意図した効果を及ぼさなくなっていました。

  • pg_dumpでは、拡張メンバオブジェクトのRLSポリシーやセキュリティラベルをダンプしません。 (Tom Lane, Jacob Champion)

    以前は、これらのプロパティを設定するためのコマンドがダンプに含まれていましたが、これらは拡張の内部的な問題と考えるべきでまったく正しくありませんでした。 さらに、復元するユーザーにはそれらを設定するための十分な権限がない可能性があり、ダンプするユーザーにはそれらをダンプするための十分な権限が可能性があります(RLSポリシーのダンプには、それらのテーブルのロックを取得する必要があるため)。

  • pg_dumpでは、その元となるテーブルがダンプされていない場合、拡張統計オブジェクトをダンプしません。 (Rian McGuire, Tom Lane)

    これは、インデックスなどの他の依存オブジェクトの動作に準拠します。

  • pg_dumpの1つのコードパスでメモリ不足を適切に検出します。 (Daniel Gustafsson)

  • pgbenchスクリプトが開いたままのパイプラインで終了することをエラーにします。 (Anthonin Bonnefoy)

    以前は、\startpipelineコマンドに対応する\endpipelineがない場合、pgbenchは奇妙な動作をしていました。 これはpgbenchが適切に処理する必要があるエラーではなく、スクリプトの間違いのようなのでエラーを投げるようにしました。

  • INT_MAXと等しい要素を持つ配列がgist__int_opsインデックスに挿入された場合に発生するcontrib/intarrayのクラッシュを修正しました。 (Alexander Lakhin, Tom Lane)

  • contrib/pageinspecthash_bitmap_info()関数をパーティション化されたハッシュインデックスに適用した場合に、より適切なエラーを報告するようにしました。 (Alexander Lakhin, Michael Paquier)

  • contrib/pgstattuplepgstathashindex()関数をパーティション化されたハッシュインデックスに適用した場合に、より適切なエラーを報告するようにしました。 (Alexander Lakhin)

  • Windowsでは、pg_ctlpg_regressでサブプロセスを起動する際に自動起動オプションを抑制します。 (Kyotaro Horiguchi)

    cmd.exe経由で子プロセスを起動する場合、/Dフラグを渡して、レジストリで指定された自動実行コマンドの実行を防ぎます。 これにより、予期しない副作用が回避できます。

  • is_valid_ascii()mb/pg_wchar.hからutils/ascii.hに移動しました。 (Jubilee Young)

    この変更により、一部のサードパーティコードで問題を引き起こしていた<simd.h>pg_wchar.hに含める必要がなくなりました。

  • libxml2バージョン2.12.0以降でのコンパイル失敗を修正しました。 (Tom Lane)

  • WindowsでのWAL_DEBUGコードのコンパイル失敗を修正しました。 (Bharath Rupireddy)

  • Python のヘッダファイルからのコンパイラ警告を抑制します。 (Peter Eisentraut, Tom Lane)

    私たちが推奨するコンパイラオプションは、最新バージョンのPythonのヘッダファイルに現れる構造体について警告を発します。 gccを使用する場合、プラグマでこれらの警告を抑制できます。

  • LLVM 18でのコンパイル時の非推奨警告を回避します。 (Thomas Munro)

  • タイムゾーンデータファイルをグリーンランド、カザフスタン、パレスチナでの夏時間法の変更に加え、南極観測点のケイシーとヴォストークを修正したtzdataリリース2024aに更新しました。 また、ベトナム、トロント、ミクロン島の歴史的修正も行われています。