PostgreSQL 8.3.4 に関する技術情報

このリリースは 8.3.3 からの修正リリース(2008/09/22リリース)です。
本ドキュメントは PostgreSQL のリリースノートを基に作成しています。
8.3.x からのアップデートではダンプ、リストアは不要です。

しかし、8.3.1 より前のバージョンからアップグレードする場合は、8.3.1 に関する技術情報を参照してください。

PostgreSQL 8.3.3 から 8.3.4 への変更点


  1. Btree インデックスの WAL リカバリにおける誤りが修正されました (Heikk)

    これまでのバージョンでは、WAL がページ分割操作の中途で終了している場合に、リカバリ処理に失敗します。

  2. 潜在的な HOT における XID 処理の問題が修正されました (Alvaro)

    無効な行バージョンを取り除くのが早すぎるかもしれないことで、この障害は VACUUM コマンドから参照されるシステムカタログを破損する危険がありました。システムカタログが参照されるとき MVCC 規則に従わず、一時的に誤った出力を pg_dump 等クライアントに返しますが、実際のデータベース運用への影響は軽微です。

  3. 潜在的な datfrozenxid 関数の計算誤りを修正しました (Alvaro)

    この誤りは最近報告されている「古い pg_clog データを削除できない」という現象の原因と考えられます。

  4. pg_class を REINDEX した後における不正な HOT 更新処理を修正しました (Tom)

    同じセッションで「ALTER TABLE RENAME〜」または「ALTER TABLE SET SCHEMA〜」 を「REINDEX TABLE pg_class」に続けて実行すると、pg_class が破損する場合がありました。

  5. サブトランザクションでの誤りが修正されました (Karl Schnaitter)

    トランザクション内にて、複数のサブトランザクションで削除された行が、サブトランザクションがアボートされた後も不可視のままとなってしまう現象を引き起こしていました。

  6. ちょうど悪いタイミングで現在チェックしているテーブルが削除される場合に、autovacuum がクラッシュするのを防ぐように修正されました (Alvaro)
  7. ローカルロックカウンタが 64bit に拡張されました (Tom)

    この修正は、十分に長いトランザクションにおいて、カウンタがオーバーフローし、予想外の「ロックは取得済み」というエラーを導くという報告に応えるものです。

  8. GiST インデックススキャンで行が重複出力されてしまう問題が修正されました (Teodor)
  9. 外部キーチェックのためのクエリのキャッシュをテーブル変更された場合に、再生成するように修正されました (Tom)

    これまでは、以前に生成したクエリ文字列を元にしてクエリ再プランを試みていて、テーブル名やカラム名が変更された場合に正しく動作しませんでした。

  10. UNION ALL を含むビューの権限チェックの誤りが修正されました (Heikki)

    参照先テーブルの権限チェックは行われていましたが、ビュー自体の権限チェックが適切に行われていませんでした。

  11. INSERT または UPDATE で生成される行が処理対象のテーブルの行タイプと一致するようにエグゼキュータ開始時にチェックするようになりました (Tom)

    このチェックにより、キャッシュされた実行計画を再利用する際に ALTER COLUMN TYPE が実行された場合にデータの破損やクラッシュが起きることを防ぎます。
    8.3では本チェックが無くとも問題ないと考えられますが、確実を期すため適用しています。

  12. DROP OWNED コマンドで重複した削除が行われてしまう障害が修正されました (Tom)

    この障害は典型的には「cache lookup failed for relation NNN」というエラーとして現れます。

  13. XML 操作におけるいくつかのメモリリークが修正されました (Kris Jurka, Tom)
  14. 対応しないデータタイプに対して xmlserialize() 関数が適切にエラーを出すように修正されました (Tom)
  15. 全文検索でマルチバイトが安全に使えない箇所があり、修正されました (Tom)

    問題のある文字列を設定ファイルに記載すると読み込みの際に「invalid byte sequence for encoding」というエラーが発生していました。

  16. 全文検索の設定ファイルに対するエラー出力で、ファイル名と行番号が報告されるようになりました (Tom)
  17. AT TIME ZONE 構文が、先ずタイムゾーン略称として解釈を試み、それが失敗したときに完全なタイムゾーン名として解釈するように、修正されました (Tom)

    タイムゾーン表現が曖昧な場合に一貫性に欠ける動作をする障害は 8.1 で取り込まれたもので、本修正によって 8.0 と同じ動作をするようになります。
    なお、それより古いバージョンは、略称のみを解釈するため該当しません。

  18. 64bit プラットフォームにおける日付時刻の入力関数で、整数オーバーフローを適切に検知できるように修正されました (Tom)
  19. 単位付き設定パラメータを表示する際の単位変換処理で、整数オーバーフローを防ぐ修正がされました (Tom)
  20. syslog にとても長いメッセージを書き込む際の性能が改善されました (Tom)
  21. pg_hba.conf において、LDAP URL のサフィックス部分にスペースを入れられるようになりました (Tom)
  22. SELECT DISTINCT ON 問い合わせに対するカーソルの、後ろ向き走査での障害が修正されました。
  23. IS NULL テストを外部結合よりも後に押し下げてしまうプランナの誤りが修正されました (Tom)

    OUTER JOIN で結合条件に IS NULL 判定と OR を使っている場合に、インデックスの位置によっては、誤ったプランが構成され、クエリが不正な結果を出力することがありました。

  24. 入れ子になったサブクエリ式に関するプランナの誤りが修正されました (Tom)

    外側サブクエリは親クエリに依存していないが、内側サブクエリが親クエリに依存している場合、外側サブクエリの値は新しい親クエリの行むけに再計算されない可能性がありました。

  25. プランナが GROUP BY で booleanを返す式なら値を、確認せずとも必ず2グループになると推定するように修正されました (Tom)

    「GROUP BY col IS NULL」のような場合には、通常の見積りよりも正確になります。

  26. PL/pgSQL で、FOR ループの変数がコンポジットタイプを含むレコードだった場合でも、失敗しないように修正されました (Tom)
  27. PL/Tcl で Tcl 8.5 が正しく振る舞うように、また、Tcl とのデータやりとりにおける文字エンコーディングについて、より慎重な作りに修正されました。(Tom)
  28. PQescapeBytea() 関数の性能が改善されました (Rudolf Leitgeb)
  29. Windows において、libpq が1システムコールあたり 64kB 以上発信しないように修正しました。 (Magnus)

    これは Microsoft knowledge base Q201213 に初期の Windows で、大きなデータの送信に失敗するケースの記述があることに対応したものです。

  30. ecpg で、SET コマンドにおいて、変数を適切に扱うように修正されました。 (Michael)
  31. pg_dump、pg_restore コマンドの SQL を送出して、失敗した後のエラー出力が改善されました。(Tom)
  32. pg_ctl が restart の際に、適切に postmaster のコマンドライン引数を保存するように修正されました (Bruce)
  33. pg_standby における WAL ファイルのカットオフポイント計算の誤りが修正されました。 (Simon)
  34. タイムゾーンデータ(tzdata)がリリース 2008f に更新されました。

    アルゼンチン、バハマ、ブラジル、モーリシャス、モロッコ、パキスタン、パレスチナ、パラグアイで夏時間法が変更されたことに対応しています。