PostgreSQL 8.3.8 に関する技術情報

このリリースは 8.3.7 からの修正リリース(2009/09/09リリース)です。
8.3.x からのアップデートではダンプ、リストアは不要です。
ただし、interval 型カラムにハッシュインデックスを設定している場合には、マイナーバージョンアップを行なった後に REINDEX を実行する必要があります。

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

PostgreSQL 8.3.7 から 8.3.8 への変更点

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

※ 各項目のカッコ内は担当した開発者名と該当するメジャーバージョン系列です。


  1. アーカイブリカバリの最後での WAL ページヘッダの初期化が修正されました。(Heikki)(8.4)

    この問題のため、後続のアーカイブリカバリで WAL を処理するのに失敗していました。

  2. "cannot make new WAL entries during recovery" (「リカバリ中に新たなWAL エントリを作成できない」)というエラーが出る問題が修正されました。(Tom)(8.4)
  3. 消えたはずの行が、サーバのクラッシュ後、見えるようになってしまうという問題が修正されました。(Tom)(8.4)
  4. pg_start_backup() の間に WAL セグメントを強制的に切り替えるようなりました。(Heikki)(8.3)(8.2)

    これにより、ベースバックアップが使えなくなる場合を避けることができます。

  5. SECURITY DEFINER 関数の内側で、RESET ROLE コマンド、RESET SESSION AUTHORIZATION コマンドが使用できなくなりました。(Tom, Heikki)(8.4)(8.3)(8.2)(8.1)(8.0)(7.4)

    これは、SECURITY DEFINER 関数の内側で SET ROLE コマンドと SET SESSION AUTHORIZATION コマンドを使用できなくした以前のパッチで洩れていた場合をカバーするものです (CVE-2007-6600 参照)

  6. 既にロードされているロード可能モジュールの LOAD がノップ(無操作)になりました。(Tom)(8.4)(8.3)(8.2)

    以前は、LOAD は、モジュールをアンロードしてから再ロードしようとしていましたが、これは危険であり、さらには役にたっていませんでした。

  7. LDAP 認証の際、空のパスワードを許さないようになりました。(Magnus)(8.3)(8.2)
  8. outer-level の集約関数の引数に副 SELECT が現われた時の扱いが修正されました。(Tom)(8.3)(8.2)(8.1)(8.0)(7.4)
  9. Sort あるいは Materialize プランノードの出力から全行の値を取り出す際のバグが修正されました。(Tom)(8.3)(8.2)
  10. syncrhonize_seqscans が、スクロール可能なカーソルと WITH HOLD カーソルの結果を変えることがなくなりました。(Tom)(8.3)
  11. AND や OR のリストに 100 を超える句があった場合、部分インデックス最適化と制約排除最適化を無効にしたプランナーの変更が復活しました。(Tom)(8.3)(8.2)
  12. データ型 interval に対するハッシュの計算が修正されました。(Tom)(8.3)(8.2)(8.1)(8.0)(7.4)

    これは、interval 型の値についてのハッシュ結合の間違った結果が修正されます。また、interval 型カラムのハッシュインデックスの内容も変更されます。

    このようなインデックスを使っている場合は、アップグレードの後で REINDEX を実行しなければなりません。

  13. ウィンドウ関数の PARTITION BY 句と ORDER BY 句の項目が常に単純な式として解釈されるようになりました。(Tom)(8.4)

    8.4.0 では、これらのリストはトップレベルの GROUP BY リストと ORDER BY リストで使われる規則に従って解釈されました。しかし、これは SQL 標準に照らし合わせて正しくなく、また、循環的に参照してしまう可能性がありました。

  14. semijoin の計画作成でのいろいろな問題が修正されました。(Tom)(8.4)

    これらの問題により、IN または EXISTS が何か他の結合と共に使われた時に、問い合わせの結果が間違っていることがありました。

  15. 外部結合内にある副問い合わせに対する全行参照の扱いが修正されました。(Tom)(8.4)

    SELECT COUNT(ss.*) FROM ... LEFT JOIN (SELECT ...) ss ON ...

    という例で、"ss.*" はヌル拡張結合行に対して ROW(NULL,NULL,...) として扱われており、これは単なる NULL と同じではありませんでした。これを単なる NULL として扱うようになりました。

  16. Windows での共有メモリ獲得コードが修正されました(Tsutomu Yamada, Magnus)(8.4)(8.3)

    このバグのため、しばしば報告されていた、"could not reattach to shared memory" というエラーメッセージが出ていました。

  17. plperl でのロケールの扱いが修正されました。(Heikki)(8.4)

    このバグは plperl 関数が呼ばれた時にサーバのロケール設定の変更を引き起こし、データ破壊につながることがありました。

  18. reloptions の扱いを、一個のオプションを設定したときに、他のオプションの値をデフォルト値にしてしまうことがないように修正されました。(Itagaki Takahiro)(8.4)
  19. smart shutdown による停止処理が既に始まっている場合でも、fast shutdown を要求すると、開かれているセッションを強制的に終了させるようになりました。(Fujii Masao)(8.4)(8.3)
  20. GROUP BY を使った問い合わせでの array_agg() 関数のメモリリークを回避するように修正されました。(Tom)(8.4)
  21. to_char(...,'TH') を HH, HH12と組み合わせて使った場合、大文字の序数接尾辞として扱うように修正されました。(Heikki)(8.4)(8.3)(8.2)(8.1)(8.0)

    以前は、'th' (小文字) として扱われていました。つまり、

    postgres=# select to_char(current_timestamp, 'HHTH');
    to_char
    ---------
    03rd
    (1 row)

    と出力されていたのが、

    postgres=# select to_char(current_timestamp, 'HHTH');
    to_char
    ---------
    03RD
    (1 row)

    のように意図通りに出力されるようになりました。

  22. TIME型と TIME WITH TIME ZONE 型の入力に対し、EXTRACT(second) と EXTRACT(milliseconds) の結果に小数部を含めるようになりました。(Tom)(8.4)

    これは、浮動小数点の DATETIME 構成に対してはこれまで常に動作していましたが、整数の DATETIME コードで問題がありました。

  23. x が 20億より大きく、整数型の datetime が使われている場合、INTERVAL 'x ms' がオーバフローするのが修正されました。(Alex Hunsaker)(8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  24. 点と線分の間の距離の計算が修正されました。(Tom)(8.3)(8.2)(8.1)(8.0)(7.4)
  25. 日本のように、通貨金額に小数部分がないロケールで money 型が動作するよう修正されました。(Itagaki Takahiro)(8.3)(8.2)(8.1)(8.0)(7.4)
  26. %_ を含むパターンに対する LIKE が修正されました。(Tom)(8.3)
  27. 「00:12:57.9999999999999999999999999999」のような datetime の入力を適切に丸めるようになりました。(Tom)(8.3)(8.2)(8.1)(8.0)(7.4)
  28. XML 演算でのメモリリークが修正されました。(Tom)(8.3)
  29. GiST の R-tree 演算子クラスでページ分割点の選択がよくなかったのが修正されました。(Teodor)(8.3)(8.2)(8.1)(8.0)(7.4)
  30. 入力値が(ほぼ)ソート済みの順番に並んでいる時の、GIN インデックスへの大量インサートの性能劣化を回避するように修正されました。(Tom)(8.3)(8.2)
  31. PL/pgSQL のいくつかの文脈で、NOT NULL ドメイン制約を正しく強制するようになりました。(Tom)(8.3)(8.2)
  32. plperl の初期化の際の移植性の問題が修正されました。(Andrew Dunstan)(8.3)(8.2)(8.1)(8.0)(7.4)
  33. インデックススキャンで TOAST 値の処理性能が改善されました。(Tom)(8.4)

    これは、とりわけ、PostGIS に有効です。

  34. commit_delay を無効化していたタイポが修正されました。(Jeff Janes)(8.4)
  35. サーバがサイレントモードで起動している場合、初期起動時のメッセージを postmaster.log に出力するようになりました。(Tom)(8.4)

    これまで、このようなエラーメッセージは捨てられており、デバッグを難しくしていました。

  36. FAQ 集の翻訳版が削除されました。(Peter)(8.4)

    翻訳版の FAQ 集は今後 wiki に置かれます。英語版のFAQ 集は既にしばらく前に上記 wiki に移動されました。

  37. pg_ctl が、postgresql.conf が空の場合でも無限ループに陥らないようになりました。(Jeff Davis)(8.4)(8.3)(8.2)(8.1)(8.0)
  38. pg_dump の --binary-upgrade モードのエラーがいくつか修正されました(Bruce, Tom)(8.4)

    pg_dump --binary-upgrade は pg_migrator で使われています。

  39. ラージオブジェクトが多数ある時の pg_dump の効率が改善されました。(Tamas Vincze)(8.3)
  40. pg_standby に対するフェールオーバシグナルとして、SIGQUIT ではなく、SIGUSR1 を使うようになりました。(Heikki)(8.3)
  41. pg_standby の maxretries オプションをドキュメントに記述されているとおりに動作するようになりました。(Fujii Masao)(8.3)
  42. contrib/hstore を、キーやバリューがそのデータ構造に納めるには大きすぎるときに、黙って切り詰めるのではなく、エラーを投げるようになりました。(Andrew Gierth)(8.3)(8.2)
  43. /contrib/xml2 の xslt_process() 関数が、パラメータの数が、最大値である 20 こであった場合に正しく扱うよう修正されました。(Tom)(8.4)(8.3)(8.2)(8.1)(8.0)
  44. COPY FROM STDIN の実行中にエラーが起きた場合、リカバーを行なう libpq のコードの堅牢性が改善されました。(Tom)(8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  45. readline と editline の両方のライブラリがインストールされたとき、矛盾するヘッダファイルのインクルードを回避するように修正されました。(Zdenek Kotala)(8.4)(8.3)(8.2)(8.1)(8.0)(7.4)
  46. プラットフォームにより、ゼロ除算の代わりに浮動小数点例外を引き起こす、 GCC のバグを回避するように修正されました。(Tom)(8.4)
  47. バングラデシュ、エジプト、モーリシャスでの夏時間に関する法律の変更に対応して、tzdata のリリース 2009l に対するタイムゾーンデータファイルの更新が行われました。(8.4)
  48. バングラデシュ、エジプト、ヨルダン、パキスタン、アルゼンチンのサン・ルイス、キューバ、ヨルダン(履歴訂正のみ)、モーリシャス、モロッコ、パレスチナ、シリア、チュニジアでの夏時間に関する法律の変更に対応して、tzdata のリリース 2009l に対するタイムゾーンデータファイルの更新が行われました(8.3)(8.2)(8.1)(8.0)