PostgreSQL 7.4.2 に関する技術情報

このリリースは PostgreSQL 7.4.2 (2004/03/08リリース)に関する技術情報をお届けします。本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。

PostgreSQL 7.4.1 から 7.4.2 への変更点

7.4.1にある問題の累積的な修正が行われています。これには、7.3.5 から 7.3.6 への変更点がすべて含まれていますので、あわせて確認ください。いくつかの修正を有効にするために、initdbあるいは特定のSQL文を実行して頂く必要があります。

注意: ここにあげた変更点は、すべてを網羅していない可能性があります。詳しくはソースに付属の HISTORY というファイルを見てください。

7.4.1との互換性に関する問題点

ここでは、7.4.1から7.4.2にアップグレードした場合に、initdb、あるいは他の作業が必要な修正について説明します。7.4からアップグレードする場合には、7.4 から 7.4.1 の変更点もあわせて参照してください。

  1. pg_statisticsテーブルに関連する定義に関する問題で、オプティマイザがクラッシュする可能性がある問題が修正されました。注:この修正を有効にするためには、以下の手順で行います。

    最初に、以下のSQLをスーパーユーザーから実行してください

     -- pg_statisticテーブルを空にします。
     DELETE FROM pg_statistic;
     VACUUM pg_statistic;
     -- この変更は 1 行更新します
     UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
     -- この変更は 6 行更新します
     UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;

    終了後、クラッシュの可能性を避けるため新しく接続しなおし、さ
    らに以下のSQLを実行してください。

     -- repopulate pg_statistic:
     ANALYZE;

    以上で完了になります。

  2. スーパーユーザー以外のユーザーにもpg_settingテーブルが更新出来るようになりました。これを修正するためには、スーパーユーザーから以下のSQLをすべてのデータベース上で実行してください。
    GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;

    ただし、template0データベースだけはこの方法で修正する事が出来ません。これには以下のようにして、template0データベースに接続出来るようにしてから更新を行う必要があります。

     UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
    

    最後に、template0データベースの更新が終わったら以下のSQLを実行してください。

    -- re-freeze template0:
     VACUUM FREEZE;
     -- and protect it against future alterations:
     UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
    

     

    上記の問題を除いて、7.4系からのアップデートにはdump/restoreの必要は基本的にありません。

    その他の修正

  3. 副問い合わせを含む問い合わせでオプティマイザが”variable not found in subplan target”エラーを誤って発生させてしまう原因になる問題がいくつか修正されました。
  4. out-of-memory エラーが大きい複数のindex scanの開始時に発生する問題が修正されました
  5. COPY IN 命令に対して不正な文字シーケンスが与えられたときに、 out of memory errorが発生してしまう問題が修正されました。
  6. SELECT INTO文あるいはCREATE TABLE AS文を使ってOIDの無いテーブルからテーブルを作成し、dropし、再び作成するとエラーが発生する問題が修正されました。
  7. alter_tableテストを並列再帰テストすると発生する問題が修正されました。
  8. 特にMacOS Xで、ulimit -nで、max_files_per_process以下に設定したときに、ファイル数の上限以上のファイルをオープンしようとしてしまう問題が修正されました。
  9. トルコ語のロケールを選択しているときにinitdbが失敗する問題が修正されました。ロケールの整合性についてはまだ問題点が残っています。
  10. borland c++ compilerを含む、各種プラットフォームのビルドに関する問題が修正されました。
  11. –enable-thread-safetyオプションを付けて作成したライブラリが、一部スレッドセーフになっていない問題を修正しました。
  12. JDBC
    • ResultSet#next(),previous()が、エラーのあるなしにかかわらず内部変数を上下させていたために、不正なArrayIndexOutOfBoundsException?が発生していた問題が修正されました。
    • JDBCの仕様通り、ConnectionやStatementを重複close()しても、例外が発生しないようになりました。
    • 一部のテストが、テスト時のポート番号を認識出来るようになりました。
  13. pg_dumpで、リストア時にクライアントエンコーディングを設定するようになりました。
  14. ecpg
    • Cの予約語を再びファイル名に使えるようになりました
    • WHENEVER NOT FOUND がSELECT/INSERT/UPDATE/DELETEで使えるようになりました。
    • 列セットを返す関数を呼ぶ問い合わせでクラッシュする問題が修正されました