他のバージョンの文書 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. リリース 14.3

リリース日: 2022-05-12

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

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

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

ただし、(contrib/ltree拡張によって提供される)ltree型の列にGiSTインデックスがある場合、アップデート後にインデックスを再作成する必要があります。 以下の2番目の変更点を参照してください。

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

E.3.2. 変更点

  • セキュリティ限定された操作のサンドボックス内では追加操作を制限するようにしました。 (Sergey Shinderuk, Noah Misch)

    自動VACUUM、CLUSTERCREATE INDEXREINDEX、REFRESH MATERIALIZED VIEWpg_amcheckではセキュリティ限定された操作による保護が有効化されるのが遅すぎたり、全く働かなかったりしていました。 データベース内に永続オブジェクトを作成する権限を持ったユーザは、スーパーユーザ権限で任意のSQLコードを実行するオブジェクトを定義できました。 仕込まれたSQLコードは、次に自動VACUUMが行われるときに、あるいは、スーパーユーザがそのオブジェクトに作用するいずれかのコマンドを実行したときに、実行されます。

    PostgreSQLプロジェクトは本問題を報告してくれたAlexander Lakhinに感謝します。 (CVE-2022-1552)

  • gist_ltree_opsのインデックスについて、デフォルトのシグネチャ長が修正されました。 (Tomas Vondra, Alexander Korotkov)

    演算子クラスパラメータをサポートするように演算子クラスをアップグレードするときに、ltree列に対するGiSTインデックスのデフォルトのシグネチャ長(ハッシュサイズ)が、意図せず変更されてしまいました。 最初からltree拡張をバージョン1.2にアップグレードしている場合を除き、このようなインデックスに何らか操作が行われた場合、シグネチャ長が8バイトではなく28バイトと見做されて動作します。 したがって、おそらくそのインデックスは壊れています。 安全のためバージョンアップ後に全てのltreeの列に対するGiSTインデックスを再作成(REINDEX)することを推奨します。 なお、ltree[]列、つまりltreeの配列のGiSTインデックスには影響しません。

  • 素のテーブルを参照する行全体の値の列に対して、問い合わせで指定された列の別名を使わないようにしました。 (Tom Lane)

    SELECTリストの最上位以外でのtbl.*などの行全体変数から作られたタプルの列名は、今後は、もしあるなら常に関連して名前付けされた複合型の要素名になります。 これまではFROMのエントリに適用された全ての列の別名を追跡させるように試みていました。 しかし、それは意味的に非常に疑わしいもので、実際には変数の出力はそれが主張する複合型とは全く異なるからです。 この矛盾に対処するための以前の試みは、読み取り不可能なデータをディスクに保存することを含めて悪い結果をもたらしたので、このアイデア全体をあきらめました。

    列名を付け直したい場合の本障害の回避策は、sub-SELECTの階層を追加して、行全体の変数がsub-SELECTの出力を参照して、素のテーブルを参照しないようにすることです。 そうすれば、変数は最初からrecord型であり、問題は発生しません。

  • interval型からエポック値を抽出するときの誤った丸めが修正されました。 (Peter Eisentraut)

    numeric型を返すようになった新しいEXTRACT()の実装コードで、誤ってDAYS_PER_YEAR定数を整数型に変換して切り捨てていたため、13.xバージョン以前のfloat型を返すコードと戻り値が異なっていました。

  • pg_stat_get_replication_slot(NULL)実行時のクラッシュが防止されました。 (Andres Freund)

    この関数はカタログデータでSTRICTと定義されるべきでしたが、バージョン14ではこれが指定されていなかったため、代替策として実行時のチェックが追加されました。

  • table_to_xmlschema()などのXML関数におけるtimestamptz型、timetz型の誤った出力が修正されました。 (Renan Soares Lopes)

    これらのデータ型に対するXMLスキーマ出力では文字列パターンの正規表現が壊れていました。

  • 列数がゼロのVALUES句のパーサ処理のクラッシュが回避されました。 (Tom Lane)

  • プランノードのResultがAppendノードのすぐ下にあらわれる場合のプランナのエラーやクラッシュが修正されました。 (Etsuro Fujita)

    非同期リモートクエリをサポートするために最近追加されたコードはこのケースを処理できず、クラッシュや認識されないノードタイプに関するエラーが引き起こされました。

  • SEARCH句またはCYCLE句を使用するクエリに重複するテーブル式の名前が含まれている場合のプランナのエラーやクラッシュが修正されました。 (Tom Lane, Kyotaro Horiguchi)

    再帰的なWITHクエリの名前が自身の中で再利用されると、プランナがクラッシュしたり、could not find attribute 2 in subquery targetlistなどの奇妙なエラーを報告したりする可能性がありました。

  • 外側のクエリ階層を参照するGROUPING()構文のプランナエラーが修正されました。 (Richard Guo, Tom Lane)

  • 返却可能な列と返却不可能な列の両方を持つインデックスに対するインデックスオンリースキャンのプラン生成が修正されました。 (Tom Lane)

    以前のコーディングでは、返却可能な列に加え、返却不可能な列も読み取ろうとする可能性がありました。 これは実際には無効な値に対して何も行わなかったためおよそ無害でしたが、最近追加されたエラーチェックでそのようなプランを拒否していました。

  • EvalPlanQualの実行中に古いタプルをロックしようとする際に、ピン(PIN)で固定されなくなった共有バッファにアクセスしないようになりました。 (Tom Lane)

    従来コードはピンを解放した後、さらに数回バッファにアクセスしていました。 理論的には別プロセスがピンがなくなった時点ですぐにバッファを再利用し(あるいは、より可能性が高いのは、その空き領域をデフラグしようとし)、タプルの新しいバージョンを見つけるのに失敗する可能性があります。

  • 再並べ替えを実行しているIndexScanノードでの、クエリ存続期間におけるメモリリークが修正されました。 (Aliaksandr Kalenik)

  • 関数の並列性属性とSET変数リストを同じコマンドで変更できるようにALTER FUNCTIONが修正されました。 (Tom Lane)

    一つのALTER FUNCTIONコマンドで関数のSET句も更新した場合、並列性属性の変更が失われていました。

  • 制約に所有されているインデックスの検出が厳格化されました。 (Tom Lane, Japin Li)

    一部のコードパスで、外部キー制約が依存しているインデックスを、ユニーク制約または主キー制約によって所有されているインデックスと取り違えていました。 その結果、外部キー制約を持つテーブルに対する特定のALTER TABLE操作に際して、奇妙なエラーが発生していました。

  • テーブルのシステム列を変更しようとすると、間違ったエラーが発生する問題が修正されました。 (Tom Lane)

    システムはそれができないことを通知するべきですが、代わりにno owned sequence foundを報告する場合がありました。

  • 先頭キーが式であるインデックスを使用してCLUSTER処理を行った場合に、テーブルの行が誤った並べ替えになる問題が修正されました。 (Peter Geoghegan, Thomas Munro)

    テーブルは正しいデータで再構築されますが、インデックスの順序とはほとんど関係のない順序になりました。

  • ソートされたGiSTインデックスのビルド直後にシステムクラッシュが発生した場合のデータ損失が防止されました。 (Heikki Linnakangas)

    ソートを使用してGiSTインデックスを構築するコードパスは、完了時にファイルのfsyncを怠っていました。 このため、その後すぐにオペレーティングシステムがクラッシュした場合、インデックスが破損する可能性がありました。

  • パーティション化されたインデックスを削除する際にデッドロックエラーのリスクがあり、修正されました。 (Jimmy Yih, Gaurab Dey, Tom Lane)

    必要なテーブルとインデックスのロックが確実に標準的な順序(子の前に親、インデックスの前にテーブル)で取られるようになりました。 DROP INDEXの以前のコーディングでは、これとは異なる方法でロックを取っていたため、標準的な順序でこれらのロックを取る同時実行の問い合わせに対してデッドロックが発生する可能性がありました。

  • DROP TABLESPACEとチェックポイントの間の競合状態が修正されました。 (Nathan Bossart)

    DROP TABLESPACEによって強制されるチェックポイントが、テーブルスペースのディレクトリからすべてのデッドファイルを削除することに失敗して、tablespace is not emptyのような偽のエラーが発生する場合がありました。

  • チェックポイント実行と並行してTRUNCATEコマンドを実行した後に、クラッシュリカバリが失敗する可能性があり、修正されました。 (Kyotaro Horiguchi, Heikki Linnakangas, Robert Haas)

    チェックポイントが完了できるようになる前に、テーブルのディスクファイルが全削除されることをTRUNCATEは保証しなければなりません。 そうでないと、そのチェックポイントから開始したリプレイが、削除されているはずのページの予期せぬデータを見つけて、リプレイ失敗を引き起こすおそれがありました。

  • 一時オブジェクト削除中における安全でないTOASTデータアクセスが修正されました。 (Andres Freund)

    サーバプロセス終了時にFATAL: cannot fetch toast data without an active snapshotのエラーを出して、一時オブジェクトの削除に失敗することがありました。 次に一時スキーマを使う際に正常にクリーンアップされるため、通常は無害です。

  • カスタム設定名の最初の文字に_(アンダースコア)が再度使えるようになりました。 (Japin Li)

    バージョン14ではそのような名前が意図せず使えなくなってしまっていました。

  • compute_query_id設定に指定可能な値としてregressが追加されました。 (Michael Paquier)

    これはテストを容易にすることを目的としており、クエリIDが計算されるけれどもEXPLAINの出力には表示されません。

  • RegisterSyncRequestの待機ロジックが改善されました。 (Thomas Munro)

    その中でcheckpointerプロセスへの同期要求キューが溢れた場合(実際のシステムでは滅多に発生しないことを願っていますが、非常に小さいバッファプールでテストする場合は一般的です)、その待ち行列が無くなるのを待ちます。 待機中は、ユーザーが何が起こっているかを知るために待機イベントとして報告する必要があります。 また、checkpointerプロセスが既に終了している場合にループが終了しない可能性があるためpostmasterプロセスの終了を監視する必要があります。

  • 書き込みと書き込みの間でcheckpointerプロセスが待機しているときにはラッチイベントを起こすようになりました。 (Thomas Munro)

    これは同期リクエストを送信するバックエンドの反応性を改善します。 更にこの待機に対応した適切な待機イベントクラスも追加されました。

  • WALの後続レコードが欠けている時にスタンバイを昇格するとPANIC: xlog flush request is not satisfiedが発生する問題が修正されました。 (Sami Imseih)

  • ホットスタンバイのコンフリクトを処理する際に自己デッドロックが起きる可能性があり、修正されました。 (Andres Freund)

    不運なタイミングのとき、WALを適用するプロセスが他プロセスのバッファロックの解放を待って、動作が止まってしまう可能性がありました。

  • ロジカルレプリケーションの変更を送信する際、パーティションの先祖関係を間違ってしまう可能性があり、修正されました。 (Tomas Vondra, Hou zj, Amit Kapila)

    publish_via_partition_rootオプションが有効に指定されていて、更新するリレーションに対する異なる先祖で指定された複数のパブリケーションがある場合(即ち親子関係にあるリレーション各々にパブリケーションを作っている場合)、サブスクリプションへの変更の報告に際して間違った先祖リレーションを選択することがありました。

  • max_sync_workers_per_subscription設定の制限に抵触する場合でもロジカルレプリケーションのapply workerプロセスが再起動されるようになりました。 (Amit Kapila)

    本設定に対する上限検査コードの欠陥により、これまでは再起動されたワーカを直ぐに終了してしまっていて、ほとんどのワーカが存続できませんでした。

  • UPDATEに対して、変更されていないレプリカアイデンティティ(REPLICA IDENTITY)のキー列を、それが外部TOAST格納されている場合にはWALログに含めるようになりました。 (Dilip Kumar, Amit Kapila)

    この対処をしないと、サブスクライバはその値を見ることができないので、更新を正しく複製できないことになります。

  • ps(1)コマンドにおけるサーバプロセス表示の置き換えに対応していないプラットフォームを適切に処理できるようになりました。 (Andrew Dunstan)

    このようなプラットフォームはほとんど無かったため、これまでリファクタリングが潜在的なメモリ破壊をもたらすことに気づかれませんでした。 サポートされているプラットフォームで該当する唯一のものはCygwinで、バックエンドプロセスのクラッシュが報告されました。

  • タイマ割り込みの見逃しに対して、サーバがより頑健になりました。 (Michael Harris, Tom Lane)

    バージョン14で追加された最適化は、なんらかの理由でサーバプロセスがタイマ割り込みを逃してしまった場合は他についてもカーネルに要求を繰り返さないというもので、セッションの以降においてタイムアウト検出に失敗することになりました。 これでは脆弱すぎると判断され、リカバリパスが追加されました。

  • PL/Perl関数のコンパイル時にSPI関数は実行できないようになりました。 (Tom Lane)

    PL/Perl関数のコンパイル時にはPerlはユーザ定義コードを実行すると考えられます。 しかしながら、SPI経由のSQL操作を行うコードは望ましくありません。 関数の検証に際して本当にコード実行をしたくないので、クラッシュしなければセキュリティ上の危険がありました。 そこで、代わりに親切なエラーメッセージを出す検査が加えられました。

  • libpqがroot所有のSSL秘密鍵ファイルを受け入れるようになりました。 (David Steele)

    この変更により、libpqのSSL鍵ファイルの所有者とアクセス許可の安全チェックが、バージョン9.6以降のサーバと統一されます。 すなわち、現在のルールに加え、鍵ファイルの所有者がrootであって、パーミッションがrw-r-----以下の場合を許容するようになりました。 これは、鍵ファイルのシステム全体での管理に役立ちます。

  • libpqPQisBusy()関数の接続エラー後の動作が修正されました。 (Tom Lane)

    書き込みエラーを検出した場合、PQisBusy()は常に真を返しましたが、これは誤りでした。 サーバから何か読み取れるまで、通常は入力処理を継続したいところでした。 この障害の実際の影響は、libpqの非同期クエリAPIを使用するアプリケーションが、PQconsumeInput()が致命的なエラーを返した場合にしか接続断を検出しないことです。 この修正により、接続断が順当にエラーのPGresultオブジェクトを介して報告されるようになりました。 これはほとんどのアプリケーションにとって相応しい動作です。

  • psqlpg_dump、およびpg_amcheckデータベース.スキーマ.テーブルという構文を再度許容するようになりました (Mark Dilger)

    14より前のバージョンは、2つ以上の.(ドット)を含むパターンにおけるスキーマテーブル以外の全ての修飾名を黙って無視していました。 バージョン14でのリファクタリングの誤りで、そのユースケースがエラーになるようになってしまいました。 本バージョンで復活しましたが、先頭の修飾名がカレントデータベースの名前と一致しない場合にはエラーが発生します。

  • pg_ctlは、stop/restart/promoteの動作を待機している間、postmasterプロセスが動作していることを再チェックするようになりました。 (Tom Lane)

    pg_ctlは、stopまたはpromoteシグナルを送信する一方でpostmasterプロセスが動作していること(PIDが有効であるか)を1回確認しますが、その後は単純にPIDファイルが削除されるまで待機していました。 postmasterがPIDファイルを削除したり、制御ファイルを更新したりせず、非正常に終了した場合、pg_ctlはタイムアウトになるまで待機していました。 これに替えてpostmasterプロセスがまだ存在しているかをときどき再チェックするようになりました。

  • pg_waldumpのエラー処理が修正されました。 (Kyotaro Horiguchi, Andres Freund)

    WALセグメントサイズを知るためにWALファイルを読み取ったとき、短すぎるファイルの場合にpg_waldumpは誤ったエラー報告をしていました。 また、このエラーメッセージおよび関連するエラーメッセージで報告されるファイル名は無効である可能性がありました。

  • contrib/pageinspectの関数が全てゼロのページに対応するようになりました。 (Michael Paquier)

    これは正当な境界条件的ケースでしたが、このモジュールではほぼ想定されていませんでした。 必要に応じて、NULLを返すか、行を返さないように変更されました。 これは、エラーを発生させるよりも有効です。

  • contrib/pageinspectで、破損したページの特別な領域に対する保護を追加し、正しいページサイズのチェックを強化し、不足していたインデックスの型チェックが追加されました。 (Michael Paquier, Justin Pryzby, Julien Rouhaud)

    これらの変更により、モジュールが不良データでクラッシュする可能性が低くなりました。

  • contrib/postgres_fdwBEFORE INSERT ... FOR EACH ROWトリガが外部テーブルに存在する場合、バッチ挿入が無効にされました。 (Etsuro Fujita)

    このようなトリガはテーブルを照会する際、手前で挿入した行を参照するかもしれません。 バッチ挿入では、これらの行がまだ可視となってない可能性があるため、予期せぬ動作を回避するため、無効にされました。

  • contrib/postgres_fdwで、リモートで順序付けされたクエリを要求する前にORDER BY句が安全に渡せることを検証し、必要に応じてUSING句を含めるようになりました。 (Ronan Dunklau)

    この修正はリモートサーバが意図と異なる順序で並べ替えるケースを防止します。 これは見た目だけの場合もありますが、リモートデータがローカルで実行されるマージ結合の入力として使用されると、完全に間違った結果が生じる可能性がありました。

  • sys/epoll.hがあり、sys/signalfd.hはないプラットフォームを扱えるようにconfigureが修正されました。 (Tom Lane)

  • LLVM 14で動作するようにJITコードが更新されました。 (Thomas Munro)

  • clang-fsanitize=undefinedオプションで様々な障害をクリーンアップするようになりました。 (Tom Lane, Andres Freund, Zhihong Yu)

    これらの変更のほとんどは、CおよびPOSIX標準の文書に型通りに準拠するためのものであり、本番ビルドに影響を与える可能性はほとんどありません。

  • OpenSSLなしでビルドする場合は、libpqpkg-configファイルにOpenSSLの依存関係を追加しないように修正されました。 (Fabrice Fontaine)

  • 式の中にネストされたステートメントをサポートしないCコンパイラでビルドできるようにPL/Perlが修正されました。 (Tom Lane)

  • WindowsでビルドにMSVCを使用していない場合に、pg_dumpallのビルドエラーが発生する可能性があり、修正されました。 (Andres Freund)

  • Windowsビルドでは、pexportsの代わりにgendefを使用してDEFファイルを作るようになりました。 (Andrew Dunstan)

    これにより、ビルドプロセスが最新のMSysツールチェーンで機能するように調整されました。

  • MinGWでビルドされたプログラムでの余分なワイルドカードパターンの展開が防止されました。 (Andrew Dunstan)

    何らかの理由で、MinGWによって提供されるCライブラリは、デフォルトでプログラムのコマンドライン引数のシェルワイルドカード文字を展開してしまいます。 MSVCでは特に発生しないため、これは混乱を招くのでパターン展開が無効化されました。

  • タイムゾーンデータファイルがtzdatarelease 2022aに更新されました。 パレスチナでの夏時間法の変更に加えて、チリ、ウクライナの歴史的修正が含まれます。