リリース 8.2

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

# E.58. リリース 8.2

> リリース日: 2006-12-05

## E.58.1. 概要

本リリースでは、以下のような多くの機能追加やユーザから要望があった性能改善がなされています。

- `INSERT/UPDATE/DELETE RETURNING`や複数行の`VALUES`リスト、`UPDATE`/`DELETE`における省略可能な対象テーブル別名など問い合わせ言語の改良。

- 同時に行われる`INSERT`/`UPDATE`/`DELETE`操作をブロックしないインデックス作成。

- 外部結合の再順序付けのサポートなどの、多くの問い合わせ最適化の改良。

- ソート処理性能の向上、および、使用するメモリ量の低減。

- より効率的なロックによる同時実行性の向上。

- より効率的なバキューム処理。

- ウォームスタンバイサーバ管理の簡略化。

- テーブルおよびインデックスにおける`FILLFACTOR`サポート（新機能）。

- 監視機能、ログ機能、性能チューニングの追加。

- オブジェクトの生成、削除に関するより細かな制御。

- 既存テーブルに対するテーブル継承関係の定義および削除が可能になりました。

- `COPY TO`が任意の`SELECT`分の出力をコピーできるようになりました。

- 配列内のNULLなど、配列の改良。

- 複数入力集約やSQL:2003の統計処理関数など、集約関数の改良。

- 多くの`contrib/`の改良。

## E.58.2. バージョン8.2への移行

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

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

- `escape_string_warning`をデフォルトで`on`にしました。(Bruce)

  これは、バックスラッシュエスケープが非エスケープ(`E''`の付かない)文字列内で使用された場合に警告を発します。

- リスト要素`foo.*`が、以前のような入れ子状の行型フィールドを生成するのではなく、そのメンバフィールドのリストに展開されるように、行コンストラクタ構文 (`ROW(...)`)を変更しました。(Tom)

  実質、この新しい動作は例えば、トリガで`IF row(new.*) IS DISTINCT FROM row(old.*)`を使用してデータ変更を検査することができるなど、大変便利です。 `.*`を省略することで古い動作を使用することもできます。

- 行の比較を標準SQL構文に従うようにしました。 また、インデックススキャンで使用されるようになりました。(Tom)

  以前は、行の等号および <>比較は標準に従っていましたが、< <= > >=は従っていませんでした。 新しい比較では、行値に一致する複数列インデックス用のインデックス制約として使用されるようになりました。

- row `IS [NOT] NULL`検査が標準SQL文法に従うようにしました。(Tom)

  以前の動作では、`IS NULL`という単純な場合は標準に従っていましたが、 `IS NOT NULL`は行のフィールドのいずれかが非NULLの場合に真を返しました。 標準では、全てのフィールドが非NULLの場合にのみ真を返すものと規定しています。

- `SET CONSTRAINT`が1つの制約にのみ適用されるようにしました。(Kris Jurka)

  以前のリリースでは、`SET CONSTRAINT`は一致する名前を持つすべての制約を変更しました。 本リリースではスキーマ検索パスを使用し、最初に一致する制約のみを変更するようになりました。 スキーマの指定もサポートされます。 これにより、より標準SQLに従うようになりました。

- セキュリティのためテーブルの`RULE`権限を削除しました。(Tom)

  本リリースから、テーブルの所有者のみがテーブルのルールの作成と変更を行うことができるようになります。 後方互換性のため`GRANT`/`REVOKE RULE`はまだ受け付けられますが、何も行われません。

- 配列比較の改良。(Tom)

  配列次元も比較されるようになりました。

- 配列の結合を文書に合わせるように変更しました。(Tom)

  この変更により、結合が配列の下限値を変更するような場合、過去の動作と異なるようになります。

- postmasterとpostgresコマンドラインオプションを同一にしました。(Peter)

  これにより、postmasterが、`-o`を使用せずに、各バックエンドに引数を渡すことができるようになりました。 単一文字のオプションと競合するため、一部のオプションは長めのオプションとしてのみ利用できるようになったことに注意してください。

- postmasterシンボリックリンクの使用の廃止予定(Peter)

  postmaster及びpostgresコマンドが同じように動作するようになりました。 その動作はコマンドラインオプションによって定まります。 postmasterというシンボリックリンクが互換性のために残されていますが、実際のところ必要性はありません。

- 問い合わせが出力されていなくても`log_duration`が出力するように変更しました。(Tom)

  以前のリリースでは、問い合わせが過去にログに現れている場合にのみ`log_duration`が出力されました。

- `to_char(time)`および`to_char(interval)`が`HH`と`HH12`を12時間周期で扱うようになりました。

  ほとんどのアプリケーションでは12時間周期の表示を求めない限り、`HH24`を使用すべきです。

- 変換におけるマスクされないゼロビットが`INET`から`CIDR`になりました。(Tom)

  これにより変換された値が確実に`CIDR`として有効になるようになりました。

- `australian_timezones`設定変数を削除しました。(Joachim Wieland)

  この変数は、より一般的な時間帯省略形の設定機構により上書きされていました。

- 入れ子状ループインデックススキャン用のコスト推定が改良されました。(Tom)

  これは、非現実的な小さい`random_page_cost`値に設定する必要性を無視するかもしれません。 非常に小さな`random_page_cost`を使用している場合は、試験をして確認してください。

- `pg_dump`の`-n`オプションと`-t`オプションの動作を変更しました。(Greg Sabino Mullane)

  詳細は`pg_dump`のマニュアルページを参照してください。

- libpq `PQdsplen()`が有効な値を返すように変更しました。(Martijn van Oosterhout)

- libpq `PQgetssl()`を`SSL *`ではなく`void *`を返すように宣言しました。(Martijn van Oosterhout)

  これによりアプリケーションは、OpenSSLヘッダをインクルードすることなくこの関数を使用できるようになります。

- バージョン互換性検査のために、C言語による動的ロード可能なモジュールが`PG_MODULE_MAGIC`マクロ呼び出しをインクルードしなければならなくなりました。(Martijn van Oosterhout)

- セキュリティ上の理由により、PL/PerlU関数によって使用されるモジュールはPL/Perl関数から使用できなくなりました。(Andrew)

  > 注意: これはまた、PL/Perl関数とPL/PerlU関数との間でデータを共有できなくなったことも意味します。 一部のPerlインストレーションでは、単一プロセス内で複数のインタプリタが存在することを許すための正しいフラグをつけてコンパイルされていませんでした。 こうした状況では、PL/PerlとPL/PerlUを単一のバックエンドで使用することはできません。 解決方法は、複数のインタプリタをサポートするPerlインストレーションを入手することです。

- `contrib/xml2/`で、`xml_valid()`が`xml_is_well_formed()`に名前を変更しました。(Tom)

  後方互換性のために`xml_valid()`も残っていますが、今後のリリースでスキーマ検査を行うように変更されます。

- `contrib/ora2pg/`が削除されました。 http://www.samse.fr/GPL/ora2pgが新設されました。

- PgFoundryに移行されたcontribモジュール`adddepend`、`dbase`、`dbmirror`、`fulltextindex`、`mac`、`userlock`が削除されました。

- 見捨てられたcontribモジュール`mSQL-interface`、`tips`が削除されました。

- QNXおよびBEOSへの移植が削除されました。(Bruce)

  これらの移植に関して活動できる保守者がいなくなりました。

## E.58.3. 変更点

以下に、PostgreSQL 8.2と以前のメジャーリリースとの間の違いについて詳しく記します。

### E.58.3.1. 性能向上

- ある環境において、プランナが外部結合の再順序付けすることが可能になりました。(Tom)

  以前のリリースでは、外部結合は常に問い合わせに記載された順序で評価されていました。 この変更により、結合の順序を変更しても問い合わせの意味が変わらないことが決定できる場合、問い合わせオプティマイザが外部結合の順序を考慮できるようになりました。 複数の結合が含まれる場合や、内部結合と外部結合が混在する場合に、目に見える程の性能が向上します。

- `IN` (式のリスト) の効率を向上しました。(Tom)

- ソート速度を向上し、メモリ消費量を低減しました。(Simon, Tom)

- 副トランザクションの性能を向上しました。(Alvaro, Itagaki Takahiro, Tom)

- tableおよびindexの生成に`FILLFACTOR`を追加しました。(ITAGAKI Takahiro)

  これは、データベースの容量が増えた時の性能を向上させることができるように、各テーブルページやインデックスページに追加の空き領域を確保します。 これは特に、クラスタ処理を管理する時に有効です。

- `shared_buffers`および`max_fsm_pages`のデフォルト値を増やしました。(Andrew)

- ロック管理テーブルをセクションに分割することでロック処理の性能を向上しました。 (Tom)

  これによりロック処理の粒度が細かくなり、競合が減少します。

- シーケンシャルスキャンにおけるロックの必要性を減少しました。(Qingqing Zhou)

- データベース生成または削除時のロックの必要性を減少しました。 (Tom)

- `LIKE`、`ILIKE`、regular expression操作における、オプティマイザの選択性推定を改良しました。(Tom)

- 継承されたテーブルの結合や`UNION ALL`ビューの計画作成を改良しました。(Tom)

- 制約による除外が 継承された `UPDATE`および`DELETE` 問い合わせに適用できるようになりました。(Tom)

  既に`SELECT`は制約による除外に従います。

- 条件が外側の問い合わせを継承する変数にのみに依存する条件など、一定の`WHERE`句に対する計画作成を改良しました。(Tom)

- プロトコルレベルの無名準備済み文が、`BIND`値の集合毎に計画作成されるようになりました。(Tom)

  正確なパラメータが計画で使用されるようになりますので、性能が向上します。

- B-Treeインデックスのバキューム処理の速度が向上しました。(Heikki Linnakangas, Tom)

- `VACUUM`期間中のインデックスを持たないテーブルに対する余計なスキャンを防止します。(Greg Stark)

- 複数列に対するGiSTインデックス作成を改良しました。(Oleg, Teodor)

- B-Treeページの分割を行う前に不要なインデックス項目を削除します。(Junji Teramoto)

### E.58.3.2. サーバの変更

- 新しいトランザクションログファイルに強制的に切り替えることができるようになりました。(Simon, Tom)

  これは、マスタと同期するウォームスタンバイスレーブサーバを維持するために有益なものです。 トランザクションログファイルの切り替えはまた、`pg_stop_backup()`時に発生します。 これにより、確実に、復旧に必要なすべてのトランザクションログファイルが即座にアーカイブされるようになります。

- WAL情報関数を追加しました。(Simon)

  現在のトランザクションログファイルの挿入箇所を問い合わせる関数、`pg_stop_backup()`や関連する関数で表示される16進数のWALの場所からWALファイル名を決定する関数を追加しました。

- WAL再生時のクラッシュからの復旧を改良しました。(Simon)

  サーバはWALリカバリ時の定期的なチェックポイントを行うようになりました。 そのため、クラッシュした場合、その後のWALの修復は省かれます。 また、これにより、ウォームスタンバイサーバがクラッシュしたとしても、ベースバックアップからログ全体を再生する必要性もなくなります。

- 長期に渡るWAL再生の信頼性を向上しました。(Heikki, Simon, Tom)

  これまでは、2億トランザクション以上をロールフォーワードしようとした場合、XID周回のために正常に動作しませんでした。 これは、ウォームスタンバイサーバが、新しいベースバックアップから定期的にリロードしなおす必要があることを意味します。

- 指定間隔でトランザクションログファイルの切り替えを強制できるように`archive_timeout`を追加しました。(Simon)

  これは、ウォームスタンバイサーバ用の最大複製遅延を強制します。

- ネイティブなLDAP認証を追加しました。(Magnus Hagander)

  これは特に、WindowsなどPAMをサポートしないプラットフォームで便利です。

- `GRANT CONNECT ON DATABASE`を追加しました。(Gevik Babakhani)

  これにより、データベースアクセス全体をSQLレベルで制御できます。 これは、既存の`pg_hba.conf`による制御の上位に追加されるフィルタとして動作します。

- SSL証明書失効リスト (CRL)ファイルのサポートを追加しました。(Libor Hohoš)

  サーバおよびlibpqがCRLファイルを認識できるようになりました。

- GiSTインデックスがクラスタ可能になりました。(Teodor)

- 定常的な自動バキュームのサーバログ項目を削除しました。(Bruce)

  `pg_stat_activity`が自動バキュームの状況を表示するようになりました。

- データベース全体ではなく、個々のテーブルで最大XID年代を追跡するようにしました。(Alvaro)

  これにより不要なVACUUMを防ぐことができ、トランザクションID周回を防止するためのオーバーヘッドを減少させることができます。

- 前回バキュームした時刻、解析した時刻を統計コレクタの列に追加しました。(Larry Rosenman)

  これらの変数は`pg_stat_*_tables`システムビューに表示されます。

- 統計処理監視、特に`stats_command_string`の性能を向上しました。(Tom, Bruce)

  このリリースではデフォルトで`stats_command_string`が有効です。 そのオーバーヘッドが最小になっています。 これは`pg_stat_activity`がデフォルトですべての有効な問い合わせを表示するようになったことを意味します。

- `waiting`列を`pg_stat_activity`に追加しました。 (Tom)

  これにより、`pg_stat_activity`はps表示で含まれるすべての情報を表示できるようになります。

- psの表示を各コマンドで更新するかどうかを制御する`update_process_title`設定パラメータを追加しました。(Bruce)

  ps表示の更新処理が高価なプラットフォームでは、これを無効にし、ステータス情報を`pg_stat_activity`に任せた方が良いかもしれません。

- 設定時に単位を指定できるようになりました。 (Peter)

  例えば、`shared_buffers`を、暗算でサイズ変換することなく、`32MB`と指定することができるようになりました。

- `postgresql.conf`内でinclude指示子のサポートを追加しました。(Joachim Wieland)

- プロトコルレベルのprepare/bind/executeメッセージのログ処理を改良しました。(Bruce, Tom)

  ログ処理などで、文の名前、バインドパラメータ値、実行される問い合わせテキストを表示するようになりました。 また、`log_min_error_statement`が有効な場合、問い合わせテキストには、エラーメッセージが適切に含まれます。

- `max_stack_depth`が危険な値に設定されることを防止します。

  実際のカーネルスタック長の上限が決定できるプラットフォーム（ほとんどの場合）では、`max_stack_depth`の初期デフォルト値が安全になりました。 また、危険なほど大きな値が設定されたとしても拒絶します。

- 多くの場合で、問い合わせ内のエラー箇所のハイライトが可能になりました。(Tom)

  これまでのような基本的な構文エラーだけでなく、サーバが一部の意味的なエラー（不明な列名など）に対しエラー箇所を指定して報告できるようになりました。

- `VACUUM`における"failed to re-find parent key"エラーを修正しました。

- サーバ再起動時、`pg_internal.init`キャッシュファイルを初期化するようにしました。(Simon)

  これは、PITRリカバリの後にキャッシュファイルが無効なデータを含む危険性を防止します。

- `VACUUM`による1ギガバイト境界を越える大規模リレーションの消去における競合状態を修正しました。(Tom)

- 行レベルロックにおいて不要なデッドロックエラーを発生する不具合を修正しました。(Tom)

- 数ギガバイトのハッシュインデックスに影響する不具合を修正しました。(Tom)

- 各バックエンドプロセスが自身のプロセスグループリーダとなります。(Tom)

  これにより、問い合わせのキャンセルがバックエンドプロセスやアーカイブ/リカバリプロセスから呼び出された子プロセスを中断できるようになりました。

### E.58.3.3. 問い合わせの変更

- `INSERT`/`UPDATE`/`DELETE` `RETURNING`を追加しました。(Jonah Harris, Tom)

  これにより、これらのコマンドが、新しい行に対して計算された連番キーなどの値を返すことができます。 `UPDATE`の場合、更新されたバージョンの行の値が返されます。

- 標準SQLに従った、複数行`VALUES`句のサポートを追加しました。(Joe, Tom)

  これにより、`INSERT`は複数の定数行を挿入することができます。 また、定数を使用した結果セットを生成する問い合わせを行うこともできます。 例えば、`INSERT ... VALUES (...), (...), ....`や`SELECT * FROM (VALUES (...), (...), ....) AS alias(f1, ...)`です。

- `UPDATE`および`DELETE`が対象テーブルの別名を使用できるようになりました。(Atsushi Ogawa)

  標準SQLでは、これらのコマンドで別名を許していません。 しかし、多くのデータベースシステムでは、便利な記法として許しています。

- `UPDATE`が値リストで複数列を指定できるようになりました。(Susanne Ebrecht)

  基本的にこれは、列と値の組み合わせ割り当てに関する簡略形です。 構文は、`UPDATE tab SET (`column`, ...) = (`val`, ...)`です。

- 標準に従った行の比較ができるようになりました。(Tom)

  <、<=、>、>=という形式で行を辞書的に比較します。 つまり、最初の要素を比較し、もし同じならば、2番目の要素をという旬に比較します。 以前は、これらは全要素に対するAND条件として展開されました。 標準に従っているわけでもなく、特に便利であるわけでもありませんでした。

- `TRUNCATE`に`CASCADE`オプションを追加しました。(Joachim Wieland)

  これにより、`TRUNCATE`は自動的に指定したテーブルを外部キー経由で参照するすべてのテーブルを含めるようになります。 便利ではありますが、危険なものです。 注意して使用してください。

- 同一`SELECT`コマンドで`FOR UPDATE`と`FOR SHARE`をサポートします。(Tom)

- `IS NOT DISTINCT FROM`を追加しました。(Pavel Stehule)

  この演算子は等価演算子（`=`）と似ています。しかし、`NULL`を返すのではなく、右辺と左辺が`NULL`の場合に真と、片方だけが`NULL`の場合に偽と評価します。

- `UNION`/`INTERSECT`/`EXCEPT`で使用される長さ出力を改良しました。 (Tom)

  すべての対応する列が同じ長さで定義された場合、一般的な長さではなく、その定義された長さが結果として使用されます。

- `ILIKE`がマルチバイト符号化方式で動作できるようになりました。(Tom)

  内部的には、`ILIKE`が`lower()`を呼び出した後に`LIKE`を使用するようになりました。 こうした符号化方式では、ロケール固有の正規表現パターンはまだ正常に動作しません。

- `standard_conforming_strings`を`on`にできるようになりました。(Kevin Grittner)

  これにより、文字列内のバックスラッシュエスケープは無効になり、PostgreSQLがより標準に準拠するようになりました。 後方互換性のためデフォルトは`off`ですが、将来は`on`がデフォルトになる予定です。

- 対象リストに`volatile`関数が含まれている場合に副問い合わせを平坦化しません。(Jaime Casanova)

  これは、`volatile`関数（`random()`や`nextval()`など）の複数回の評価による想定外の振る舞いを防止します。 不必要に`volatile`と宣言された関数があると、性能劣化をもたらす可能性があります。

- 準備済み文と開いているカーソルを示す`pg_prepared_statements`および`pg_cursors`システムビューを追加しました。(Joachim Wieland, Neil)

  接続プールを設定している場合に非常に有用です。

- `EXPLAIN`および`EXECUTE`においてポータルパラメータをサポートします。(Tom)

  これにより、例えばJDBCの`?`パラメータでこれらのコマンドを動作させることができます。

- SQLレベルで`PREPARE`パラメータが指定されない場合、問い合わせの文脈から型を推定します。(Neil)

  プロトコルレベルの`PREPARE`では既に実現していました。

- `LIMIT`および`OFFSET`が200億以上を使用できるようになりました。(Dhanaraj M)

### E.58.3.4. オブジェクト操作における変更

- `CREATE TABLE AS`に`TABLESPACE`句を追加しました。 (Neil)

  これにより新しいテーブルを作成するときにテーブル空間を指定できます。

- `CREATE TABLE AS`に`ON COMMIT`句を追加しました。 (Neil)

  これにより、一時テーブルをトランザクションのコミット時に消去したり削除したりすることができます。 デフォルトの動作では、セッションが終了するまでテーブルは残ります。

- `CREATE TABLE LIKE`に`INCLUDING CONSTRAINTS`を追加しました。 (Greg Stark)

  これにより、新しいテーブルに簡単に`CHECK`制約をコピーすることができます。

- プレースホルダ（シェル）型を生成できます。(Martijn van Oosterhout)

  シェル型の宣言は、型の仕様を指定せずに型の名前を生成します。 シェル型の作成は、型を"実際に"定義する前に存在しなければならない、型の入出力関数の宣言を整理することができる点で有用です。 構文は、`CREATE TYPE `typename``です。

- 集約関数が複数の入力パラメータをサポートするようになりました。(Sergey Koposov, Tom)

- 新しい集約関数作成構文を追加しました。(Tom)

  新しい構文は`CREATE AGGREGATE `aggname` (`input_type`) (`parameter_list`)`です。 これはより自然に、新しい複数パラメータ集約機能をサポートします。 これまでの構文もまだサポートします。

- 過去に設定したロールパスワードを削除する`ALTER ROLE PASSWORD NULL`を追加しました。(Peter)

- 多くのオブジェクト種類について、 `IF EXISTS`付きの`DROP`操作を追加しました。

  これにより、オブジェクトが存在しなくてもエラーとなることなく、`DROP`操作を行うことができます。

- ロールが所有するすべてのオブジェクトを削除する`DROP OWNED`を追加しました。(Alvaro)

- あるロールが所有するすべてのオブジェクトの所有権を再割り当てする`REASSIGN OWNED`を追加しました。(Alvaro)

  これと上述の`DROP OWNED`によりロールの削除が簡単になります。

- `GRANT ON SEQUENCE`構文を追加しました。(Bruce)

  シーケンス固有の権限設定のために追加されました。 シーケンスに対する`GRANT ON TABLE`も後方互換のためにまだサポートされています。

- シーケンスに対し`currval()`および`nextval()`のみを許可し、 `setval()`を許可しない`USAGE`権限を追加しました。 (Bruce)

  `USAGE`権限により、シーケンスに対するアクセス制御を細かく制御できるようになります。 `USAGE` を付与することで、シーケンスを増やすことはできるが、`setval()`を使用して任意の値に設定することはできないユーザを作成することができます。

- `ALTER TABLE [ NO ] INHERIT`を追加しました。(Greg Stark)

  これにより、テーブルの生成と削除時だけではなく、動的に継承を調整できるようになります。 テーブル分割を行うために継承を使用する時に非常に有用です。

- グローバルオブジェクトに対するコメントをグローバルに保管することができます。 (Kris Jurka)

  これまでは、データベースに対するコメントは個々のデータベースに格納され、無効なものとしていました。 また、ロールやテーブル空間に対するコメントを付与することはまったくできませんでした。 この変更では、新しい共有カタログ`pg_shdescription`を追加し、そこにデータベース、ロール、テーブル空間に対するコメントを保管します。

### E.58.3.5. ユーティリティコマンドの変更点

- テーブルへの同時書き込みをブロックせずにインデックスを作成できるオプションを追加しました。(Greg Stark, Tom)

  新しい構文は`CREATE INDEX CONCURRENTLY`です。 デフォルトでは、まだインデックス作成中のテーブルの変更はブロックされます。

- 勧告的ロック機能を提供します。(Abhijit Menon-Sen, Tom)

  これは、/contrib/userlockで使用されていたものを置き換えるために設計された、新しいロック処理APIです。 userlockのコードはpgfoundryに移行しました。

- `COPY`が`SELECT`問い合わせをダンプできるようになりました。(Zoltan Boszormenyi, Karel Zak)

  これにより`COPY`は任意のSQL問い合わせをダンプできるようになりました。 構文は`COPY (SELECT ...) TO`です。

- `COPY`がコピーされた行数を含むコマンドタグを返すようになりました。(Volkan YAZICI)

- `VACUUM`が同時実行中の他の`VACUUM`操作の影響を受けることなく行をエキスパイアできるようになりました。(Hannu Krossing, Alvaro, Tom)

- initdbがオペレーティングシステムのロケールを検出し、それに合う`DateStyle`のデフォルトを設定するようになりました。(Peter)

  これにより、インストールされる`postgresql.conf`内の`DateStyle`がより好ましいものになるようになりました。

- initdbが表示する進行メッセージ数を減らしました。(Tom)

### E.58.3.6. 日付時刻に関する変更点

- `timestamp`の入力値に完全な時間帯名称を指定できます。 (Joachim Wieland)

  例えば、`'2006-05-24 21:11 America/New_York'::timestamptz`です。

- 設定変更可能な時間帯省略形をサポートします。(Joachim Wielan)d

  使用したい時間帯省略形の集合を`timezone_abbreviations`設定パラメータで選択できます。

- サポートされる時間帯を示す、`pg_timezone_abbrevs`および`pg_timezone_names`ビューを追加しました。(Magnus Hagander)

- `clock_timestamp()`、`statement_timestamp()`、`transaction_timestamp()`を追加しました。 (Bruce)

  `clock_timestamp()`は実際の現在時刻を、`statement_timestamp()`は現在の問い合わせがサーバに届いた時刻を表します。 `transaction_timestamp()`は`now()`の別名です。

- `to_char()`が翻訳された月日名称を表すことができるようになりました。(Euler Taveira de Oliveira)

- `to_char(time)`および`to_char(interval)`でAM/PM指定の出力ができるようになりました。 (Bruce)

  時間間隔および時間が24時間周期で扱われます。 例えば、`25 hours`はAMとみなされます。

- 時間間隔の単位を調整する`justify_interval()`関数を追加しました。(Mark Dilger)

- GMTから14:59離れたオフセットを持つ時間帯を持つことができます。

  キリバス共和国ではGMT+14が使用します。 これを受け付けられるようにしました。

- 時間間隔計算を改良しました。(Michael Glaesemann, Bruce)

### E.58.3.7. その他、データ型および関数の変更

- 配列が`NULL`要素を含むことができます。(Tom)

- 連続して項目が存在しない配列要素への代入が可能です。(Tom)

  空いている配列位置はNULLで埋められます。 これは標準SQLに従います。

- 部分配列の比較に関して、新規の組み込み演算子（`@>`、`<@`、`&&`）を追加しました。 (Teodor, Tom)

  これらの演算子は任意のデータ型に対して、GiSTまたは GINインデックスを使用してインデックス付けできます。

- `INET`/`CIDR`値に対して便利な算術操作を追加しました。

  新しい演算子は`&` (論理積)、`|`(論理和)、`~` (否定)、`inet` `+` `int8`、`inet` `-` `int8`、`inet` `-` `inet`です。

- SQL:2003の集約関数を新規に追加しました。

  新しい関数は、`var_pop()`、`var_samp()`、`stddev_pop()`、`stddev_samp()`です。 `var_samp()`および`stddev_samp()`は、既存の集約関数`variance()`と`stddev()`の名前を変更したものに過ぎません。 後方互換のために、後者の名前も残っています。

- SQL:2003の統計処理集約を追加しました。 (Sergey Koposov)

  新しい関数は、`regr_intercept()`、`regr_slope()`、`regr_r2()`、`corr()`、`covar_samp()`、`covar_pop()`、`regr_avgx()`、`regr_avgy()`、`regr_sxy()`、`regr_sxx()`、`regr_syy()`、`regr_count()`です。

- 他のドメインに基づいたドメインが可能になりました。(Tom)

- すべての所で適切にドメイン`CHECK`制約が適切に強制されるようになりました。(Neil, Tom)

  例えば、ドメイン型を返すものと宣言されたユーザ定義関数の結果がドメインの制約に対して検査されるようになりました。 これはドメイン実装における重大な抜け穴をなくしました。

- 名前が変更された`SERIAL`列のダンプ処理の問題を解消しました。 (Tom)

  この修正は、 明示的に`DEFAULT`が指定された`SERIAL`列と、そのシーケンス要素をダンプし、新しい`ALTER SEQUENCE OWNED BY`コマンドを使用してリロード時に`SERIAL`列を再構成するためのものです。 また、これにより`SERIAL`列の仕様が削除できるようになりました。

- サーバサイドのスリープ関数`pg_sleep()`を追加しました。 (Joachim Wieland)

- `tid` (タプルID)データ型の比較演算子をすべて追加しました。(Mark Kirkwood, Greg Stark, Tom)

### E.58.3.8. PL/pgSQLサーバサイド言語の変更点

- `TG_table_name`および`TG_table_schema`をトリガパラメータに追加しました。(Andrew)

  `TG_relname`は廃止予定です。 トリガパラメータにおける同様の変更が他のPLでもなされています。

- `FOR`文を使用して、レコード型や行型同様にスカラ値を返すことが可能です。(Pavel Stehule)

- 繰り返しの増分を制御できるように`FOR`ループに`BY`句を追加しました。(Jaime Casanova)

- `STRICT`を`SELECT INTO`に追加しました。 (Matt Miller)

  Oracle PL/SQLとの互換性のために、`STRICT`で、 `SELECT`によって返される行が正確に1行でない場合に例外を返すようになりました。

### E.58.3.9. PL/Perlサーバサイド言語における変更点

- `table_name`および`table_schema`をトリガパラメータに追加しました。(Adam Sjøgren)

- 準備済み問い合わせを追加しました。(Dmitry Karasik)

- `$_TD`トリガデータをグローバル変数にしました。(Andrew)

  以前はレキシカル変数でした。このため想定外の共有違反が起こりました。

- セキュリティ対策として、PL/PerlとPL/PerlUが別のインタプリタで動作するようになりました。(Andrew)

  このため、共有データやロード済みモジュールを両者で共有することができません。 また、Perlが複数のインタプリタが可能となるように必要なフラグをつけてコンパイルされていない場合、2つの内1つしかあるバックエンドプロセスで使用することができません。

### E.58.3.10. PL/Pythonサーバサイド言語における変更点

- 名前付きパラメータが、`args[]`配列同様、普通の変数として渡されます。(Sven Suursoho)

- `table_name`および`table_schema`をトリガパラメータに追加しました。(Andrew)

- 複合型および結果セットを返すことが可能です。(Sven Suursoho)

- `list`、`iterator`、`generator` として結果セットを返します。(Sven Suursoho)

- 関数は`void`を返すことができます。(Neil)

- Python 2.5をサポートしました。(Tom)

### E.58.3.11. psqlにおける変更点

- クライアント側のパスワード暗号化を使用してロールのパスワードを変更する`\password`コマンドを新規に追加しました。(Peter)

- `\c`により、新規にホスト、ポート番号を指定して接続することができます。(David, Volkan YAZICI)

- テーブル空間の表示をする`\l+`を追加しました。 (Philip Yarra)

- 関数の引数名とモード（`OUT`または`INOUT`）を含めるように`\df`スラッシュコマンドを改良しました。(David Fetter)

- バイナリ`COPY`をサポートしました。(Andreas Pflug)

- 単一トランザクション内でセッション全体を実行させるオプションを追加しました。(Simon)

  `-1`または`--single-transaction`を使用してください。

- カーソルを使用したバッチ内で自動的に`SELECT`の結果を取り出せるようにしました。(Chris Mair)

  これは`\set FETCH_COUNT `n``を使用して実現します。 この機能により、メモリ内に結果セット全体を保存することなく、大規模な結果セットをpsql内で取り出すことができます。

- 複数行に渡る値を適切な列数で整列します。 (Martijn van Oosterhout)

  改行を含むフィールド値がより読みやすく表示されます。

- 複数行に渡る文を、1行ごとではなく、単一の文と同様に保存します。(Sergey E. Koposov)

  カーソル行による問い合わせの再呼び出しをより簡単に行うことができます。 （これはWindowsでは不可能です。 このプラットフォームでは、オペレーティングシステムに組み込まれたコマンドライン編集機能を使用しているためです。）

- 行カウンタを64ビットにしました。 このため200億行以上のファイルを扱うことが可能です。(David Fetter)

- `INSERT`/`UPDATE`/`DELETE RETURNING`で返されるデータとコマンドステータスタグの両方を表示します。(Tom)

### E.58.3.12. pg_dumpにおける変更点

- pg_dumpによる含有または除外するオブジェクトの選択がより複雑にできるようになりました。 (Greg Sabino Mullane)

  pg_dumpは、複数の`-n`（スキーマ）と複数の `-t`（テーブル）オプションをサポートするようになりました。 また、オブジェクトを除外する`-N`および`-T`オプションも追加されました。 また、これらのスイッチの引数に、単一のオブジェクト名ではなく、例えば、`-t 'foo*'`といったワイルドカード表現を指定できるようになりました。 更に、スキーマを`-t`や`-T`スイッチの一部、例えば`-t schema1.table1`として指定できるようになりました。

- テーブル作成に失敗（つまり、テーブルが既に存在する）した場合にデータのロードを中断する`--no-data-for-failed-tables`オプションをpg_restoreに追加しました。(Martin Pitt)

- 単一トランザクションでセッション全体を実行させるオプションをpg_restoreに追加しました。 (Simon)

  このためには`-1`または`--single-transaction`を使用してください。

### E.58.3.13. libpqにおける変更点

- パスワード暗号化のために`PQencryptPassword()`を追加しました。(Tom)

  これによりパスワードを事前に暗号化して`ALTER ROLE ... PASSWORD`などのコマンドに渡すことができます。

- `PQisthreadsafe()`関数を追加しました。 (Bruce)

  これによりアプリケーションはライブラリのスレッド安全性を問い合わせることができます。

- 準備済み文や開いているカーソルに関する情報を返す、`PQdescribePrepared()`、`PQdescribePortal()`、その他関連する関数を追加しました。(Volkan YAZICI)

- `pg_service.conf`からLDAP検索が可能です。 (Laurenz Albe)

- `~/.pgpass`内のホスト名をデフォルトのソケットディレクトリと一致できるようにしました。(Bruce)

  ホスト名が空の場合、続きがUnixソケット接続と比較されます。 この追加によりマシン上の複数のサーバプロセスの1つを特定する項目を持つことができます。

### E.58.3.14. ecpgにおける変更点

- `SHOW`はその結果を変数に格納することができます。(Joachim Wieland)

- `COPY TO STDOUT`を追加しました。 (Joachim Wieland)

- リグレッション試験を追加しました。(Joachim Wieland, Michael)

- ソースコードの多くを整理しました。(Joachim Wieland, Michael)

### E.58.3.15. Windows移植

- MSVCでPostgreSQLサーバをコンパイルできるようにしました。(Magnus, Hiroshi Saito)

- ユーティリティコマンドやpg_dumpのMSVCサポートを追加しました。 (Hiroshi Saito)

- Windowsコードページ`1253`、`1254`、`1255`、`1257`のサポートを追加しました。 (Kris Jurka)

- サーバが管理アカウントから起動できるように起動時の権限をなくしました。 (Magnus)

- 安定性を向上させました。(Qingqing Zhou, Magnus)

- ネイティブなセマフォを実装しました。(Qingqing Zhou)

  これまでのコードはSysVセマフォをまねたものでした。

### E.58.3.16. ソースコードにおける変更点

- GIN（汎用転置インデックス）インデックスアクセスメソッドを追加しました。(Teodor, Oleg)

- R-treeインデックスを削除しました。(Tom)

  R-treeはGiSTを使用して再実装されました。 とりわけ、これは、R-treeインデックスで先行書き込みログ（WAL）を使用したクラッシュからの復旧が可能になったことを意味します。

- バックエンドでリンクが必要となるライブラリを減少しました。(Martijn van Oosterhout, Tom)

- GNU readlineよりもlibeditを優先させるフラグをconfigureに追加しました。(Bruce)

  `--with-libedit-preferred`を使用してconfigureを実行してください。

- 空白文字を含むディレクトリにインストールできるようにしました。 (Peter)

- インストールディレクトリの再割り当て機能を改良しました。(Tom)

- Solarisコンパイラを使用したSolaris x86_64のサポートを追加しました。(Pierre Girard, Theo Schlossnagle, Bruce)

- DTraceサポートを追加しました。(Robert Lor)

- サードパーティアプリケーションが、C言語で>、<比較を使用してバックエンドのバージョンを検査できるように`PG_VERSION_NUM`を追加しました。(Bruce)

- `BLCKSZ`と独立して、`XLOG_BLCKSZ`を追加しました。 (Mark Wong)

- ロック状況を報告するための`LWLOCK_STATS`定義を追加しました。 (Tom)

- 不明なconfigureオプションに関する警告を出力します。(Martijn van Oosterhout)

- デバッグや性能測定などの追加作業に使用することができる"plugin"ライブラリのサーバサポートを追加しました。(Korry Douglas)

  これは2つの機能からなります。 1つは、"ランデブー変数"のテーブルであり、これにより別々にロードされた共有ライブラリ間で通信を行うことができます。 2つ目は、新しい`local_preload_libraries`設定パラメータであり、これにより、クライアントアプリケーションから明示的な協力をすることなく、ライブラリを指定したセッションにロードさせることができます。 これにより、PL/pgSQLデバッガなど、外部アドオンを実装機能を実装することができます。

- 既存の`preload_libraries`設定パラメータを`shared_preload_libraries`に名前を変更しました。 (Tom)

  これは、`local_preload_libraries`との違いを明確にするために行いました。

- 新しい`server_version_num`設定パラメータを追加しました。 (Greg Sabino Mullane)

  これは`server_version`と似ていますが、例えば`80200`といった整数値です。 これによりアプリケーションはバージョン検査をより簡単に行うことができます。

- `seq_page_cost`設定パラメータを追加しました。 (Tom)

- Cプログラムとしてリグレッション試験スクリプトを再実装しました。 (Magnus, Tom)

- ロード可能モジュールが共有メモリと軽量ロックを割り当てできるようにしました。(Marc Munro)

- 動的にロードしたライブラリの自動的な初期化処理と最終処理を追加しました。(Ralf Engelschall, Tom)

  新しい関数`_PG_init()`と`_PG_fini()`が、これらのシンボルを定義したライブラリで、呼び出されます。 したがって、`shared_preload_libraries`内で初期化関数を指定する必要がなくなりました。 こうしたライブラリでは代わりに`_PG_init()`規約が使用されるものと仮定することができます。

- すべての共有オブジェクトファイルに`PG_MODULE_MAGIC`ヘッダブロックを追加しました。(Martijn van Oosterhout)

  このマジックブロックは、ロード可能オブジェクトファイルとサーバとの間のバージョン不整合を防止するものです。

- AIXでの共有ライブラリサポートを追加しました。(Laurenz Albe)

- 新しいXML文書セクションを追加しました。(Bruce)

### E.58.3.17. Contrib における変更点

- tsearch2が大きく改良されました。(Oleg, Teodor)

  - UTF8を含むマルチバイト符号化方式のサポート。

  - 問い合わせ書き換えのサポート。

  - ランク付け関数の改良。

  - シソーラス辞書のサポート

  - Ispell辞書が、OpenOfficeで使用されるMySpell書式を認識するようになりました。

  - GINのサポート

- Pgadmin管理関数を含むadminpackモジュールを追加しました。

  これらの関数は、デフォルトのPostgreSQLサーバには存在しない、追加のファイルシステムアクセス処理を提供します。

- sslinfoモジュールを追加しました。(Victor Wagner)

  現在の接続におけるSSL証明に関する情報を表示します。

- pgrowlocksモジュールを追加しました。

  これは、指定したテーブルに関する行ロック情報を表示します。

- hstoreモジュールを追加しました。 (Oleg, Teodor)

- isbn_issnを置き換えて、isnモジュールを追加しました。 (Jeremy Kronuz)

  この新しい実装では、EAN13、UPC、ISBN (書籍), ISMN (音楽)、ISSN (シリアル番号)をサポートします。

- pgstattupleにインデックス情報関数を追加しました。 (ITAGAKI Takahiro, Satoshi Nagayasu)

- 空き領域マップ情報を表示するpg_freespacemapを追加しました。 (Mark Kirkwood)

- pgcryptoが予定していたすべての機能を持つようになりました。(Marko Kreen)

  - 公開キー暗号関数が常に利用できるようにiMathライブラリをpgcryptoに含めました。

  - OpenBSD用のコードで存在しなかったSHA224アルゴリズムを追加しました。

  - 古めのOpenSSLにおけるSHA224/256/384/512ハッシュ用の組み込みコードを有効化し、常にこれらのアルゴリズムが利用できるようになりました。

  - 暗号化に使用される乱数の強度を返すgen_random_bytes()関数を追加しました。 暗号化キーの生成に便利です。

  - digest_exists()、hmac_exists()、cipher_exists()関数を削除しました。

- cubeモジュールを改良しました。(Joshua Reich)

  `cube(float[])`、`cube(float[], float[])`、`cube_subset(cube, int4[])`関数を追加しました。

- dblinkに非同期問い合わせ機能を追加しました。(Kai Londenberg, Joe Conway)

- 部分配列比較用に新しい演算子（`@>`、`<@`、`&&`）を追加しました。(Tom)

  各種contribパッケージで、独自のデータ型用に既にこれらの演算子を持っていましたが、命名に一貫性がありませんでした。 コアコードと、こうした機能を持つcontribパッケージすべてに、一貫性を持った名前の部分配列の比較演算子を追加しました。

- インストールスクリプトを持つすべてのcontribパッケージに対してアンインストール用のスクリプトを追加しました。(David, Josh Drake)

前のページ | ホーム | 次のページ
リリース 8.2.1 | 上に戻る | リリース8.1.23