[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 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.73. リリース9.2.2

リリース日: 2012-12-06

このリリースは9.2.1に対し、各種不具合を修正したものです。 9.2メジャーリリースにおける新機能については、E.75. リリース9.2を参照してください。

E.73.1. バージョン9.2.2への移行

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

しかし、以下の変更履歴の最初の項目に記述されている通り、CONCURRENTLYで作成されたインデックスの問題を修正するためにREINDEXの操作を行う必要があるかもしれません。

また、バージョン9.2.0からアップグレードする場合は、E.74. リリース9.2.1を参照してください。

E.73.2. 変更点

  • CREATE/DROP INDEX CONCURRENTLYに関連する複数の不具合を修正しました。(Andres Freund、Tom Lane、Simon Riggs、Pavan Deolasee)

    DROP INDEX CONCURRENTLYの追加によって引き起こされたエラーにより、CREATE INDEX CONCURRENTLYの最初の段階で索引作成について誤った決定がされる場合がありました。 そのため、このコマンドによって作成されたインデックスが破損していることがあります。 9.2.XにおいてCREATE INDEX CONCURRENTLYで作成されたインデックスについては、このアップデートを適用した後で再作成することが推奨されます。

    さらに、CREATE/DROP INDEX CONCURRENTLYがインデックスのpg_indexの行の状態を変更するときに、その場にある更新を使うように修正しました。 これにより、同時実行中のセッションが対象のインデックスを更新できず、それによりCONCURRENTLYで作成されるインデックスを破損させることになる競合条件を防ぐことができます。

    また、CREATE INDEX CONCURRENTLYコマンドのエラーの結果として作られる不正なインデックスについて、他の様々な操作が確実に無視するように修正しました。 この中で最も重要なのはVACUUMです。 なぜなら、この不正なインデックスを修正あるいは削除するための修正の処理が実行される前に、自動バキュームが実行されることがあり得るからです。

    また、DROP INDEX CONCURRENTLYについて、対象のインデックスを利用するすべての問い合わせが終了しなくても、挿入が可能になるように修正しました。

    また、DROP INDEX CONCURRENTLYが取り消された時の不正な動作を修正しました。 以前のプログラムでは、削除できないインデックスが残る可能性がありました。

  • DROP INDEX CONCURRENTLYの述部ロックを修正しました。(Kevin Grittner)

    これまでは、SSI述部ロックは間違ったタイミングで処理されており、シリアライザブルのトランザクションがDROPと並行して実行されるという誤った動作をする可能性がありました。

  • WAL再生中のバッファロックを修正しました。(Tom Lane)

    複数ページにまたがるWALレコードを再生する場合のバッファロックについて、WAL再生のプログラムに完全でない部分がありました。 これにより、ホットスタンバイの問い合わせが一時的に一貫性のない状態になることがあり、その結果、誤った結果や不正なエラーを起こすことがありました。

  • GINインデックスについてのWAL生成のロジックの誤りを修正しました。(Tom Lane)

    分裂ページのエラーが発生すると、これによりインデックスが破損することがありました。

  • SP-GiSTインデックスについてのWAL再生のロジックの誤りを修正しました。(Tom Lane)

    クラッシュの後、あるいはスタンバイサーバにおいて、これによりインデックスが破損することがありました。

  • WAL再生中にベースバックアップの終了位置を誤検知するのを修正しました。(Heikki Linnakangas)

    この誤りにより、データベースが一貫性のある状態になるより前にホットスタンバイモードが起動してしまうことがありました。

  • ホットスタンバイのサーバを通常の実行にプロモートする時、起動プロセスの仮想XIDロックを正しく削除するようにしました。(Simon Riggs)

    この誤りにより、CREATE INDEX CONCURRENTLYなどいくつかの操作をこの後で実行できない場合がありました。

  • スタンバイモードにおいて偽物のout-of-sequence timeline IDエラーが出ないようにしました。(Heikki Linnakangas)

  • postmasterがシャットダウンのシグナルを受け取った後は、新しい子プロセスを起動しないようにしました。(Tom Lane)

    この誤りにより、シャットダウンが必要以上に長く時間がかかる、あるいはユーザによる追加の操作がなければ終了しない、ということがありました。

  • log_rotation_ageが2^31ミリ秒(約25日)を超えていても、sysloggerがエラーを起こさないように修正しました。(Tom Lane)

  • WaitLatch()について、要求されたタイムアウトの期限が切れたら、すぐに戻るように修正しました。(Jeff Janes、Tom Lane)

    以前のプログラムでは、ウェイトを終了させない割り込みが定常的に発生すると、WaitLatch()からの戻りが無期限に遅れることがありました。 これはautovacuum launcherプロセスにおいて問題であることがわかりました。 他の部分でも同じように問題となる可能性がありました。

  • メモリが不足した時でも、内部ハッシュテーブルが破損しないようにしました。(Hitoshi Harada)

  • 削除したテーブルのファイルデスクリプタをトランザクションが終了した後もオープンのまま保持し続ける問題を修正しました。(Tom Lane)

    これにより、削除してから時間が経っているテーブルがディスクスペースを占め続けるという問題の発生が減るはずです。

  • 新しい子プロセスがラッチへのパイプを作成できないとき、データベース全体がクラッシュして再起動する問題を修正しました。(Tom Lane)

    新しいプロセスはエラーにするしかありませんが、データベース全体を強制的に再起動させるべき理由はありませんから、再起動しないようにしました。 これによりカーネルのファイルディスクリプタが足りなくなりそうな場合の堅牢性が向上します。

  • 平坦化されていない副問い合わせとの結合でプランナがクラッシュする問題を修正しました。(Tom Lane)

  • 外部結合上の厳格でない等価な句についての計画作成を修正しました。(Tom Lane)

    厳格でない構造を他のものと等号で結ぶ句について、プランナが誤った制約を導出する場合がありました。 例えば、WHERE COALESCE(foo, 0) = 0fooが外部結合のNULLになるかもしれない側のもののときです。 9.2では以前のリリースに比べてこの種のエラーが起こる場合が多いことがわかりましたが、基本的な不具合はずっと以前からありました。

  • 継承ツリー上でインデックスにより最適化されるMIN/MAXがある場合のSELECT DISTINCTについて修正しました。(Tom Lane)

    これらの要素の組み合わせに対して、プランナはfailed to re-find MinMaxAggInfo recordというエラーを起こしていました。

  • それらに実際に意味的な違いがあるという少数の場合を除き、プランナはすべての目的において、暗示的なキャストと明示的なキャストを等価なものとして扱うようにしました。(Tom Lane)

  • 問い合わせに対して部分インデックスが使えるかどうかを考慮する際に、JOIN句を含めるようにしました。(Tom Lane)

    例えば、x IS NOT NULLという述部を確立するには、厳格なJOIN句があれば十分です。 これにより、9.2でのプランナの機能低下が修正されます、というのは、以前のバージョンでは同等の導出が可能でした。

  • 同一のインデックスについて多数のインデックス利用可能なJOIN句がある場合について、計画作成の時間の増大を制限しました。(Tom Lane)

  • プランナについて、等価なクラスから排他制約を証明する能力を向上しました。(Tom Lane)

  • ハッシュされた副計画の部分行のマッチングについて、型をまたがる場合を正しく処理できるよう修正しました。(Tom Lane)

    これはWHERE (a, b) NOT IN (SELECT x, y FROM ...)のような複数の列についてのNOT INの副計画で、例えばbyがそれぞれint4型とint8型である、というような場合に影響します。 この処理の誤りにより、そこで使われているデータ型によって、誤った結果が得られたり、あるいはクラッシュする、ということが起きていました。

  • Bツリーのマーク/リストアの機能で、配列のキーを正しく処理できるように修正しました。(Tom Lane)

    この誤りにより、マージ結合の内側がindexed_column = ANY(array)の条件を使うインデックススキャンのときに、誤った結果を返すことがありました。

  • スナップショットの回数を減らすパッチを元に戻しました。(Tom Lane)

    問い合わせ実行中のスナップショットの回数を減らすという9.2の変更により、以前のリリースでは見られなかったいくつかの異常な動作が発生しました。 これは、問い合わせで使われる表をロックするより前に取得したスナップショットを使って問い合わせの実行が進められるからです。 このため、例えば、ある問い合わせより前に実行されているトランザクションが排他ロックを取得している場合であっても、その問い合わせは、トランザクションによる更新を参照できるとは限らないようになっていました。 この件については将来のリリースで再検討することになると思いますが、当面は9.2以前と同じ状態に戻すことにします。

  • AFTER ROW UPDATE/DELETEトリガーで古いタプルを再フェッチする時、バッファロックを取得するようにしました。(Andres Freund)

    この誤りにより、非常に特異な状況において、トリガーのWHEN条件、あるいは外部キーを強制するトリガーの事前チェックのロジックに対して誤ったデータを渡すことがありました。 その結果として、クラッシュを起こしたり、あるいはトリガーを実行するかどうかについて誤った判断をすることがありました。

  • ALTER COLUMN TYPEについて、継承されたチェック制約を正しく処理できるように修正しました。(Pavan Deolasee)

    これは8.4より前のリリースでは正しく動作していました。 この修正により8.4およびそれ以降のリリースでも正しく動作するようになりました。

  • ALTER EXTENSION SET SCHEMAについて、いくつかの付随するオブジェクトを新しいスキーマに移動するのに失敗することがあるのを修正しました。(Álvaro Herrera、Dimitri Fontaine)

  • 拡張問い合わせプロトコルでCREATE TABLE AS EXECUTEを正しく処理できるようにしました。(Tom Lane)

  • DROP RULE IF NOT EXISTSおよびDROP TRIGGER IF NOT EXISTSにおいて、入力の構文解析ツリーを変更しないようにしました。(Tom Lane)

    この誤りにより、これらの型の一つのキャッシュされた命令が再実行されると、エラーが起こることがありました。

  • REASSIGN OWNEDについて、表領域のGRANTが正しく処理できるように修正しました。(Álvaro Herrera)

  • ビューのシステム列についてのpg_attributeの誤ったエントリを無視するようにしました。(Tom Lane)

    ビューにはシステム列はありません。 しかし、表をビューに変換するとき、そのようなエントリを取り除くことを忘れていました。 これは9.3およびそれ以降のリリースでは適切に修正されますが、それ以前のブランチにおいても、誤って変換されたビューが存在しないようにする必要があります。

  • ルールの出力について、INSERT INTO table DEFAULT VALUESを正しくダンプできるよう修正しました。(Tom Lane)

  • 問い合わせが非常に多くのUNION/INTERSECT/EXCEPTを含むときでもスタックオーバーフローが発生しないようにしました。(Tom Lane)

  • もっとも小さな整数値を-1で割り算した時に、プラットフォームによってはエラーとなるのを修正しました。(Xi Wang、Tom Lane)

  • 日付文字列の解析で、文字列の終わりを越えてアクセスすることがあるのを修正しました。(Hitoshi Harada)

  • チェックポイント中にXID周回が発生し、かつwal_levelhot_standbyである場合にXIDエポックを進めるのに失敗するのを修正しました。(Tom Lane、Andres Freund)

    この誤りはPostgreSQL自体には特に影響がありませんでしたが、TXID値が後戻りしているように見えるため、txid_current()およびそれに関連した関数に依存するアプリケーションにとっては問題でした。

  • pg_terminate_backend()pg_cancel_backend()について、対象のプロセスが存在しない場合に、エラーを発生させないようにしました。(Josh Kupershmidt)

    以前からスーパーユーザーによって呼び出された場合は意図した通りの動作をしていましたが、一般ユーザに呼び出されたときはそうではありませんでした。

  • ページ境界におけるpg_stat_replication.sync_stateの表示を修正しました。(Kyotaro Horiguchi)

  • Unixドメインソケットのパス名がプラットフォーム依存の最大長を超えていた場合に、理解可能なエラーメッセージを生成するようにしました。(Tom Lane、Andrew Dunstan)

    以前はNon-recoverable failure in name resolution(名前解決で解決不能なエラーが発生しました)といった非常に不親切なエラーを起こしていました。

  • 複合列の値をクライアントに送るときのメモリリークを修正しました。(Tom Lane)

  • コミット時に副トランザクションのロックを検索しないようにすることで、いくつかのサイクルを節約しました。(Simon Riggs)

    多くの排他ロックを保持するトランザクションにおいて、この不要な動作は極めて高価なものとなる場合がありました。

  • postmaster.pidファイルの読み込みについて、pg_ctlをより堅牢にしました。(Heikki Linnakangas)

    これは競合条件、およびファイルデスクリプタのリークを解決します。

  • psqlにおいて、不正にエンコードされたデータが入力され、かつclient_encodingの設定がSJISのようにクライアントでしか利用できない文字セットである場合にクラッシュする場合があるのを修正しました。(Jiang Guiqing)

  • pg_dumpについてSEQUENCE SETの要素をアーカイブ内のデータ部(データの前ではない)にダンプするようにしました。(Tom Lane)

    これにより--data-only--section=dataの意味に一貫性がないという望ましくない問題が解決されます。 また、拡張設定テーブルとして印付けられたシーケンスのダンプについても修正されます。

  • pg_dump--cleanモードにおけるDROP DATABASEコマンドの処理を修正しました。(Guillaume Lelarge)

    9.2.0からpg_dump --cleanDROP DATABASEコマンドを発行するようになりましたが、これは使い方によって不要であるかあるいは危険であるかのどちらかでした。 以後はこれをしないようになります。 この修正により、--clean--createを組み合わせた場合も適切に動作するようになります。 つまりDROP DATABASECREATE DATABASEを実行し、その後で対象のデータベースに接続します。

  • 循環的な依存があり、かつリレーションのオプションがないビューについて、pg_dumpを修正しました。(Tom Lane)

    循環的な依存のあるビューについてリレーションのオプションをダンプするという以前の修正では、ビューにオプションがないという場合に正しく動作せず、ALTER VIEW foo SET ()という不正な構文を出力していました。

  • pg_dumptar出力形式で生成するrestore.sqlスクリプトの不具合を修正しました。(Tom Lane)

    このスクリプトはテーブル名が大文字を含む場合に全く動作しませんでした。 また、このスクリプトで通常のCOPYモードだけでなく--insertsモードの場合もデータをリストアできるようにしました。

  • pg_restoreでPOSIX準拠のtarファイルを処理できるよう修正しました。(Brian Weaver、Tom Lane)

    pg_dumptar出力モードの元々のプログラムは、POSIX標準に完全には準拠していないファイルを生成していました。 この問題はバージョン9.3で修正されます。 このパッチは9.3より前のブランチを修正するもので、正しくないフォーマットと正しいフォーマットの両方を処理できるようにします。 これにより、9.3がリリースされた時に互換性の問題を防ぐことができます。

  • pg_basebackupが生成するtarファイルがPOSIX準拠になるように修正しました。(Brian Weaver、Tom Lane)

  • pg_resetxlogについて、データディレクトリへの相対パスが与えられた時に、postmaster.pidの場所を正しく特定できるよう修正しました。(Tom Lane)

    この誤りにより、データディレクトリを使用している動作中のpostmasterがあることにpg_resetxlogが気が付かないことがありました。

  • libpqlo_import()関数およびlo_export()関数が、ファイルI/Oのエラーを適切に報告するよう修正しました。(Tom Lane)

  • ecpgについて、ネストした構造体のポインタ変数の処理を修正しました。(Muhammad Usama)

  • ecpgecpg_get_data関数について、配列を正しく処理するよう修正しました。(Michael Meskes)

  • pg_upgradeがシステムカタログについてTOASTテーブルの処理をしようとしないようにしました。(Bruce Momjian)

    これにより、information_schemaが削除され、再作成された場合に発生していたエラーが修正されます。 これ以外のエラーが起こる場合もありました。

  • 新しいクラスタにおいてsynchronous_commitoffにすることで、pg_upgradeのパフォーマンスを向上しました。(Bruce Momjian)

  • contrib/pageinspectのBツリーページ検査関数で、ページの検査中はバッファロックを取得するようにしました。(Tom Lane)

  • malloc(0)およびrealloc(NULL, 0)の移植性のない動作について回避策を適用しました。(Tom Lane)

    これらの呼び出しがNULLを返すプラットフォームにおいて、これが誤ってout-of-memory(メモリ不足)であると解釈されるようなコードがいくつかありました。 既知のケースでは、ユーザ定義の集約が含まれないデータベースについてpg_dumpが正しく動作しないというものがありました。 他にも正しく動作しないケースがあったかもしれません。

  • 拡張についてmake installを実行した時にextensionというインストールディレクトリが確実に作成されるようにしました。(Cédric Villemain)

    以前は、拡張のMakefileでMODULEDIRが定義されていると、このステップが実行されませんでした。

  • AIX上でのロード可能モジュールのビルドについてpgxsのサポートを修正しました。(Tom Lane)

    元々のソースツリーの外側でモジュールをビルドしてもAIXでは正しく動作しませんでした。

  • 時間帯データファイルをtzdataリリース2012jに更新しました。 キューバ、イスラエル、ヨルダン、リビア、パレスチナ、西サモア、およびブラジルの一部での夏時間の変更が含まれます。