リリース8.4

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 付録 E. リリースノート | 早送り | 次のページ

# E.2. リリース8.4

> リリース日: 2009-07-01

## E.2.1. 概要

長年の開発の結果PostgreSQLは多くの領域においてその機能が完全なものになりました。 このリリースでは新機能（認証、監視、領域再利用など）に関しては的を絞った手法を取り、また最近の標準SQLで定義された機能を追加しています。 改良された主な点を以下に示します。

- ウィンドウ関数

- 共通テーブル式および再帰問い合わせ

- 関数のデフォルトパラメータおよび可変長パラメータ

- 並行リストア

- 列権限

- データベース単位のロケール設定

- ハッシュインデックスの改良

- `EXISTS`および`NOT EXISTS`問い合わせにおける、結合性能の改良

- ウォームスタンバイの使用の簡易化

- 空き領域マップの自動サイズ調整

- 可視性マップ（変更頻度が少ないテーブルにおけるバキュームオーバーヘッドを大きく低減します）

- バージョンを問わないpsql（古めのサーバに対してもバックスラッシュコマンドが動作します）

- ユーザ認証におけるSSL証明書のサポート

- 関数単位の実行時統計情報

- psqlにおける関数編集の簡易化

- 新しいcontribモジュール:pg_stat_statements、auto_explain、citext、btree_gin

上記項目は以下の節で詳細に説明します。

## E.2.2. バージョン8.4への移行

すべての過去のリリースからデータを移行する場合、pg_dumpを使用したダンプ/リストアが必要です。

既知の非互換性を以下に示します。

### E.2.2.1. 一般

- デフォルトでは64ビット整数型の日付時間型を使用します。(Neil Conway)

  これまでは、configureの`--enable-integer-datetimes`オプションでこれを選択していました。 過去の動作を維持するためには`--disable-integer-datetimes`付きで構築してください。

- ipccleanユーティリティコマンドを削除しました。(Bruce)

  このユーティリティは一部のプラットフォームでしか動作しませんでした。 ユーザは代わりに使用するオペレーティングシステムのツールを使用すべきです。

### E.2.2.2. サーバの設定

- ログファイルのサイズを小さくするため`log_min_messages`のデフォルト設定を`warning`に変更しました（これまでは`notice`でした）。(Tom)

- `max_prepared_transactions`のデフォルト設定をゼロに変更しました（これまでは5でした）。(Tom)

- `LOG`メッセージレベルで`debug_print_parse`、`debug_print_rewritten`および`debug_print_plan`の出力が行われるようにしました。 これまでは`DEBUG1`レベルでした。(Tom)

- `debug_pretty_print`のデフォルトを`on`にしました。(Tom)

- `explain_pretty_print`パラメータを削除しました（必要がなくなりました）。(Tom)

- 他のログ処理用のオプションと同様に、スーパーユーザのみが`log_temp_files`を設定できるようにしました。(Simon Riggs)

- `log_filename`に`%`エスケープが存在しない場合、エポックタイムスタンプが自動的につかないようにしました。(Robert Haas)

  外部のログローテーションツールで使用できるようにログファイル名を固定化したいユーザが一部にいましたので、この変更がなされました。

- `recovery.conf`から`log_restartpoints`を削除しました。 代わりに`log_checkpoints`を使用してください。(Simon)

- `krb_realm`および`krb_server_hostname`を削除しました。 これらは`pg_hba.conf`内で設定されるようになりました。(Magnus)

- また、後述のように`pg_hba.conf`には大きな変更点があります。

### E.2.2.3. 問い合わせ

- `TRUNCATE`および`LOCK`が指定したテーブルの子テーブルにも適用されるよう変更しました。(Peter)

  これらのコマンドは子テーブルの処理を抑制できるように`ONLY`オプションを受け付けるようになりました。 これまでの動作が必要な場合このオプションを使用しなければなりません。

- `SELECT DISTINCT`および`UNION`/`INTERSECT`/`EXCEPT`はソートされた出力を常に生成しないようになりました。(Tom)

  これまでは、こうした種類の問い合わせは常に、ソート・一意性処理（つまりソート後隣接する重複を除去）により重複行を取り除きました。 これがハッシュ処理により実装できるようになり、その結果ソートされた出力が生成されなくなりました。 出力順がソートされていることに依存するアプリケーションで推奨する修正方法は`ORDER BY`句を付与することです。 短期的な回避方法として、`enable_hashagg`を無効にすることで過去の動作に戻すことができます。 しかしこれは性能を大きく劣化させる修正方法です。 しかし`SELECT DISTINCT ON`ではハッシュ処理を使用しませんので、この動作には変更ありません。

- 子テーブルは親テーブルの`CHECK`制約を強制的に継承します。(Alex Hunsaker, Nikhil Sontakke, Tom)

  これまではこうした制約を子テーブルで削除することができ、その結果、親テーブルの走査時に制約に反する行が現れることがありました。 これは非一貫性、かつ標準SQLに反するものと考えられました。

- 負の`LIMIT`または負の`OFFSET`値を、ゼロとして扱うことなく、許さなくなりました。(Simon)

- トランザクションブロック外での`LOCK TABLE`を許さなくなりました。(Tom)

  ロックは即座に解放されますので、こうした操作は無意味です。

- シーケンスが追加の`start_value`列を持つようになりました。(Zoltan Boszormenyi)

  これが`ALTER SEQUENCE ... RESTART`をサポートします。

### E.2.2.4. 関数および演算子

- `numeric`型の0の累乗がエラーとならずに、`0`を返すようになりました。 また`numeric`型の0の0乗もエラーとならずに、`1`を返すようになりました。(Bruce)

  これは、従来の`float8`型における動作と一致します。

- 浮動小数点における単項のマイナスがマイナスゼロを生成できるようになりました。(Tom)

  変更後の動作はIEEE標準との互換性がより高いものです。

- エスケープ文字が`LIKE`パターンの最後の文字であった場合（つまりエスケープすべきものが存在しない場合）、エラーになります。(Tom)

  これまでは、こうしたエスケープ文字は警告なく無視されました。 このためアプリケーションのロジックエラーを隠してしまう可能性がありました。

- これまで`LIKE`インデックス比較に使用されていた演算子`~=~`および`~<>~`を削除しました。(Tom)

  パターンインデックスは通常の等価演算子を使用するようになりました。

- `xpath()`がその引数を変更することなくlibxmlに渡すようになりました。(Andrew)

  これは、XML引数が整形済みのXML文書でなければならないことを意味します。 これまでのコードではXML断片も許可するようにもくろんでいましたが、うまく動作しませんでした。

- `xmlelement()`が要素値と同様に属性値を整形するようになりました(Peter)

  これまでは、属性値は通常のSQL出力の動作に従って成形されていました。 これはXMLの規約に時として合致しません。

- libxmlを使用する関数向けのメモリ管理を作成し直しました。(Tom)

  この変更により、PL/Perlや他の追加コードにおけるlibxmlを使用した場合とのいくつかの互換性に関する問題が避けられるはずです。

- ハッシュ関数用により高速なアルゴリズムを採用しました。(Bob Jenkinsの作業を元としたKenneth Marshall)

  組み込みのハッシュ関数の多くで、リトルエンディアンマシンとビッグエンディアンマシンとで異なる結果になるようになりました。

#### E.2.2.4.1. 時間に関する関数および演算子

- `DateStyle`が`interval`型の出力書式を制御しないようになりました。 代わりとなる新しい`IntervalStyle`変数が存在します。(Ron Mayer)

- `timestamp`および`interval`の出力における秒の小数部の扱いに関する一貫性を向上しました。(Ron Mayer)

  これにより、小数部の桁が以前と異なる表示になったり、切り捨てではなく四捨五入になったりする可能性があります。

- `to_char()`の翻訳された月名、日名が`LC_MESSAGES`ではなく`LC_TIME`に依存するようになりました。(Euler Taveira de Oliveira)

- `to_date()`および`to_timestamp()`が無効な入力に対してより一貫したエラー報告を行うようにしました。(Brendan Jurd)

  これまでのバージョンでは、書式文字列に一致しない入力を無視したり、警告なく誤解釈したりすることがよくありました。 こうした状況でエラーとなるようになりました。

- 午前/午後（`AM`/`PM`）および紀元（`BC`/`AD`）の書式指定に関して大文字小文字の厳密な違いを必要としないように`to_timestamp()`を修正しました。(Brendan Jurd)

  例えば`ad`という入力値は`AD`書式文字列に一致するようになりました。

## E.2.3. 変更点

PostgreSQL 8.4とこれまでのメジャーリリースとの間の変更点についての詳細を以下に示します。

### E.2.3.1. 性能

- オプティマイザの統計情報計算を改良しました。(Jan Urbanski, Tom)

  特に全文検索演算子に関する推定が大きく改良されました。

- ハッシュ処理を用いた`SELECT DISTINCT`および`UNION`/`INTERSECT`/`EXCEPT`が可能になりました。(Tom)

  これは、こうした種類の問い合わせが自動的にソートされた出力を生成しなくなったことを意味します。

- 半結合および反結合に関して明確な概念を作成しました。(Tom)

  この作業により、`IN (SELECT ...)`句に関するこれまでのとってつけたような扱いを形式化しました。 さらにこれを`EXISTS`および`NOT EXISTS`句にも拡張しました。 これにより`EXISTS`および`NOT EXISTS`問い合わせの計画作成が非常に改善されるはずです。 一般的には、論理的には同一である`IN`と`EXISTS`句が、同程度の性能を持つようになりました。 これまではよく`IN`の方が勝っていました。

- 外部結語が背後にある副問い合わせの最適化を改良しました。(Tom)

  これまでは、副問い合わせまたはビューが外部結合のNULLを持ち得る側にそれが現れる場合や厳密でない式（例えば定数）がその結果リストに含まれる場合、非常によく最適化することができませんでした。

- Boyer-Moore-Horspool検索を使用することで、`text_position()`と関連する関数の性能を改良しました。(David Rowley)

  これは特に長い検索パターンで有用です。

- 要求があった時にのみファイルに書き込むことにより、統計情報集計ファイルの書き込みによるI/O負荷が低減しました。 (Martin Pihlak)

- 一括挿入の性能を改良しました。(Robert Haas, Simon)

- `default_statistics_target`のデフォルト値を`10`から`100`に増やしました。(Greg Sabino Mullane, Tom)

  また最大値も`1000`から`10000`に増やしました。

- 継承または`UNION ALL`を含む問い合わせにおいて、デフォルトで`constraint_exclusion`検査を行います。(Tom)

  `constraint_exclusion`の新しい設定`partition`がこの動作を指定するために追加されました。

- ビットマップインデックス走査においてI/Oの先読みが可能になりました。(Greg Stark)

  先読み量は`effective_io_concurrency`により制御されます。 この機能はカーネルが`posix_fadvise()`サポートを有する場合のみ利用可能です。

- `FROM`句内の単純な集合を返すSQL関数をインライン化しました。(Richard Rowell)

- 外側のリレーション内で特に一般的な値が結合キー値となる特別な状況を考慮することにより、複数バッチのハッシュ結合の性能を向上しました。(Bryce Cutt, Ramon Lawrence)

- "physical tlist"を抑制することにより複数バッチのハッシュ結合における一時データ量を軽減しました。(Michael Henderson, Ramon Lawrence)

- `CREATE INDEX CONCURRENTLY`中のトランザクション内待機状態セッションを待機しないようにしました。(Simon)

- 共有キャッシュの無効化の性能を向上しました。(Tom)

### E.2.3.2. サーバ

#### E.2.3.2.1. 設定

- `pg_settings`が有効な値を表示できるようにするために、多くの`postgresql.conf`設定が列挙型の値に変換されます。(Magnus)

- プランナが取り出すものと仮定するカーソル行数を制御するための`cursor_tuple_fraction`パラメータを追加しました。(Robert Hell)

- `postgresql.conf`におけるカスタム変数クラスの名前にアンダースコアが使用できるようになりました。(Tom)

#### E.2.3.2.2. 認証とセキュリティ

- （安全ではない）`crypt`認証方式サポートを削除しました。(Magnus)

  使用することができる平文ではないパスワード方式はまったくありませんでしたので、これは実質的にPostgreSQL 7.2クライアントライブラリで廃止されていました。

- `pg_ident.conf`内の正規表現をサポートします。(Magnus)

- Kerberos/GSSAPIパラメータがpostmasterを再起動させることなく変更できるようになりました。(Magnus)

- サーバ証明書ファイル内のSSL証明書チェインをサポートします。(Andrew Gierth)

  完全な証明書チェインを含めることにより、クライアントは、商用CAを使用する場合によくある、ローカルに保持した中間CAの証明書をすべてに持たせることなく証明書を検証できるようになります。

- `db_user_namespace`を有効にし、`MD5`認証を組み合わせて使用した場合に、適切なエラーメッセージを報告するようになりました。(Bruce)

#### E.2.3.2.3. `pg_hba.conf`

- すべての認証オプションが`name=value`構文を使用するように変更しました。(Magnus)

  これにより`ldap`、`pam`、`ident`認証方式において互換性がない変更がなされました。 これらの方式を持つ`pg_hba.conf`はすべて新しい書式を使う形に書き換えなければなりません。

- `ident sameuser`オプションを削除しました。 代わりにこれをユーザマップの指定がない場合のデフォルトの動作としました。(Magnus)

- すべての外部認証方式においてユーザマップパラメータを許可します。(Magnus)

  これまではユーザマップは`ident`認証でのみサポートされていました。

- クライアント証明要求を制御するための`clientcert`オプションを追加しました。(Magnus)

  これまではサーバのデータディレクトリ内のルート証明書の有無により制御されていました。

- SSL証明書経由のユーザ認証を可能にする`cert`認証方式を追加しました。(Magnus)

  これまでのSSL証明書はクライアントが証明書へのアクセスを持つかどうか検証するのみで、ユーザの認証は行いませんでした。

- `krb5`、`gssapi`、`sspi`のレルムおよび`krb5`のホスト設定が`pg_hba.conf`内で指定できるようになりました。(Magnus)

  これらは`postgresql.conf`内の設定を上書きします。

- `krb5`、`gssapi`、`sspi`方式向けの`include_realm`パラメータを追加しました。(Magnus)

  これにより異なるレルムからの同一ユーザがユーザマップを使用する別のデータベースユーザとして認証できるようになります。

- 即座にエラーを報告するために、ロード時に`pg_hba.conf`を完全に解析します。(Magnus)

  これまでは、ファイル内のほとんどのエラーは、クライアントが接続しようとするまで検知されませんでした。 このためエラーのあるファイルによりシステムを使用できないようにしてしまいます。 新しい動作では、エラーが再読み込み時に検知されると、おかしなファイルは拒絶され、postmasterは過去の値を用いて継続します。

- `pg_hba.conf`内の最初のエラーを検知した後中断するのではなく、すべての解析エラーを表示します。(Selena Deckelmann)

- SolarisにおいてUnixドメインソケット経由での`ident`認証をサポートします。(Garick Hamlin)

#### E.2.3.2.4. 継続的なアーカイブ処理

- チェックポイントをできる限り早い終了を強制するためのオプションを`pg_start_backup()`に提供します。(Tom)

  デフォルトの動作では過度なI/O消費を抑えますが、同時実行の問い合わせ活動がなければ意味がありません。

- 変更されたWALファイルがアーカイブされるまで`pg_stop_backup()`を待機させます。(Simon)

  これは`pg_stop_backup()`完了時にバックアップが有効になったことを保証します。

- アーカイブが有効な場合、すべてのトランザクションを即座にアーカイブすることができるように、シャットダウン時に最終WALセグメントをローテートします。(Guillaume Smet, Heikki)

- 継続的なアーカイブ処理のベースバックアップが実行している間、"smart"シャットダウンを遅延します。(Laurenz Albe)

- "fast"シャットダウンが要求された場合は継続的なアーカイブ処理のベースバックアップをキャンセルします。(Laurenz Albe)

- `recovery.conf`の論理型の変数が`postgresql.conf`の論理型変数と同じ範囲の文字列を取ることができるようになりました。(Bruce)

#### E.2.3.2.5. 監視

- PostgreSQL設定ファイルが最後に読み込まれた日時を報告する`pg_conf_load_time()`を追加しました。(George Gensure)

- 安全にバックエンドを停止させる`pg_terminate_backend()`を追加しました（`SIGTERM`シグナルも動作します）。(Tom, Bruce)

  常に単一バックエンドに対して`SIGTERM`を行うことは可能でしたが、これまでは未サポートとされていました。 この状況を試験したところいくつか不具合があり、それらを修正しました。

- ユーザ定義関数呼び出し数と実行時間を追跡する機能を追加しました。(Martin Pihlak)

  関数統計情報は新しいシステムビュー`pg_stat_user_functions`に出力されます。 追跡は新しいパラメータ`track_functions`により制御されます。

- `pg_stat_activity`内の最大問い合わせ文字列サイズの指定が`track_activity_query_size`パラメータでできるようになりました。(Thomas Lee)

- 性能改善を目的として、syslogに送信する最大行数を増やしました。(Tom)

- 読み取りのみの設定変数`segment_size`、`wal_block_size`、`wal_segment_size`を追加しました。(Bernd Helmle)

- デッドロックの報告時に、サーバログにデッドロックに関わるすべての問い合わせテキストを記録します。(Itagaki Takahiro)

- 特定のプロセスIDに関する情報を返す`pg_stat_get_activity(pid)`関数を追加しました。(Magnus)

- サーバの統計情報ファイルの場所を`stats_temp_directory`経由で指定できるようにしました。(Magnus)

  これにより統計情報ファイルをRAM上のディレクトリに格納させて、I/O要求を低減させることができます。 再起動に渡って保持できるように、起動時または終了時にファイルは通常の場所（`$PGDATA/global/`）にコピーされます。

### E.2.3.3. 問い合わせ

- `WINDOW`関数のサポートを追加しました。(Hitoshi Harada)

- `WITH`句（CTE）のサポートを追加しました。これには`WITH RECURSIVE`が含まれます。(Yoshiyuki Asaba, Tatsuo Ishii, Tom)

- `TABLE`コマンドを追加しました。(Peter)

  `TABLE tablename`は、`SELECT * FROM tablename`の標準SQLにおける省略形です。

- `SELECT`（または`RETURNING`）の列出力ラベルを指定する時`AS`を省略可能にしました。(Hiroshi Saito)

  これは列ラベルがPostgreSQLキーワードではない場合のみ動作します。 その他の場合は`AS`はまだ必要です。

- `SELECT`結果リスト内において集合を返す関数を、タプルストアを介して結果を返す関数であったとしてもサポートします。(Tom)

  具体的には、これはPL/PgSQLや他のPL言語で作成された関数をこの方法で呼び出すことができるようになったことを意味します。

- 集約問い合わせやグループ化問い合わせの出力において集合を返す関数をサポートします。(Tom)

- `SELECT FOR UPDATE`/`SHARE`が継承ツリー上に動作できるようになりました。(Tom)

- SQL/MED用の基盤を追加しました。(Martin Pihlak, Peter)

  リモートまたは外部SQL/MED機能はまだありません。 しかしこの変更は、`dblink`や`plproxy`のようなモジュール向けの接続情報の管理のための標準化と陳腐化されないシステムを提供します。

- 参照されるスキーマ、関数、演算子、演算子クラスが変更された時にキャッシュされた計画を無効化します。(Martin Pihlak, Tom)

  これは、DDLの変更にその場で応答するシステム機能を改良します。

- 複合型の比較を可能とし、かつ、匿名複合型の配列を可能としました。(Tom)

  これにより、`row(1, 1.1) = any (array[row(7, 7.7), row(1, 1.0)])`のような式が可能になります。 これは特に再帰問い合わせで有用です。

- Uniode文字列リテラルと、たとえば`U&'d\0061t\+000061'`といったコードポイントを使用した識別子指定のサポートを追加しました。(Peter)

- 文字列リテラルおよび`COPY`データ内の`\000`を拒絶します。(Tom)

  これまでは、これは受け付けられましたが、文字列定数の終端という作用がありました。

- エラー位置を報告するパーサ機能を改良しました。(Tom)

  エラー位置がデータ型の不一致などの多くの意味的なエラーに対して報告されるようになりました。 これまでは位置づけすることができませんでした。

#### E.2.3.3.1. `TRUNCATE`

- 文レベルの`ON TRUNCATE`トリガをサポートします。(Simon)

- `TRUNCATE TABLE`に`RESTART`/`CONTINUE IDENTITY`オプションを追加しました。(Zoltan Boszormenyi)

  シーケンスの開始値を`ALTER SEQUENCE START WITH`で変更できます。

- `TRUNCATE tab1, tab1`が成功するようになりました。(Bruce)

- 独立した`TRUNCATE`権限を追加しました。(Robert Haas)

#### E.2.3.3.2. `EXPLAIN`

- `EXPLAIN VERBOSE`が計画ノード毎に出力列を表示するようにしました。(Tom)

  これまでの`EXPLAIN VERBOSE`では問い合わせ計画の内部表現を出力しました。 （この動作は`debug_print_plan`を介して利用できるようになりました。）

- `EXPLAIN`が個々のテーブルの副計画と初期計画とを識別するようにしました。(Tom)

- `EXPLAIN`が`debug_print_plan`を順守するようにしました。(Tom)

- `CREATE TABLE AS`に対する`EXPLAIN`が可能です。(Peter)

#### E.2.3.3.3. `LIMIT`/`OFFSET`

- `LIMIT`および`OFFSET`内の副問い合わせが可能です。(Tom)

- `LIMIT`/`OFFSET`機能に標準SQL構文を追加しました。(Peter)

  すなわち`OFFSET num {ROW|ROWS} FETCH {FIRST|NEXT} [num] {ROW|ROWS} ONLY`です。

### E.2.3.4. オブジェクト操作

- 列レベル権限のサポートを追加しました。(Stephen Frost, KaiGai Kohei)

- `CASCADE`の必要性を軽減させるために複数オブジェクトの`DROP`操作を再作成しました。(Alex Hunsaker)

  例えば、テーブル`B`がテーブル `A`に依存している場合、コマンド`DROP TABLE A, B`が`CASCADE`オプションを必要としないようになりました。

- オブジェクトの依存関係を削除を開始する前にロックを確実に取得することにより、同時実行の`DROP`コマンドに関する各種問題を修正しました。(Tom)

- `DROP`コマンド中の依存関係の報告を改良しました。(Tom)

- 標準SQLに従い、`CREATE TABLE AS`に`WITH [NO] DATA`句を追加しました。(Peter, Tom)

- ユーザ定義のI/O変換キャストのサポートを追加しました。(Heikki)

- `CREATE AGGREGATE`が`internal`遷移データ型を使用できるようにしました。 (Tom)

- `CREATE TYPE`に`LIKE`句を追加しました。(Tom)

  これにより既存の型と同じ内部表現を使用するデータ型の作成が簡易になりました。

- ユーザ定義の基本型に対する型カテゴリと"好ましい"状態指定を可能としました。(Tom)

  これにより、ユーザ定義型の強制動作についてより多くの制御が可能になります。

- `CREATE OR REPLACE VIEW`がビューの最後に列を追加できるようにしました。(Robert Haas)

#### E.2.3.4.1. `ALTER`

- `ALTER TYPE RENAME`を追加しました。(Petr Jelinek)

- シーケンスが初期値をリセットできるように`ALTER SEQUENCE ... RESTART` （パラメータなし）を追加しました。(Zoltan Boszormenyi)

- テーブル、インデックス、シーケンス、ビューを合理的に組み合わせられるように`ALTER TABLE`の構文を変更しました。(Tom)

  この変更により以下の新しい構文を使用することができます。

  - `ALTER SEQUENCE OWNER TO`

  - `ALTER VIEW ALTER COLUMN SET/DROP DEFAULT`

  - `ALTER VIEW OWNER TO`

  - `ALTER VIEW SET SCHEMA`

  実際ここでは新しい機能はありませんが、これまではこれらを行うためには`ALTER TABLE`と記述する必要があり、混乱を招きました。

- `ALTER TABLE ... ALTER COLUMN ... SET DATA TYPE`構文サポートを追加しました。(Peter)

  これはすでにサポートされていた機能に関する標準SQLの構文です。

- 物理的に`OID`値を削除するために`ALTER TABLE SET WITHOUT OIDS`がテーブルを書き換えるようにしました。(Tom)

  また、`OID`を追加できるようにテーブルを書き換えるための`ALTER TABLE SET WITH OIDS`を追加しました。

#### E.2.3.4.2. データベース操作

- 未コミットな準備済みトランザクションが原因で`CREATE`/`DROP`/`RENAME DATABASE`が失敗した場合の報告を改良しました。(Tom)

- `LC_COLLATE`および`LC_CTYPE`をデータベース単位の設定にしました。(Radek Strnad, Heikki)

  これはこれまでデータベース単位の設定であった照合順を符号化方式に似せました。

- データベース符号化方式、照合順（`LC_COLLATE`）、文字クラス（`LC_CTYPE`）が一致するかどうかの検査を改良しました。(Heikki, Tom)

  新しいデータベースの符号化方式とロケール設定が`template0`からコピーした場合のみ変更できることに特に注意してください。 これは設定が一致しないデータを複製する可能性を防止します。

- データベースを新しいテーブル空間に移動させる`ALTER DATABASE SET TABLESPACE`を追加しました。(Guillaume Lelarge, Bernd Helmle)

### E.2.3.5. ユーティリティ操作

- `CLUSTER`コマンドとclusterdbに`VERBOSE`オプションを追加しました。(Jim Cox)

- 待機中のトリガイベントの記録に必要なメモリを減らしました。(Tom)

#### E.2.3.5.1. インデックス

- ハッシュインデックスの構築速度とアクセス速度を大幅に改良しました。(Tom Raney, Shreya Bhargava)

  これによりハッシュインデックスがB-Treeインデックスより高速になる場合もあり得ます。 しかしハッシュインデックスはまだクラッシュに対して安全ではありません。

- ハッシュインデックスがインデックス対象の列の完全な値ではなく、ハッシュコードのみを保管するようにしました。(Xiao Meng)

  これによりインデックス対象の列が長い場合ハッシュインデックスのサイズが大きく減少し、性能が向上しました。

- GINインデックスにおける高速更新オプションを実装しました。(Teodor, Oleg)

  このオプションは大きく更新速度を向上しますが、検索速度に小さな影響が現れます。

- `xxx_pattern_ops`インデックスが`LIKE`だけではなく、単純な等価演算子でも使用できるようになりました。(Tom)

#### E.2.3.5.2. 全文検索

- GIN重みづけ検索を全文検索インデックスに対して行う際、`@@@`を使用する必要性をなくしました。(Tom, Teodor)

  通常の`@@`テキスト検索演算子を代わりに使用することができます。

- `@@`テキスト検索操作用のオプティマイザの選択性関数を追加しました。(Jan Urbanski)

- 全文検索において前方一致が可能になりました。(Teodor Sigaev, Oleg Bartunov)

- 複数列に対するGINインデックスをサポートします。(Teodor Sigaev)

- ネパール語とヒンディーアルファベットのサポートを改良しました。(Teodor)

#### E.2.3.5.3. `VACUUM`

- 独立したリレーション単位の"フォーク"ファイル内で空き領域を追跡します。(Heikki)

  `VACUUM`で見つかった空き領域は、固定長の共有メモリ領域ではなく`*_fsm`ファイルに記録されるようになりました。 `max_fsm_pages`と`max_fsm_relations`設定は削除され、空き領域管理の管理作業を大きく簡易化しました。

- バキューム処理を必要としないページを追跡する可視性マップを追加しました。(Heikki)

  これにより、テーブルのごく一部のみがバキューム処理を必要とする場合に、`VACUUM`がテーブルすべてを走査することを防ぐことができます。 可視性マップはリレーション単位の"フォーク"ファイル内に保管されます。

- `VACUUM`が可視性マップを無視し、そしてタプルを凍結するためにテーブル全体に対して行われなければならないタイミングを制御する`vacuum_freeze_table_age`パラメータを追加しました。(Heikki)

- トランザクションスナップショットをより入念に追跡します。(Alvaro)

  これは、長期のトランザクションが存在する領域を回収する、`VACUUM`能力を向上します。

- リレーション単位の自動バキュームの指定する機能と`CREATE TABLE`内でTOASTパラメータを指定する機能を追加しました。(Alvaro, Euler Taveira de Oliveira)

  自動バキュームオプションはシステムテーブル内に保管するために使用されます。

- vacuumdbに`--freeze`オプションを追加しました。(Bruce)

### E.2.3.6. データ型

- 全文検索類義語辞書用に`CaseSensitive`オプションを追加しました。(Simon)

- `NUMERIC`除算の精度を改良しました。(Tom)

- `int2`に`int8`を使用した基本算術演算子を追加しました。(Tom)

  これは、一部の状況における明示的なキャストの必要性を除去します。

- `UUID`の入力にて4桁ごとに省略可能なハイフンが受け付けられるようになりました。(Robert Haas)

- 論理データ型の入力として`on`/`off`を可能としました。(Itagaki Takahiro)

- `numeric`型の入力文字列において`NaN`の前後の空白を許可します。(Sam Mason)

#### E.2.3.6.1. 時間に関するデータ型

- `0 BC`や`000`、`0000`という年を拒絶します。(Tom)

  これまでは、これらは`1 BC`として解釈されました。 （注意：`0`および `00`という年はまだ2000年であると仮定されます。）

- デフォルトの既知の時間帯省略形リストに`SGT`（シンガポール時間）を含めました。(Tom)

- `date`型の値として`infinity`および`-infinity`をサポートします。(Tom)

- `interval`リテラルの解析をより標準に近づけました。(Tom, Ron Mayer)

  例えば`INTERVAL '1' YEAR`は想定通りになりました。

- 標準SQLに従うために、`interval`の秒の端数に関する精度を`second`キーワードの後に指定できるようにしました。(Tom)

  これまでは、この精度は`interval`キーワードの後に指定する必要がありました。 （後方互換性のためこの構文はまだサポートされますが、廃止予定です。） データ型の定義は標準の書式を使用して出力されるようになりました。

- IS0 8601 `interval`構文をサポートします。(Ron Mayer, Kevin Grittner)

  例えば、`INTERVAL 'P1Y2M3DT4H5M6.7S'`がサポートされるようになりました。

- `interval`値の出力方法を制御する`IntervalStyle`パラメータを追加しました。(Ron Mayer)

  有効な値は、`postgres`、`postgres_verbose`、`sql_standard`、`iso_8601`です。 この設定はまた、一部のフィールドのみが正または負の指定を持つ場合の、負の`interval`の取り扱い方法を制御します。

- `timestamp`および`interval`出力における秒の端数の取扱いの一貫性を改良しました。 (Ron Mayer)

#### E.2.3.6.2. 配列

- `ARRAY[...]::integer[]`など`ARRAY[]`式に適用されるキャストの扱いを改良しました。(Brendan Jurd)

  これまでのPostgreSQLは、その後に続くキャストを参照することなく、`ARRAY[]`式のデータ型を決定しようと試みました。 これは多くの場合、特に`ARRAY[]`式が空または`NULL`などの曖昧な項目しか含まないような場合で不要に失敗することがあり得ました。 配列要素が必要とする型を決定する時にキャストが考慮されるようになりました。

- 標準SQLに一致させるため、`ARRAY`次元のSQL構文を省略可能にしました。(Peter)

- 配列次元数を返す`array_ndims()`を追加しました。(Robert Haas)

- 配列の指定次元の長さを返す `array_length()`を追加しました。(Jim Nasby, Robert Haas, Peter Eisentraut)

- すべての集約した値を単一の配列として返す`array_agg()`集約関数を追加しました。(Robert Haas, Jeff Davis, Peter)

- 配列を個々の行値に変換する`unnest()`を追加しました。(Tom)

  これは`array_agg()`の反対です。

- 初期値を持つ配列を作成する`array_fill()`を追加しました。(Pavel Stehule)

- 配列の添え字範囲を簡単に生成する`generate_subscripts()`を追加しました。(Pavel Stehule)

#### E.2.3.6.3. 大規模値の格納（TOAST）

- 値に対するTOAST圧縮は32バイト程度とみなします（これまでは256バイト）。(Greg Stark)

- TOAST圧縮を使用する前に空き領域が最低25%必要です。 （これまでは小規模値では20%、大規模値ではその規模程度が必要でした。）(Greg)

- TOAST可能なフィールドが大規模フィールドと小規模フィールドとが混在する行に対して、大規模値を優先して行外に押し出し、小規模な値を不要に圧縮することを防ぐことができるように、TOASTの発見的処理過程を改良しました。

### E.2.3.7. 関数

- `setseed()`が`-1`から`1`までの値（`0`から`1`ではありません）を受け付けられることを文書化し、そしてその有効範囲を強制するようにしました。(Kris Jurka)

- `lo_import(filename, oid)`サーバサイド関数を追加しました。(Tatsuo)

- `quote_nullable()`を追加しました。 この動作は`quote_literal()`と似ていますが、引数NULLに対して文字列`NULL`を返します。(Brendan Jurd)

- 複数のテキスト断片を抽出できるように全文検索`headline()`関数を改良しました。(Sushant Sinha)

- データの変更がない更新に対するオーバーヘッドを防止するための`suppress_redundant_updates_trigger()`トリガ関数を追加しました。(Andrew)

- `numeric`除算を丸めなく実行する`div(numeric, numeric)`を追加しました。(Tom)

- `generate_series()`の`timestamp`版と`timestamptz`版を追加しました。(Hitoshi Harada)

#### E.2.3.7.1. オブジェクト情報関数

- 現在実行中の問い合わせを知る必要がある関数による使用を目的とした`current_query()`を実装しました。(Tomas Doran)

- パーサのキーワードのリストを返す`pg_get_keywords()`を追加しました。(Dave Page)

- 関数定義を見るための`pg_get_functiondef()`を追加しました。(Abhijit Menon-Sen)

- 変数を含まない式のデパース時に`pg_get_expr()`2番目の引数をゼロにすることができます。

- `pg_relation_size()`が`regclass`を使用するように変更しました。(Heikki)

  `pg_relation_size(data_type_name)`は動作しなくなりました。

- `pg_settings`の出力に`boot_val`列と`reset_val`列を追加しました。(Greg Smith)

- 設定ファイル内の変数集合のために、`pg_settings`の出力にソースファイル名と行番号列を追加しました。(Magnus, Alvaro)

  セキュリティ上の理由により、これらの列はスーパーユーザのみが参照することができます。

- `CURRENT_CATALOG`、`CURRENT_SCHEMA`、`SET CATALOG`、`SET SCHEMA`のサポートを追加しました。(Peter)

  これらは既存の機能に対して標準SQL構文を提供します。

- 任意の値のデータ型を返す`pg_typeof()`を追加しました。(Brendan Jurd)

- `version()`は、サーバが32ビットバイナリか64ビットバイナリかについての情報を返すようにしました。(Bruce)

- 情報スキーマの列`is_insertable_into`と`is_updatable`が一貫性を持つ動作をするよう修正しました。(Peter)

- 情報スキーマの`datetime_precision`列の動作を改良しました。 (Peter)

  これらの列は`date`列ではゼロを、`time`、`timestamp`、精度宣言がない`interval`では6（デフォルト精度）を表示するようになりました。 これまではNULLを表示していました。

- 残りの集合を返す組み込み関数が`OUT`パラメータを使用するように変換しました。(Jaime Casanova)

  これにより次の関数を列リストの指定を行わずに呼び出すことができるようになります。 `pg_show_all_settings()`、`pg_lock_status()`、`pg_prepared_xact()`、`pg_prepared_statement()`、`pg_cursor()`

- `pg_*_is_visible()`および`has_*_privilege()`関数が無効なOIDに対して、エラーとならずに`NULL`を返すようにしました。(Tom)

- 1度の呼び出しで複数の権限の論理和を調査できるように`has_*_privilege()`関数を拡張しました。(Stephen Frost, Tom)

- `has_column_privilege()`および`has_any_column_privilege()`関数を追加しました。(Stephen Frost, Tom)

#### E.2.3.7.2. 関数作成

- 可変長引数の関数（引数の数が変動する関数）をサポートします。(Pavel Stehule)

  終端までの引数のみを省略可能とすることができます。 またこれらはすべて同じデータ型でなければなりません。

- 関数引数のデフォルト値をサポートします。(Pavel Stehule)

- `CREATE FUNCTION ... RETURNS TABLE`句を追加しました。(Pavel Stehule)

- SQL言語関数が`INSERT`/`UPDATE`/`DELETE` `RETURNING`句の出力を返すことができます。(Tom)

#### E.2.3.7.3. PL/PgSQLサーバサイド言語

- より簡単に動的問い合わせ文字列にデータを挿入するための`EXECUTE USING`をサポートします。(Pavel Stehule)

- `FOR`ループを使用するカーソルの結果全体を繰り返すことが可能になりました。(Pavel Stehule)

- `RETURN QUERY EXECUTE`をサポートします。(Pavel Stehule)

- `RAISE`コマンドを改良しました。(Pavel Stehule)

  - `DETAIL`および`HINT`フィールドをサポートします。

  - `SQLSTATE`エラーコードの指定をサポートします。

  - 例外名パラメータをサポートします。

  - そこで起こったエラーを再発行できるように例外ブロックにおいてパラメータ無しの`RAISE`を可能としました。

- `EXCEPTION`リスト内で`SQLSTATE`コードの指定を可能としました。(Pavel Stehule)

  これは独自の`SQLSTATE`コードを扱う際に有用です。

- `CASE`文をサポートします。(Pavel Stehule)

- `RETURN QUERY`が特殊な`FOUND`と`GET DIAGNOSTICS` `ROW_COUNT`変数を設定するようにしました。(Pavel Stehule)

- `FETCH`および`MOVE`が`GET DIAGNOSTICS` `ROW_COUNT`変数を設定するようにしました。(Andrew Gierth)

- ラベル無しの`EXIT`が常にもっとも内側のループを抜けるようにしました。(Tom)

  これまでは、他のループよりも入れ子に最も近い`BEGIN`ブロックが存在すると、そのブロックが代わりに終了します。 新しい動作はOracle(TM)と一致するもので、かつ、これまで文書で説明していたものです。

- 文字列リテラルと入れ子状ブロックのコメントの処理が主SQLパーサの処理と一致するようにしました。(Tom)

  具体的には、`RAISE`内の書式文字列が、`standard_conforming_strings`に従うようになることを含め、他の文字列リテラルと同じように動作するようになりました。 またこの変更は、`standard_conforming_strings`が有効な場合に有効なコマンドが失敗するといった他の問題も修正します。

- 入れ子状の例外ブロックの深さが異なる場所で、同一関数が呼び出された時のメモリリークを防止します。(Tom)

### E.2.3.8. クライアントアプリケーション

- `pg_ctl restart`がコマンドライン引数を保持するよう修正しました。(Bruce)

- `-W`/`--password`オプションを持つすべてのユーティリティにおいて、パスワードプロンプト表示を防止する`-w`/`--no-password`オプションを追加しました。(Peter)

- createdb、createuser、dropdb、dropuserの`-q`（メッセージ無し）オプションを削除しました。(Peter)

  これらのオプションはPostgreSQL 8.3から効果がないものでした。

#### E.2.3.8.1. psql

- 起動時の冗長なバナーを除去しました。単に`help`を勧めるだけのものになりました。(Joshua Drake)

- `help`が一般的なバックスラッシュコマンドを表示するようにしました。(Greg Sabino Mullane)

- 画面幅に合わせて出力を、または、`\pset columns`が設定された場合はファイルもしくはパイプへの出力も改行する、`\pset format wrapped`モードを追加しました。(Bryce Nesbitt)

- `\pset`内で`on`および`off`だけでなく、サポートされるすべての論理型の値の綴りが利用できるようにしました。(Bruce)

  これまでは、"off"以外の文字列は警告なく`true`を意味するものと解釈されていました。 psqlは認識できない綴りについて警告を出すようになりました（ただしまだ`true`と解釈されます）。

- 幅が広い出力の際にページャを使用します。(Bruce)

- 一文字のバックスラッシュコマンドと最初の引数との間に空白を要求します。(Bernd Helmle)

  これにより歴史的なあいまいさの根源がなくなりました。

- スキーマ修飾および引用符付きの識別子に対するタブ補間サポートを改良しました。(Greg Sabino Mullane)

- `\timing`に省略可能な`on`/`off`引数を追加しました。(David Fetter)

- 複数行に渡ってアクセス制御権限を表示します。(Brendan Jurd, Andreas Scherbaum)

- `\l`がデータベースアクセス権限を表示するようにしました。(Andrew Gilligan)

- 権限がある場合`\l+`がデータベース容量を表示するようにしました。(Andrew Gilligan)

- 関数定義を編集するための`\ef`コマンドを追加しました。 (Abhijit Menon-Sen)

#### E.2.3.8.2. psql \d*コマンド

- `S`修飾子が指定された場合のみ、パターン引数を持たない`\d*`コマンドがシステムオブジェクトを表示するようにしました。(Greg Sabino Mullane, Bruce)

  これまでの動作では`\d`の亜種の間での一貫性がありませんでした。 また、ほとんどの場合ユーザオブジェクトのみを参照する簡単な方法がありませんでした。

- 現行バージョンのサーバだけではなく、古めの（7.4までの）バージョンのPostgreSQLサーバで`\d*`コマンドが動作するように改良しました。(Guillaume Lelarge)

- `\d`が対象テーブルを参照する外部キー制約を表示するようにしました。(Kenneth D'Souza)

- シーケンスに対する`\d`がその列値を表示するようにしました。(Euler Taveira de Oliveira)

- `\d+`の表示に列の格納種類や関連するその他のオプションを追加しました。(Gregory Stark, Euler Taveira de Oliveira)

- `\dt+`出力にリレーション容量を表示します。(Dickson S. Guedes)

- `\dT+`において`enum`型で取り得る値を表示します。(David Fetter)

- キャスト内に存在するデータ型に一致するワイルドカードパターンを、`\dC`が受け付けることを可能としました。(Tom)

- `\df`の出力に関数種類列を追加しました。 また、選択した種類の関数のみを列挙するオプションを追加しました。(David Fetter)

- `\df`が`cstring`型を取る、または、返す関数を隠さないようにしました。(Tom)

  これまでは、そのほとんどが興味を引くとは思われないデータ型のI/O関数であったため、こうした関数は隠れていました。 デフォルトのシステム関数の隠ぺいに関する新しいポリシーではこの欠点を不要にします。

#### E.2.3.8.3. pg_dump

- ダンプをテーブル空間の構造が異なるクラスタにリストアできるように、pg_dump/pg_dumpall/pg_restoreに`--no-tablespaces`オプションを追加しました。(Gavin Roy)

- pg_dumpとpg_dumpallから`-d`および`-D`オプションを削除しました。(Tom)

  これらのオプションは、他のPostgreSQLクライアントアプリケーションにおけるデータベース名を選択するためのオプションと、あまりに頻繁に混乱されていました。 この機能はまだ利用可能ですが、長めのオプション名`--inserts`または`--column-inserts`と記述する必要があります。

- pg_dumpとpg_dumpallから`-i`および`--ignore-version`オプションを削除しました。(Tom)

  このオプションを使用してもエラーにはなりませんが、何も効果はありません。 安全のためバージョン検査が必須となりましたので、このオプションは削除されました。

- ダンプまたはリストア中の`statement_timeout`を無効にしました。(Joshua Drake)

- pg_dump/pg_dumpallに`--lock-wait-timeout`オプションを追加しました。(David Gould)

  これにより、指定期間中に共有ロックを獲得できなかった場合に、ダンプが失敗できるようになりました。

- 参照テーブルより前に外部キーにより参照されるテーブルをダンプするためにpg_dump `--data-only`の出力順序を変更します。(Tom)

  これにより、外部キーがすでに存在する時にデータロードができるようになりました。 巡回参照により安全な順序付けができない場合、`NOTICE`が発行されます。

- pg_dump、pg_dumpall、pg_restoreが指定したロールを使用することができるようになりました。(Benedek Laszlo)

- pg_restoreがリストアするために複数の同時接続を使用できるようになりました。(Andrew)

  同時接続数は`--jobs`オプションにより制御されます。 これは独自書式のアーカイブでのみサポートされます。

### E.2.3.9. プログラミングツール

#### E.2.3.9.1. libpq

- 新しい`lo_import_with_oid()`関数を使用して、ラージオブジェクトのインポートの際に`OID`を指定できるようになりました。(Tatsuo)

- "イベント"サポートを追加しました。(Andrew Chernow, Merlin Moncure)

  これは、`PGconn`および`PGresult`オブジェクトに関連付けされた非公開データを管理するためのコールバックを登録する機能を追加したものです。

- 複数のエラーメッセージを複数行のエラー報告として返すことができるようにエラー処理を改良しました。(Magnus)

- `PQexecParams()`と関連する関数が、空の問い合わせに対して`PGRES_EMPTY_QUERY`を返すようにしました。(Tom)

  これまでは`PGRES_COMMAND_OK`を返していました。

- Windowsにおける`WSACleanup()`のオーバーヘッドを防止する方法を文書化しました。(Andrew Chernow)

- デフォルトのデータベースユーザ名を決定する際にKerberosチケットに依存しません。(Magnus)

  これまでは、Kerberos機能を有効に構築したlibpqでは、Kerberos認証を使用しない接続であったとしても、利用可能なKerberosチケットのプリンシパル名をデフォルトのデータベースユーザ名として使用しました。 これは一貫性がなく混乱を招くものと思われます。 デフォルトのユーザ名はKerberosの有無に関係なく同じ方法で決定されるようになりました。 しかし、Kerberos認証を使用する場合、データベースユーザ名はチケットと一致しなければならないことに注意してください。

#### E.2.3.9.2. libpq SSL（セキュアソケットレイア）サポート

- SSL接続の証明書検証を修正しました。(Magnus)

  libpqは、SSL接続を確立する際に、証明書とサーバ名の検証をサポートするようになりました。 検証においてルート証明書が利用できない場合、SSL接続は失敗します。 `sslmode`パラメータは証明書検証を有効にするため、および、その検査レベルを設定するために使用されます。 デフォルトではまだまったく検証を行わず、クライアント上でルート証明書を必要とすることなくSSLを有効にしたサーバと接続することができます。

- ワイルドカードサーバ証明書をサポートします。(Magnus)

  証明書のCNが`*`で始まる場合、ホスト名との比較を行う際にワイルドカードとして扱われ、複数のサーバで同じ証明書を使用できるようになります。

- クライアント証明書ファイルの位置を指定できるようになりました。(Mark Woodward, Alvaro, Magnus)

- OpenSSL/libcryptoの初期化について多くを制御できるように`PQinitOpenSSL`関数を追加しました。(Andrew Chernow)

- データベース接続が開いたままの場合、libpqがOpenSSLコールバックの登録を取り消すようにしました。(Bruce, Magnus, Russell Smith)

  これはlibpqライブラリをアンロードするアプリケーションで必要とされます。 こうしないと無効なOpenSSLコールバックが残ってしまいます。

#### E.2.3.9.3. ecpg

- 翻訳メッセージのサポートを追加しました。(Euler Taveira de Oliveira)

- ecpgパーサが自動的にサーバパーサから生成されるようになりました。(Michael)

  これまではecpgパーサは手作業で保守されていました。

#### E.2.3.9.4. サーバプログラミングインタフェース（SPI）

- 行外のパラメータを持つ、一回しか使用されない計画をサポートするようになりました。(Tom)

- `SPI_execute()`に新しい戻り値コード`SPI_OK_REWRITTEN`を追加しました。(Heikki)

  これは、コマンドが別の種類のコマンドに書き換えられた時に使用されます。

- `executor/spi.h`から不要なインクルードを削除しました。(Tom)

  これらをインクルードするために`spi.h`に依存している場合、SPIを使用するモジュールにいくつか`#include`行の追加が必要となる場合があります。

### E.2.3.10. 構築オプション

- 構築システムをAutoconf 2.61を使用するように更新しました。 (Peter)

- ソースコードから構築する場合GNU bisonが必要です。(Peter)

  実質ここ数年で、これは必要とされていましたが、他のパーサツールをサポートしようという要望がなくなりました。

- pg_config `--htmldir`オプションを追加しました。(Peter)

- サーバ内部で`float4`を値渡しします。(Zoltan Boszormenyi)

  過去の動作を使用するために`--disable-float4-byval`オプションをconfigureに追加しました。 この変更により、旧スタイル（バージョン0）の呼び出し規約を使用し、`float4`値を渡したり返したりする外部C関数は動作しなくなります。 このため、こうした関数があり、それを変更したくない場合は、このconfigureオプションが必要になるでしょう。

- 64ビットプラットフォーム上では、サーバ内部で`float8`、`int8`、これらに関連するデータ型を値渡しします。(Zoltan Boszormenyi)

  過去の動作を使用するために`--disable-float8-byval`オプションをconfigureに追加しました。 上記のとおり、この変更は旧スタイルの外部C関数の動作に影響を与えます。

- `--with-segsize`、`--with-blocksize`、`--with-wal-blocksize`、`--with-wal-segsize`オプションをconfigureに追加しました。(Zdenek Kotala, Tom)

  これまでは`pg_config_manual.h`を編集して変更するしかなかった、複数の定数を簡単に構築時に制御することができるようになります。

- Solaris 2.5でスレッド版の構築ができるようになりました。(Bruce)

- Solaris上でシステムの`getopt_long()`を使用します。(Zdenek Kotala, Tom)

  これにより、Solarisユーザが期待するものに、より矛盾がないオプション処理ができるようになりました。

- LinuxにおけるSun Studioコンパイラのサポートを追加しました。(Julius Stroffek)

- バックエンドのgettextドメインにメジャーバージョン番号を追加しました。 また、ライブラリのgettextドメインに`soname`メジャーバージョン番号を追加しました。(Peter)

  これは複数のバージョンの並行インストレーションを簡易化します。

- gcovを使用したコードカバレッジ試験のサポートを追加しました。(Michelle Caisse)

- MingwおよびCygwinにおけるout-of-tree構築が可能です。(Richard Evans)

- ソースのクロスコンパイルを行うプラットフォームとしてのMingwの使用を修正しました。(Peter)

### E.2.3.11. ソースコード

- 64ビットの時間帯データファイルをサポートします。(Heikki)

  これは、2038年以降の夏時間（DST）計算のサポートを追加します。

- プラットフォームの`time_t`データ型の使用を廃止しました。(Tom)

  一部のプラットフォームでは64ビットの`time_t`に移行されましたが、一部はまだです。 またWindowsではまだどうするか決められていません。 しかし、`time_t`と同じ意味を持つ`pg_time_t`定義は（プラットフォームが64ビット整数型を持たない限り）常に64ビットです。 そして、すべてのモジュールのAPIとディスク上のデータ書式においてこの型を使用します。

- クロスコンパイル時の時間帯データベース処理における不具合を修正しました。(Richard Evans)

- 複数ではなく単一処理でバックエンドのオブジェクトファイルをリンクします。(Peter)

- 複数形のより良い翻訳を可能にするためにgettextサポートを改良しました。(Peter)

- PL言語にメッセージ翻訳サポートを追加しました。(Alvaro, Peter)

- より多くのDTraceプローブを追加しました。(Robert Lor)

- Mac OS X LeopardやSolaris以外のプラットフォーム上のDTraceサポートを有効にしました。(Robert Lor)

- C文字列と`text`データの間の変換を、この目的のために共通化された関数を提供することで、簡易化および標準化しました。(Brendan Jurd, Tom)

- フロントエンドプログラムが`postgres.h`をインクルードすることなくインクルードすることができるように、`include/catalog/`ヘッダファイルを整理しました。(Zdenek Kotala)

- `name`をcharと同じ整列とし、インデックス内の`name`項目のゼロ埋めを抑制します。(Tom)

- 動的にロードされたコードが`exit()`を実行した場合の復旧を改良しました。(Tom)

- プラグインにエグゼキュータを監視させるためのフックを追加しました。(Itagaki Takahiro)

- プランナの統計情報検索動作を上書きできるようにするフックを追加しました。(Simon Riggs)

- 独自の共有メモリ要求のために`shmem_startup_hook()`を追加しました。(Tom)

- インデックスアクセスメソッド`amgetmulti`のエントリポイントを`amgetbitmap`に置き換えました。 また、実行時の演算子損失の決定をサポートするために`amgettuple`のAPIを拡張しました。(Heikki, Tom, Teodor)

  GINおよびGiST演算子クラス`consistent`関数のAPIも同様に拡張しました。

- GINインデックスにおいて部分一致検索のサポートを追加しました。(Teodor Sigaev, Oleg Bartunov)

- `pg_class`の`reltriggers`列を論理値型の`relhastriggers`に置き換えました。(Simon)

  また`pg_class`の使用されない、`relukeys`、`relfkeys`、`relrefs`列を削除しました。

- 一時テーブルの識別を簡単にするために`pg_class`に`relistemp`列を追加しました。(Tom)

- プラットフォーム向けのFAQを主文書に移しました。(Peter)

- パーサ入力ファイルが競合状態で構築されることを防ぎます。(Peter)

- `KOI8U`（ウクライナ語）符号化方式のサポートを追加しました。(Peter)

- 日本語翻訳メッセージを追加しました。(Japan PostgreSQL Users Group)

  これは別のプロジェクトとして保守されたものを使用しました。

- MSVC構築システムにおける`LC_MESSAGES`を設定した場合の問題を修正しました。(Hiroshi Inoue, Hiroshi Saito, Magnus)

### E.2.3.12. Contrib

- 指定期間を超える問い合わせに対して自動的に`EXPLAIN`を行う`contrib/auto_explain`を追加しました。(Itagaki Takahiro, Tom)

- GINインデックスがより多くのデータ型を扱うことを可能にする`contrib/btree_gin`を追加しました。(Oleg, Teodor)

- 大文字小文字を区別しない、マルチバイトに対応したテキストデータ型を提供する`contrib/citext`を追加しました。(David Wheeler)

- サーバ全体で文の実行統計情報を追跡する`contrib/pg_stat_statements`を追加しました。(Itagaki Takahiro)

- `contrib/pgbench`に期間オプションと問い合わせモードオプションを追加しました。(Itagaki Takahiro)

- `contrib/pgbench`が、単なる`accounts`、`branches`、`history`、`tellers`ではなく、`pgbench_accounts`、`pgbench_branches`、`pgbench_history`、`pgbench_tellers`という名前のテーブルを使用するようにしました。(Tom)

  これはpgbenchの実行により、実データが偶然破壊されてしまう危険性を低減させるためのものです。

- 20億ページを超えるテーブルとインデックスを扱うように`contrib/pgstattuple`を修正しました。(Tatsuhito Kasahara)

- `contrib/fuzzystrmatch`において、ユーザが挿入・削除・置換のコストを指定できる、レーベンシュタイン文字列距離関数を追加しました。(Volkan Yazici)

- `contrib/ltree`がマルチバイト符号化方式をサポートするようにしました。(laser)

- `contrib/dblink`がSQL/MEDカタログに格納された接続情報を使用できるようにしました。(Joe Conway)

- リモートサーバからのエラーに対する`contrib/dblink`の報告を改良しました。(Joe Conway)

- ローカルなデータベース符号化方式と一致させるために`contrib/dblink`が`client_encoding`を設定するようにしました。(Joe Conway)

  これにより、異なる符号化方式を使用するリモートサーバとの通信時の符号化方式に関する問題を防ぎます。

- 偶発的にサーバの`.pgpass`ファイルが使用されることなく、`contrib/dblink`がユーザが提供したパスワードを確実に使用するようにしました。(Joe Conway)

  これは小規模なセキュリティの向上です。

- `contrib/pageinspect`に`fsm_page_contents()`を追加しました。(Heikki)

- 空き領域マップファイル（`*_fsm`）をサポートするように`get_raw_page()`を変更しました。 また`contrib/pg_freespacemap`も更新しました。

- `contrib/pg_trgm`にマルチバイト符号化方式のサポートを追加しました。(Teodor)

- 新しい`array_agg()`および`unnest()`関数を使用するように`contrib/intagg`を作成し直しました。(Tom)

- `contrib/pg_standby`がフェイルオーバ前にすべての利用可能なWALを復旧するようにしました。(Fujii Masao, Simon, Heikki)

  この作業を安全にするために、`recovery.conf`内で新しい`recovery_end_command`オプションを設定して、フェイルオーバ後のトリガファイルを整理する必要があります。 pg_standbyは自身でトリガファイルを削除しないようになりました。

- `contrib/pg_standby`の`-l`オプションを無効にしました。 シンボリックリンクの使用が安全ではないためです。(Simon)

前のページ | ホーム | 次のページ
リリース8.4.1 | 上に戻る | リリース8.3.8