PostgreSQL 8.4.18 に関する技術情報

このリリースは 8.4.17 からの修正リリース(2013/10/10リリース)です。
8.4.x からのアップデートではダンプ、リストアは不要です。

また、8.4.17 より前のバージョンからアップデートを行う場合は 8.4.17 に関する技術情報を参照してください。

PostgreSQL 8.4.17 から 8.4.18 への変更点

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


  1. hstore拡張モジュールの JSON 機能が更新されました (Andrew Dunstan) (9.3)

    hstore型を json型に変換する二つの JSON 関数と一つのキャストが追加されました。
    既に hstore をインストールしている場合には以下コマンドで適用します。

    =# ALTER EXTENSION hstore UPDATE;
    
  2. 範囲インデックス作成時のメモリリークが修正されました (Heikki Linnakangas) (9.3)(9.2)
  3. SERIALIZABLE トランザクションについて修正されました (Kevin Grittner, Heikki Linnakangas) (9.3)(9.2)(9.1)

    直列化可能であるかの判断で競合を見落とす可能性がありました。

  4. libpq の SSL 接続におけるデッドロックが生じる障害が修正されました (Stephen Frost) (9.3)(9.2)(9.1)(9.0)(8.4)
  5. pg_receivexlogコマンドにおけるタイムラインの扱いに関する障害が修正されました (Heikki Linnakangas, Andrew Gierth) (9.3)
  6. CREATE FUNCTION において、設定 check_function_bodies が有効でない限り、SET する値のチェックを行わないようになります。 (Tom Lane) (9.3)(9.2)(9.1)(9.0)(8.4)

    以下の関数定義は SET 句部分で与えている値が誤っていますが、check_function_bodies = off としておけばエラーが出なくなります。
    以前は常にチェックされエラーとなっていました。

    CREATE FUNCTION func_with_bad_set() RETURNS int AS
    $$ select 1 $$
    LANGUAGE SQL SET default_text_search_config = no_such_config;
    

  7. 稀に発生するインデックスの無いテーブルに対する VACUUM における誤った警告が取り除かれました。
    (Heikki Linnakangas) (9.3)(9.2)(9.1)(9.0)(8.4)

    「WARNING: page containing dead tuples is marked as all-visible ...」が誤って出る可能性がありました。

  8. マルチバイト文字エンコーディングにおいて、
    非ASCII で "(ダブルクオート)で囲われていない識別子が小文字にならないように修正されました。 (Andrew Dunstan) (9.2)(9.1)(9.0)(8.4)

    これまでは非ASCII 文字でも tolower() 関数によって小文字に変換する実装となっていました。

  9. wal_level = hot_standby であるときの backgroupd writer プロセスにおけるチェックポイント処理のメモリリークが修正されました。
    (Naoya Anzai) (9.2)(9.1)(9.0)
  10. lo_open() によるメモリリークが修正されました (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)
  11. work_mem でメモリを 24GB 以上の使う際にメモリ超過割り当てが生じる可能性があり、修正されました。 (Stephen Frost) (9.2)(9.1)(9.0)(8.4)
  12. libpq にてマルチスレッドで SSL を使う場合にネットワークスタックが壊れる可能性あり、修正されました (Nick Phillips, Stephen Frost) (9.2)(9.1)(9.0)
  13. 与えられたパラメータに対応したカスタムプランを使うかどうか選ぶ際のプランナコスト見積もりが改善されました (Tom Lane) (9.2)

    本変更でプラン作成コストが高いときには汎用プランを好むようになります。

  14. boolean型カラムに NULL が多数含まれるとき、プランナが選択行の見積を適切に行うようになりました (Andrew Gierth) (9.2)(9.1)(9.0)(8.4)

    これまで「col IS NOT TRUE」や「col IS NOT FALSE」といった条件のとき、NULL値の割合が因子として適切に使われていませんでした。

  15. UNION ALL と継承テーブルへの問い合わせでパラメタライズドパスを適切に再チェックするように修正されました (Tom Lane) (9.2)

    これまで最善でないプランが選ばれる可能性がありました。

  16. UNION や INTERSECT のサブクエリに対する安全でない WHERE句のプッシュダウンを防ぐようになりました (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    これまでは該当のケースでエラーが生じていました。サブクエリ部分に複数行を返す関数、
    VOLATILE な関数、DISTINCT ON がある場合に該当する可能性があります。以下に報告されたエラーケースを示します。

    =# SELECT * FROM (
         SELECT 1 AS t , generate_series(1,10) AS x
         UNION
         SELECT 2 AS t , 4 AS x
       ) ss WHERE x < 4 ORDER BY x;
    ERROR:  set-valued function called in context that cannot accept a set
    
  17. 不適切なデータ型の処理により GROUP BY の問い合わせで稀にエラーがおきる障害が修正されました (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    以下の SQL で障害が報告されました。

    =# CREATE FUNCTION test_group_by() RETURNS TABLE (my_col varchar(5))
       AS $$ SELECT 'hello'::varchar(5); $$ LANGUAGE sql STABLE;
    
    =# SELECT my_col FROM test_group_by() GROUP BY 1;
    ERROR:  failed to locate grouping columns
    
  18. pg_dump のバイナリアップグレードモード(--binary-upgrade)における動作が修正されました (Andrew Dunstan) (9.2)(9.1)

    カラムを落とした外部テーブルについて正しく動作するようになりました。これまで pg_upgrade にてエラーが出ていました。

  19. pg_dump で拡張モジュール関連のルール、イベントトリガーの処理順序が修正されました (Joe Conway) (9.2)(9.1)
  20. 拡張モジュールのテーブルでも pg_dump で -t や -n の指定をしたとき、ダンプできるようになりました。 (Joe Conway) (9.2)(9.1)
  21. ビューのダンプで元テーブルから落とされたカラムについて、よりよい扱いができるようになりました。 (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  22. pg_restore -l (--list) でディレクトリ形式が正しいフォーマット名称で表示されるように修正されました (Fujii Masao) (9.2)(9.1)

    これまで Format: UNKNOWN と表示されていました。

  23. UNIQUE 構文、PRIMARY KEY 構文を使った際に、インデックスコメントを適切に記録するようになりました (Andres Freund) (9.2)(9.1)(9.0)

    pg_restore でパラレルにリストアを行う際に、まだ作られていないインデックスにコメントを付ける処理が実行され、エラーとなっていました。

  24. pg_basebackup -x (--xlog) 実行時、レプリケーション元の pg_xlog が空であるときクラッシュしていたものが修正されました (Magnus Hagander, Haruka Takatsuka) (9.2)

    「ERROR: could not find any WAL files」が出るようになります。

  25. スイッチオーバーが完了する前の WALファイル伝搬が正しく保証されるようになりました (Fujii Masao) (9.2)(9.1)

    これまで、全ての WALファイルがスタンバイでリプレイされる前にストリーミングレプリケーション接続が閉じてしまう可能性がありました。

  26. リカバリ中における WALセグメントのタイムラインの扱いが改善されました (Heikki Linnakangas) (9.2)(9.1)

    WALセグメントファイルを再利用するときにターゲットタイムラインでなく現在のタイムラインに基づいたファイル名にします。

  27. REINDEX TABLE と REINDEX DATABASE が適切に制約を再検証し、無効とされたインデックスに有効と印をつけるようになりました。
    (Noah Misch) (9.2)(9.1)(9.0)
  28. SP-GiST インデックスに挿入するときのデッドロックを回避するように修正されました (Teodor Sigaev) (9.2)
  29. CREATE INDEX CONCURRENTLY を並列実行するときデッドロックの可能性があり、修正されました (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  30. GiST インデックスを牽くときのクラッシュが修正されました (Tom Lane) (9.2)
  31. regexp_matches() 関数におけるゼロ長マッチの扱いについて修正されました (Jeevan Chalke) (9.2)(9.1)(9.0)(8.4)

    これまで「^」のようなゼロ長文字列へのマッチでは、以下のように余分にマッチ文字列を返していました。

    =# SELECT regexp_matches('foo', '$', 'g');
     regexp_matches
    ----------------
     {""}
     {""}
    (2 rows)
    
  32. 非常に複雑な正規表現でクラッシュしていたものが修正されました (Heikki Linnakangas) (9.2)(9.1)(9.0)(8.4)
  33. 正規表現で、最短一致量指定子(non-greedy)での後方参照マッチに失敗していたものが修正されました (Jeevan Chalke) (9.2)(9.1)(9.0)(8.4)
  34. ALTER DEFAULT PRIVILEGES で CREATE権限がなくともスキーマの操作ができるようになりました (Tom Lane) (9.2)(9.1)(9.0)

    スキーマに対する CREATE 権限が必要という点はマニュアル記載があり、本件は仕様変更となります。本変更による実質的なセキュリティ水準低下は無いと考えられます。

    以前は、以下の振る舞いとなります。

    (管理者ユーザで操作)
    =# CREATE USER bob;
    =# CREATE SCHEMA we_like_bob;
    =# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob
       GRANT SELECT ON TABLES TO bob;
    ERROR:  permission denied for schema we_like_bob
    (ここではエラー)
    =# GRANT CREATE ON SCHEMA we_like_bob TO bob;
    =# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob
       GRANT SELECT ON TABLES TO bob;
    (ここで成功する)
    

  35. クエリ内にキーワードは使えないという制限が緩められました (Tom Lane) (9.2)(9.1)(9.0)

    ロール名、手続き言語名、COPY や EXPLAIN のオプション、SET 値にてキーワードが使用可能となります。

  36. COPY に失敗したときに適切な行番号が出力されるようになりました (Heikki Linnakangas) (9.2)

    これまでエラー時メッセージにてコピー元ファイルのエラー箇所と合わない行番号が表示されることがありました。

  37. pgcrypto 拡張モジュールにおいて、pgp_pub_decrypt() 関数がパスワード付き秘密鍵で動作するように修正されました
    (Marko Kreen) (9.2)(9.1)(9.0)(8.4)
  38. pg_upgrade が pg_dump --quote-all-identifiers を使って、リリース間でキーワードが変更された場合の問題を回避するようになりました
    (Tom Lane) (9.2)(9.1)
  39. ファイル切り詰め処理がキャンセルされた場合における ANALYZE の統計情報生成が改善されました (Kevin Grittner) (9.2)(9.1)(9.0)
  40. プリペアドクエリーとしてトランザクション管理コマンド(ROLLBACK など)を実行すると失敗する可能性があり、修正されました
    (Tom Lane) (9.2)(9.1)(9.0)(8.4)
  41. 無限大をあらわすのに多様な書き方が全プラットフォームで可能となりました (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    浮動小数点の数値型(float4、float8)にて、inf、+inf、-inf、infinity、+infinity、-infinity という書き方が共通でサポートされます。これまで Windows では inf が使えないなど、コンパイラやプラットフォームによって差異がありました。

  42. track_activities = off であるとき、実行時統計情報収集における不要な報告処理をしなくなりました (Tom Lane) (9.2)
  43. 行とレコードや配列の比較について不要な制限が取り除かれました (Rafal Rzepecki, Tom Lane) (9.2)(9.1)(9.0)(8.4)

    以下のような SQL がエラーとなっていましたが、実行できるようになりました。

    =# CREATE TYPE the_row AS (c1 text, c2 text);
    =# CREATE TABLE the_table (c the_row);
    =# SELECT * FROM the_table WHERE c IN ( ROW('foo','bar')::the_row );
    ERROR:  arguments of row IN must all be row expressions
    
  44. 環境変数 PSQLRC にチルダが含まれているときにクラッシュする障害が修正されました (Bruce Momjian) (9.2)
  45. ARM64 むけの CPU固有スピンロックコードが追加されました (Mark Salter) (9.2)
  46. タイムゾーンデータが tzdata release 2013d に更新されました (Tom Lane) (9.2)(9.1)(9.0)(8.4)

    イスラエル、モロッコ、パレスチナ、パラグアイの夏時間法の変更、および、マッコーリー島の歴史的な修正が適用されています。

  47. WALリプレイで未初期化の空ページを参照してエラーになるのを防止するようになりました
    (Andres Freund) (9.2)