PostgreSQL 7.3.1 に関する技術情報

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

    PostgreSQL 7.3 から 7.3.1 への変更点

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

    互換性のない変更点

  1. libpq

    • libpq のメジャー番号とマイナー番号が、2.2 から 3.0 に、変更されました。
      libpq を使用しているクライアントアプリケーションは、必要に応じて再コンパイルをしてください。
  2. 変更点

  3. メッセージ翻訳がアップデートされました。
  4. SCO OpenServer 5.0.4 がサポートプラットフォームに追加されました。
  5. SLL で、SSLv2、SSLv3、TLSv1 の各コネクションが使用できるように修正されました。
  6. バグ修正

  7. データ型、関数、演算子

    • lseg_eq と lseg_ne の線分の比較のバグが修正されました。
      修正前は、

      — lseg_eq で、線分が異なっても真となる場合
      =# SELECT lseg_eq( ‘( (1, 1), (3, 2) )’, ‘( (1, 3), (1, 2) )’ );
      lseg_eq
      ———
      t
      (1 row)

      — lswg_ne で、線分が異なっても真にならない場合
      =# SELECT lseg_ne( ‘( (1, 3), (3, 4) )’, ‘( (1, 3), (2, 4) )’);
      lseg_ne
      ———
      f
      (1 row)

      =#



      修正後は、以下のように正しく判定されます。

      =# SELECT lseg_eq( ‘( (1, 1), (3, 2) )’, ‘( (1, 3), (1, 2) )’ );
      lseg_eq
      ———
      f
      (1 row)

      =# SELECT lseg_ne( ‘( (1, 3), (3, 4) )’, ‘( (1, 3), (2, 4) )’);
      lseg_ne
      ———
      t
      (1 row)

      =#

  8. サーバとクライアントのエンコーディングが異なるときに、COPY … TO … の実行で、バックエンドがセグメンテーションフォールトでコアダンプする場合があるバグが修正されました。
  9. contrib

    • adddepend で、複数のフィールドを指定した外部キーを正しく扱えないバグが修正されました。
      以下のテーブル定義を 7.2 で行い、pg_dump のダンプ結果を 7.3 でリストアします。

      CREATE TABLE foo (
      a integer NOT NULL,
      b integer NOT NULL,
      c integer,
      d integer,
      PRIMARY KEY (a, b),
      FOREIGN KEY (c, d) REFERENCES foo (a, b) MATCH FULL
      );

      修正前は、以下のように、b と d のフィールドが入れ違いとなり、エラーとなります。

      $ adddepend

      No arguments set. Use ‘adddepend –help’ for help

      Connecting to database postgres’ as user ‘postgres’

      The below commands will upgrade the foreign key style. Shall I execute them?

      DROP TRIGGER “RI_ConstraintTrigger_17025” ON foo;
      DROP TRIGGER “RI_ConstraintTrigger_17024” ON foo;
      DROP TRIGGER “RI_ConstraintTrigger_17023” ON foo;

      ALTER TABLE foo ADD FOREIGN KEY (c, b)
      REFERENCES foo(a, d) MATCH FULL ON UPDATE NO ACTION ON
      DELETE NO ACTION;

      << 'Y'es or 'N'o >> : y
      NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)
      DBD::Pg::st execute failed: ERROR: UNIQUE constraint matching given keys for
      referenced table “foo” not found at adddepend line 287, line 1.


      修正後は、以下のようになります。

      $ adddepend

      No arguments set. Use ‘adddepend –help’ for help

      Connecting to database ‘postgres’ as user ‘postgres’

      The below commands will upgrade the foreign key style. Shall I execute them?

      DROP TRIGGER “RI_ConstraintTrigger_17025” ON foo;
      DROP TRIGGER “RI_ConstraintTrigger_17024” ON foo;
      DROP TRIGGER “RI_ConstraintTrigger_17023” ON foo;

      ALTER TABLE foo ADD FOREIGN KEY (c, d)
      REFERENCES foo(a, b) MATCH FULL ON UPDATE NO ACTION ON
      DELETE NO ACTION;

      << 'Y'es or 'N'o >> : y
      NOTICE: ALTER TABLE will create implicit trigger(s) for FOREIGN KEY check(s)

    • dbmirror の以下のバグが修正されました。

      perl DBMirror.pl slaveDatabase.conf
      Global symbol “$setResult” requires explicit package name at DBMirror.pl line 131.
      Global symbol “$setResult” requires explicit package name at DBMirror.pl line 132.
      Global symbol “$setResult2” requires explicit package name at DBMirror.pl line 140.
      Global symbol “$setResult2” requires explicit package name at DBMirror.pl line 141.
      Execution of DBMirror.pl aborted due to compilation errors.

    • tsearch を C や ru_RU.KOI8-R 以外のロケールで実行すると、以下のように、サーバが落ちる場合があるバグが修正されました。

      =# select txt2txtidx(‘2-3’);
      server closed the connection unexpectedly
      This probably means the server terminated abnormally
      before or while processing the request.
      The connection to the server was lost. Attempting reset: Failed.
      !#

    • vacuumlo で、コマンドラインパラメータを正しく扱えないバグが修正されました。修正前は、以下のように指定するとエラーになります。

      $ vacuumlo -v postgres
      vacuumlo: missing required argument: database name
      Try ‘vacuumlo -?’ for help.
      $

      修正後は、以下のようになります。

      $ vacuumlo -v postgres
      Connected to postgres
      Checking loid in image_table
      Removed 1 large objects from postgres.
      $
  10. pg_dump

    • 7.1 または、それより前のバージョンのサーバに対して、pg_dump が失敗するバグが修正されました。
  11. 多くの一時テーブルを作成し、多くの COPY 文を実行した後に、VACUUM FULL ANALYZE を実行した場合に、サーバが落ちないように修正されました。
  12. pg_hba.conf

    • 記述エラー時に、間違った行番号が表示されないように修正されました。

    • ファイルにアクセスできない場合に、コアダンプしないように修正されました。
  13. エンコーディング名の解決方法が非ロケール依存で行われるようになり、トルコ語ロケール使用時に、エンコーディング名が正しく解釈されるように修正されました。
  14. psql の ¥d コマンドでのバッファオーバーランが修正されました。
  15. 誤って長いタイムゾーン名を設定した場合に、バッファオーバーランしないように修正されました。
  16. 関数呼出しが定数値に最適化された場合に、EXPLAIN がコアダンプしないように修正されました。
  17. password による暗号化ができなくっていたバグが修正されました。なお、crypt による暗号化には、まだバグがあり使用できないため、MD5 による暗号化を使用して回避する必要があります。
  18. ALTER USER と ALTER DATABASE で未設定値の設定を行うとサーバが落ちるバグが修正されました。

    =# CREATE USER foo;
    CREATE USER
    =# ALTER USER foo SET search_path TO default;
    server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
    The connection to the server was lost. Attempting reset: Failed.
    !#

    =# CREATE DATABASE db;
    CREATE DATABASE
    =# ALTER DATABASE db SET search_path TO default;
    server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
    The connection to the server was lost. Attempting reset: Failed.
    !#

  19. LATIN9 と UNICODE の変換テーブルが LATIN2 との変換テーブルとなっていたバグが修正されました。
  20. 既知のバグ

  21. vacuumlo で、参照されていないラージオブジェクトがひとつも削除されません。このバグは、7.4 で修正されます。7.4 開発バージョンでのこの修正を 7.3 に適用することもできます。
    修正前は、参照されていないラージオブジェクトがあっても削除されません。

    $ vacuumlo -v postgres
    Connected to postgres
    Checking loid in image_table
    Removed 0 large objects from postgres.
    $

    修正後は、削除されるようになります。

    $ vacuumlo -v postgres
    Connected to postgres
    Checking loid in image_table
    Removed 1 large objects from postgres.
    $
  22. contrib の lo 型は、7.2 でダンプし 7.3 へのリストアができません。 pg_restore で lo がリストアできない に対処方法が説明されています。
  23. Mac OS X では、libpq、libecpg、libpgtcl が、共有ライブラリではなく、ローダブルなライブラリとして作成されているため、常に libpq が静的にリンクされてしまいます。手作業で、共有ライブラリを作成することで回避できます。

  24. Mac OS X では、静的ライブラリ libpq.a、libecpg.a、libpgtcl.a がインストール時にコピーされ、タイムスタンプが変更されてしまいます。このため、インストール後にこれらのライブラリをリンクしようとするとエラーとなります。ranlib を実行することで、このエラーを回避できます。
  25. HP-UX では、libpq の共有ライブラリのシンボリックリンクが以下のように間違っています。

    $ LANG=C ls -lF libpq*
    -rw-r–r– 1 postgres users 161556 Dec 23 19:08 libpq.a
    -r-xr-xr-x 1 postgres users 184903 Dec 23 19:08 libpq.sl*
    lrwxr-xr-x 1 postgres users 8 Dec 23 19:08 libpq.sl.3@ -> libpq.sl
    $

    正しいシンボリックリンクは、以下のようになります。

    $ LANG=C ls -lF libpq*
    -rw-r–r– 1 postgres users 161556 Dec 23 19:08 libpq.a
    lrwxr-xr-x 1 postgres users 8 Dec 23 19:08 libpq.sl @ -> libpq.sl.3
    -r-xr-xr-x 1 postgres users 184903 Dec 23 19:08 libpq.sl.3*
    $