PostgreSQL 9.2.1 に関する技術情報

このリリースは 9.2.0 からの修正リリース(2012/9/24リリース)です。
9.2.x からのアップデートではダンプ、リストアは不要です。

ただし、データ破損の不具合の影響から復旧させるために、REINDEX 及び VACUUM を実行することが推奨されます。

PostgreSQL 9.2.0 から 9.2.1 への変更点

9.2.1、9.1.6、9.0.10、8.4.14, 8.3.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。


  1. WALリカバリ中における共有バッファの永続マーキングが修正されました
    (Jeff Davis) (9.2) (9.1)

    本障害により、クラッシュリカバリとレプリケーションのスタンバイサーバにおいてデータ破損が起きる可能性があります。

    最も高い可能性で起きるのはテーブルのビジビリティマップの破損です。これにより 9.2.x の index-only scan において誤ったデータが返ることになります。9.1.x ではビジビリティマップ破損により一時的に VACUUM が効果的に行われなくなるだけです。

    可能性は低いですが Btree、GINインデックスが破損するケースもあります。テーブルデータ本体は本障害では破損しません。

    マイナーバージョンアップをした後で、全ての Btree、GINインデックスを REINDEX することが推奨されます。また、全てのテーブルについて、vacuum_freeze_table_age を 0 にして VACUUM を実行することが推奨されます(単に vacuumdb -aF コマンドを実行してもよいでしょう)。

  2. 「WHERE indexed_column IN (値のリスト)」という形を含む SQL で誤ったソート結果になる可能性があり、修正されました
    (Tom Lane) (9.2)
  3. WINDOW関数と集約処理と一緒に GROUP BY が使われている SQL についてプランナ障害が修正されました
    (Tom Lane) (9.2)
  4. プランナによるエグゼキュータのパラメータの割り当てが修正されました
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    また、9.1、9.0、8.4系列ではエグゼキュータのCTEプランノードの再スキャンロジックが修正されました。

    本障害で WITH 節のサブクエリを複数スキャンすることで、誤った応答が返る可能性がありました。

  5. プランナにおけるインデックススキャンでの結合条件の扱いが改善されました
    (Tom Lane) (9.2)
  6. テキスト全文検索の SQL で検索条件が 'word:*'::tsquery のような前方一致を含むとき、選択行数の推定が改善されました
    (Tom Lane) (9.2)(9.1)
  7. 権限変更が遅延して認識されるのが修正されました
    (Tom Lane) (9.2)

    新たなロック取得を必要としないコマンドでは、当トランザクション開始後から当コマンド実行前に、並行して別トランザクションでコミットされた GRANT または REVOKE の結果を反映しない動作をする可能性がありました。

  8. 配列型をベース型としたドメイン型のカラムに対する ANALYZE が失敗するのが修正されました
    (Tom Lane) (9.2)

    9.2.0 では ANALYZE に対して以下のようなエラーがでていました。

    ERROR:  array_typanalyze was invoked for non-array type 16824
  9. PL/Perl で、再帰的な関数が実行中に再定義された場合にクラッシュするのを防ぐようになりました
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)
  10. PL/Perl で誤った最適化を回避するように修正されました
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)(8.3)

    一部の Linuxディストリビューションには不適切なバージョンの pthread.h が含まれており、コンパイルされた PL/Perl コードも不適切なものとなっていました。PL/Perl 関数が他の関数を呼び出してエラーになった場合に、クラッシュ(segmentation fault)が引き起こされます。

  11. pg_upgrade から pg_config コマンドに対する不要な依存関係が除去されました
    (Peter Eisentraut) (9.2)(9.1)

    pg_config コマンドをインストールしていないケースもあるための対応となります。

  12. タイムゾーンデータが tzdata release 2012f に更新されました
    (9.2)(9.1)(9.0)(8.4)(8.3)

    フィジーにおける夏時間法の変更に対応しています。

  13. default_transaction_isolation を serializable と設定した場合の誤った振る舞いが修正されました
    (Kevin Grittner, Tom Lane, Heikki Linnakangas) (9.1)

    Windows においてプロセス開始時にクラッシュすることがあり、また、ホットスタンバイの動作でクラッシュすることがありました。

  14. GiSTインデックスにおけるページ分割の判断が改良されました。
    (Alexander Korotkov, Robert Haas, Tom Lane) (9.1)(9.0)(8.4)(8.3)

    本修正前には複数列GiSTインデックスが想定外に膨張することがありました。

  15. REVOKE ... CASCADE による多段の権限剥奪操作が、当該権限がまだ保持されているなら止まるように修正されました。
    (Tom Lane) (9.1)(9.0)(8.4)(8.3)

    例を示します。以下のようにテーブルに権限設定がされていたとして、そこで user2 で user4 から権限を剥奪する REVOKE ... CASCADE を行うものとします。

    =# \dp dep_priv_test
     Schema | Name | Type  |  Access privileges  | Column privileges
    --------+------+-------+---------------------+------------------
     public | test | table | user1=arwdDxt/user1+|
            |      |       | user2=r*/user1     +|
            |      |       | user3=r*/user1     +|
            |      |       | user4=r*/user2     +|
            |      |       | user4=r*/user3     +|
            |      |       | user5=r/user4       |
    
    =# SET SESSION ROLE user2;
    => REVOKE SELECT ON test FROM user4 CASCADE;
    

    修正前は以下の状態になります。

    => \dp test
     Schema | Name | Type  |  Access privileges  | Column privileges
    --------+------+-------+---------------------+------------------
     public | test | table | user1=arwdDxt/user1+|
            |      |       | user2=r*/user1     +|
            |      |       | user3=r*/user1     +|
            |      |       | user4=r*/user3      |
    

    修正後は以下の状態となります。user2 を経由せず、user3 → user4 → user5 のルートで user5 の権限が与えられたケースが尊重されます。

    => \dp test
     Schema | Name | Type  |  Access privileges  | Column privileges
    --------+------+-------+---------------------+------------------
     public | test | table | user1=arwdDxt/user1+|
            |      |       | user2=r*/user1     +|
            |      |       | user3=r*/user1     +|
            |      |       | user4=r*/user3     +|
            |      |       | user5=r/user4       |
    
  16. ALTER EXTENSION SET SCHEMA で拡張モジュールを自身に含まれるスキーマに含めることが禁止されました
    (Thom Brown) (9.1)

    この状況は、pg_dump や他の機能で、循環依存を生んでしまいます。人為的にも修正するのが難しいため認めないものとなりました。

  17. ホットスタンバイの設定ミスに対するエラーメッセージを修正しました
    (Gurjeet Singh) (9.1)(9.0)

    パラメータ名が「max_prepared_xacts」と表示されていたものが、正しく「max_prepared_transactions」となります。また、より適切な SQLSTATE を出力するようになりました。

  18. configure スクリプトが mbstowcs_l ライブラリ関数を確認するようになりました
    (Tom Lane) (9.1)

    AIX のいくつかのバージョンで発生するビルド失敗に対応したものです。

  19. PL/Perl 使用時の SIGFPE の扱いが修正されました
    (Andres Freund) (9.1)(9.0)(8.4)(8.3)

    Perl はプロセスの SIGFPEハンドラ SIG_IGN にリセットします。これは後にクラッシュを引き起こします。PL/Perl 初期化後に通常の PostgreSQL のシグナルハンドラに戻すようにしました。

  20. contrib/pg_trgm で用いられる LIKE句の不具合が修正されました
    (Fujii Masao) (9.1)

    LIKE句にエスケープ文字が含まれていると、トリグラムインデックスを使った LIKE句を含む SQL は、誤った結果を返していました。

  21. Windowsで pg_upgrade の改行処理が修正されました
    (Andrew Dunstan) (9.1)(9.0)

    これまで、pg_upgrade は、関数定義などさまざまな箇所で、行末のキャリッジリターンを追加/削除してしまう可能性がありました。

  22. Windows で pg_upgrade がスクリプト内のパス区切りにバックスラッシュを使えるようになりました
    (Andrew Dunstan) (9.1)(9.0)