技術情報

PostgreSQL 8.4 に関する技術情報

8.4.1 »

beta1 リリース日:2009/04/16

掲載日:2009/05/12

このページでは PostgreSQL 8.4 に関する技術情報をお届けします。

本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。

概要

本リリースでは、仕様の追加、近年 SQL 標準で定義された機能の追加をしています。 主要な拡張内容は以下のとおりです。

以下に詳細を説明します。

8.4 への移行 / 互換性のない変更点

PostgreSQL 8.3.X 以前のバージョンから、8.4 に移行するには、pg_dump によるダンプとリストアが必要となります。 設定項目や SQL 言語において互換性のない変更点があります。

一般

サーバ設定

問い合わせ言語

関数と演算子

時刻の関数と演算子

PostgreSQL 8.4 の変更点

以下に、PostgreSQL 8.4 と 8.3.X との違いを詳しく記載します。

パフォーマンス

サーバ

設定
認証
pg_hba.conf
アーカイブロギング
モニタリング

問い合わせ言語

TRUNCATE 関連
EXPLAIN 関連
LIMIT/OFFSET 関連

DDL 関連

ALTER文
データベース操作

その他のコマンド

インデックス
全文検索インデックス
VACUUM 関連

データ型

時刻のデータ型
Arrays
TOAST

関数

オブジェクト情報関数
関数作成
PL/pgSQL

コマンドアプリケーション

psql
psql (特に \d コマンド)
pg_dump
  • pg_dump、pg_dumpall、pg_restoreコマンドに、--no-tablespaces オプションが追加されました。

    テーブルスペースを無視して処理を行ないます。 これを利用したバックアップデータは、リストア時に、あらかじめ同じテーブルスペース配置を用意する必要がありません。

  • pg_dump、pg_dumpall から、-d および -D オプションが除かれました。

    他のクライアントアプリケーションで、データベース名を指定するのにこれらの文字をオプションに使うため、 しばしば混乱のもととなっていました。 機能自体は削除されません。--inserts、--column-inserts オプションを代わりに指定します。

  • pg_dump、pg_dumpall から、-i および --ignore-version オプションが除かれました。

    これらオプションを指定してもエラーを出力しなくなるだけで、動作に影響はありませんでした。

  • ダンプ、リストアを行なう際に、設定 statement_timeout が無効になるようになりました。
  • pg_dump、pg_dumpall に --lock-wait-timeout オプションが追加されました。

    指定時間内に共有ロックを取得できない場合に処理を失敗させることができます。

  • pg_dump --data-only の出力について、外部キー制約で参照されているテーブルを、 参照しているテーブルより先になるように、並び替えをするようになりました。

    これにより、外部キーがある状態でもデータロードができます。ただし、循環参照には対応できません。 その場合、NOTICE メッセージが発行されます。

  • pg_dump、pg_dumpall、pg_restore で接続ユーザ指定(-U)とは別に、ロールを指定して実行できるようになりました。
  • pg_restore でカスタムフォーマットのバックアップを、複数同時接続でリストアできるようになりました。

    オプション --jobs で同時実行数を設定します。

開発ツール

libpq
  • ラージオブジェクトをインポートするときに、lo_import_with_oid()関数で OID を指定できるようになりました。
  • イベントがサポートされました。

    PGconnオブジェクト(接続)、PGresultオブジェクト(結果)の生成、破棄に対して、コールバックを登録することができます。

  • エラー処理が改善されました。

    複数のエラーメッセージを、複数行にして報告できます。

  • PQexecParams() 関数が、空の問い合わせに対して PGRES_EMPTY_QUERY を返すようになりました。

    従来は、PGRES_COMMAND_OK を返していました。

  • Windows の WSACleanup() API のオーバーヘッドを避ける方法が、ドキュメントに記載されました。
libpq SSL
  • SSL 接続で証明書の認証が修正されました。

    libpq は SSL接続をする際にデフォルトで、証明書とサーバ名の両方で認証を行なうようになります。 認証にあたり、ルート証明書が有効でない場合には、SSL 接続は失敗します。 必要に応じて、接続文字列の設定 sslverify で、サーバと証明書の認証を無効にできます。

  • クライアント証明書の場所を、接続文字列の設定によって指定できるようになりました。
  • 接続文字列の設定 sslverify でサーバ証明書の認証について設定できるようになりました。

    デフォルトでは完全な認証を求めます。

  • PQinitOpenSSL 関数が追加されました。

    OpenSSL/libcrypt 初期化でより高度な指定ができるようになります。

  • libpq の接続が終了したときに、OpenSSL のコールバック関数を、適切に登録解除するようになりました。

    これはアプリケーションが libpqライブラリ をアンロードする際に必要で、 そうでないと不正なコールバック関数が残ってしまいます。

ecpg
  • メッセージのローカライズのサポートが追加されました。
  • ecpg パーサが、サーバ側パーサから自動的に生成されるようになりました。

    これまでは、別個の ecpg パーサとして保守されていました。

SPI(サーバプログラミングインターフェイス)
  • ライン外パラメータによる single-use プランのサポートが追加されました。
  • SPI_execute() 関数に、SPI_OK_REWRITTEN 返しコードが追加されました。
  • 不要なインクルードが executor/spi.h から除かれました。

ビルドオプション

  • Autoconf 2.61 が使われるようになりました。
  • GNU bison がビルドに必要となりました。

    他のパーサツールはサポートされなくなります。

  • pg_config に --htmldir オプションが追加されました。
  • サーバ内部で、float4 型を値で渡すようになりました。

    ビルドオプション --disable-float4-byval を指定すると、従来の振る舞いになります。

  • サーバ内容で float8 型、int8 型を可能であれば値で渡すようになりました。

    ビルドオプション --disable-float8-byval を指定すると、従来の振る舞いになります。

  • ビルドオプション --with-segsize、--with-blocksize、--with-wal-blocksize、 --with-wal-segsize が追加されました。

    それぞれ、リレーションファイルの上限サイズ(1GB)、ブロックサイズ(8kB)、 WALのブロックサイズ(8kB)、WALファイルサイズ(16MB)を指定します。

  • Solaris 2.5 で、スレッド対応のビルドができるようになりました。
  • Solaris で、システム付属の getopt_long() 関数を使うようになりました。

    オプション指定の挙動が Solarisユーザの期待に沿ったものになります。

  • Linux 上において、Sun Studio コンパイラに対応しました。
  • メジャーバージョン番号が gettext ドメインと、ライブラリの soname メジャーバージョン番号に追加されました。

    複数バージョンインストールが容易になります。

  • コードカバレッジテストツール gcov に対応しました。
  • Mingw と Cygwin で、ツリー外ビルドができるようになりました。
  • Mingw をクロスコンパイルのソースプラットフォームとして使う場合について、修正されました。

ソースコード

  • 64 bit タイムゾーンデータファイルがサポートされました。

    これにより 2038 年以降も夏時間の計算ができます。

  • プラットフォームの time_t データ型を使わないようになりました。

    64 bit の pg_time_t 型を定義して使います。

  • クロスコンパイル時の、タイムゾーンデータベースのバグが修正されました。
  • バックエンドオブジェクトファイルのリンクを、一度に行なうようになりました。
  • gettext サポートが改善され、複数形の適切な翻訳ができます。
  • 手続き言語むけに、メッセージ翻訳がサポートされました。
  • DTrace 試験が追加されました。
  • Mac OS X Leopard で、DTrace がサポートされました。
  • 新たな cstring から text への変換関数が追加されました。
  • relistemp カラムが、pg_classシステムテーブルに追加されました。

    一時テーブルを容易に識別できます。

  • 共有キャッシュ無効化のロジックが改良されました。
  • name 型が char-aligned になりました。
  • エグゼキュータに、プラグインを追加できるフックが追加されました。
  • プランナ統計参照の振る舞いを上書きできるフックが追加されました。
  • カスタム共有メモリ要求用に、shmem_startup_hook() 関数が追加されました。
  • pg_class システムテーブルの reltrigger カラムが、boolean型の relhastriggersカラムに置き換えられました。
  • SQL コマンドマニュアルが、man1 から man7 に移動されました。
  • プラットフォーム FAQ がメインドキュメントの中に移動されました。
  • ビルド時に、競合があるパーサ入力ファイルを拒絶するようになりました。
  • KOI8U (ウクライナ) エンコーディング対応が追加されました。
  • 日本語メッセージが追加されました。

    従来は、別プロジェクトで保守されていました。

  • MSVC ビルドで、LC_MESSAGES 設定 の誤りが修正されました。

Contribツール

  • 以下の contrib ツールが変更・改善されました。
    contrib ツール名変更点
    pgbench

    ・クエリーモードオプション(-M)が追加されました。
    拡張プロトコルを使う、拡張プロトコルを prepared statements と共に使う、という設定を与えることができます。

    ・実行時間指定オプション(-T)が追加されました。
    トランザクション数ではなく、何秒間実行して計測する、という指定ができます。

    pgstattuple 20 億ページ以上のテーブル、インデックスに対応しました。
    fuzzystrmatch 文字列のレーベンシュタイン距離の関数が、ユーザが挿入、削除、更新のコストを指定できるようになりました。
    dblink dblink_current_query() 関数が削除されました。current_query() 関数を代わりに使用します。
    ltree マルチバイトエンコーディングをサポートするようになりました。
    dblink ユーザから指定されるパスワードを確実に使うようになりました。 サーバの .pgpass ファイルを偶然に使ってしまわないようにする、セキュリティ強化です。
    pageinstpect fsm_page_contents() 関数が追加されました。 get_raw_page() 関数がフリースペースマップファイルをサポートするようになりました。 また、contrib/pg_freespacemap も改定されています。
    intarray 演算子「<@」「@>」の定義が廃止されました。 ビルトイン演算子との混乱を避けるためで、必要であれば実装コードは「@」「~」という名前でまだ残されています。
  • 以下の contrib ツールが追加されました。
    contrib ツール名機能
    citext 大文字小文字を区別しない、マルチバイトをサポートした、テキストデータ型です。
    btree_gin より多くのデータ型をサポートする GIN インデックスです。
    pg_trgm マルチバイト文字をサポートするようになりました。
    intagg array_agg()関数、unnest()関数が追加されました。
    auto_explain 指定した時間を超える SQL に、自動で EXPLAIN ANALYZE を取ることができます。
    pgstat_statements SQL 実行統計を取ることができます。