リリース9.1

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

# E.2. リリース9.1

> リリース日: 2011-09-12

## E.2.1. 概要

このリリースは、PostgreSQLが伝統的なリレーショナルデータベース機能群を超え、PostgreSQL独特の新しく革新的な機能を持つものになったことを表しています。 リリース9.0で導入されたストリーミングレプリケーション機能は、同期レプリケーションオプション、ストリームを使用したバックアップ、監視の改良を追加することにより非常に強化されました。 以下に多くの改良を示します。

- 同期レプリケーションが可能です。

- 外部テーブルのサポートを追加しました。

- 列単位の照合順序のサポートを追加しました。

- PostgreSQLの追加パッケージを簡略化する拡張を追加しました。

- 本物のシリアライザブル隔離レベルを追加しました。

- `CREATE TABLE`内の`UNLOGGED`オプションを使用する、ログを取らないテーブルをサポートします。

- `WITH`句内でデータ変更コマンド（`INSERT`/`UPDATE`/`DELETE`）が可能です。

- GiSTインデックスに（演算子で順序付けされた）近傍検索を追加しました。

- `SECURITY LABEL`コマンドとSELinux権限制御のサポートを追加しました。

- PL/Pythonサーバサイド言語を更新しました。

上記の項目については後述の節で詳しく説明します。

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

全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ/リストア、または、pg_upgradeの使用が必要です。

バージョン9.1には、以前のリリースとの互換性に影響する多くの変更が含まれます。 以下の非互換性に注意してください。

### E.2.2.1. 文字列

- `standard_conforming_strings`のデフォルト値が有効に変わりました。(Robert Haas)

  デフォルトで文字列リテラル内のバックスラッシュが通常の文字になります。 この変更により長く存在した標準SQLとの非互換性がなくなります。 長い間`escape_string_warning`がこの使用に関する警告を発生していました。 `E''`文字列が文字列内にバックスラッシュを埋め込む適切な方法であり、この変更による影響を受けません。

  警告
  この変更は、これを想定せずに古い規則にしたがった独自の文字列エスケープ処理を行うアプリケーションを破壊する可能性があります。 この結果SQLインジェクションセキュリティホールをもたらしてしまうほど厳しいものです。 信頼できない入力を外部にさらしだすアプリケーションを試験し、テキスト文字列内のバックスラッシュと単一引用符を正しく扱っていることを確認してください。

### E.2.2.2. キャスト

- 複合型に対する、関数形式の型キャストおよび属性形式の型キャストを許しません。(Tom Lane)

  例えば``composite_value`.text`と`text(`composite_value`)`は許されません。 意図しないこの構文の使用により頻繁に不具合報告がなされました。 これは不具合ではありませんが、こうした表現を拒絶するように戻す方が良いように考えました。 複合型全体のキャストを本当に意図している場合には`CAST`および`::`構文がまだ使用できます。

- 配列に基づくドメインに対するキャスト検査を厳しくしました。(Tom Lane)

  ドメインが配列型に基づく場合、要素を取り出したり代入したりするためにドメイン値に添え字を付けるなど、配列要素にアクセスするためにドメイン型に"目を通す"ことができます。 例えば`UPDATE ... SET domaincol[5] = ...`などこうしたドメイン値の要素への代入はドメイン型の制約で再検査されるようになりました。 これまではこの検査は飛ばされていました。

### E.2.2.3. 配列

- `string_to_array()`が長さゼロの文字列に対して空の配列を返すように変更しました。(Pavel Stehule)

  これまではNULL値を返しました。

- `NULL`セパレータが文字列を文字に分割するように`string_to_array()`を変更しました。(Pavel Stehule)

  これまではNULL値を返しました。

### E.2.2.4. オブジェクトの操作

- BEFORE/AFTERトリガに対する不適切な検査を修正しました。(Tom Lane)

  トリガが次の３つの場合で発行できるようになりました。 `BEFORE`、`AFTER`、何らかの作業の`INSTEAD OF`（代わり）。 トリガ関数の作者は、３つの場合すべてにおいてロジックが健全であることを検証しなければなりません。

- ロールにコメントを設定するためにはスーパーユーザ権限または`CREATEROLE`権限が必要です。(Tom Lane)

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

- 後方に移動することがないように`pg_last_xlog_receive_location()`を変更しました。(Fujii Masao)

  これまでは、ストリーミングレプリケーションが再開する時に`pg_last_xlog_receive_location()`の値が後方に移ることがあり得ました。

- `log_connections`にしたがったレプリケーション接続のログが取られます。(Magnus Hagander)

  これまでは、レプリケーション接続のログは常に取られていました。

### E.2.2.6. PL/pgSQLサーバサイド言語

- 付与された例外ブロックで例外が捕捉できるようにパラメータを持たないPL/pgSQLの`RAISE`コマンドを変更しました。(Piyush Newe)

  これまではコードブロック内の`RAISE`は常に付与された例外ブロックのスコープと同じになりました。 このため同じスコープのものは捕捉できませんでした。

- 他の手続き言語と一貫性を持つようにPL/pgSQLのエラー行のコードの番号付けを調整しました。(Pavel Stehule)

  これまでのPL/pgSQLでは、関数本体の先頭にある空行を無視していました(数えませんでした)。 これは他のすべての言語と一貫していませんでしたので、この特別な扱いを取りやめました。

- INパラメータとOUTパラメータの名前に競合がある場合にPL/pgSQLが警告を出すようにしました。(Tom Lane)

  これまでは重複を検出しませんでした。 その名前は警告なく単にOUTパラメータのみを参照していました。

- PL/pgSQL変数の型修飾子がSQLパーサから可視になりました。(Tom Lane)

  PL/pgSQL変数に付与された（varchar型の長さ制限などの）型修飾子はこれまで代入時に強制されていましたが、他の目的のためにはすべて無視されていました。 こうした変数が、より同じ修飾子を付けて宣言されたテーブル列のように動作するようになりました。 ほとんどの場合で目に見えるような違いが発生するとは思われませんが、 PL/pgSQL関数で発行された同じSQLコマンドで微妙な違いが発生するかもしれません。

### E.2.2.7. Contrib

- すべてのcontribモジュールは、独自のSQLスクリプトを手作業で呼び出すのではなく、`CREATE EXTENSION`を用いてインストールされます。(Dimitri Fontaine、Tom Lane)

  バージョン9.0のcontribモジュールを含む既存のデータベースを更新する場合は、既存のcontribモジュールのオブジェクトを拡張としてまとめるために`CREATE EXTENSION ... FROM unpackaged`を使用してください。 9.0より前のバージョンから更新する場合は、古いアンインストールスクリプトを使用してcontribモジュールのオブジェクトを削除してから`CREATE EXTENSION`を使用してください。

### E.2.2.8. その他の非互換性

- `pg_stat_reset()`がすべてのデータベースレベルの統計情報を再初期化するようになりました。(Tomas Vondra)

  一部の`pg_stat_database`カウンタが再初期化されていませんでした。

- `information_schema.triggers`の一部の列名を新しい標準SQLの名前に合致するように修正しました。(Dean Rasheed)

- ECPGのカーソル名を大文字小文字を区別せずに扱います。(Zoltan Boszormenyi)

## E.2.3. 変更点

PostgreSQL 9.1と前回のメジャーリリースとの間の変更について詳細を以下に記します。

### E.2.3.1. サーバ

#### E.2.3.1.1. 性能

- `CREATE TABLE`内の`UNLOGGED`オプションを使用する、ログを取らないテーブルをサポートします。(Robert Haas)

  こうしたテーブルは通常のテーブルよりも優れた更新性能を提供しますが、クラッシュ時に安全ではありません。 サーバがクラッシュした場合、その内容は自動的に消去されます。 またその内容はレプリケーションのスレーブには伝播されません。

- `FULL OUTER JOIN`をハッシュ結合として実現することができます。 また、`LEFT OUTER JOIN`または`RIGHT OUTER JOIN`の片側をハッシュ化することができます。(Tom Lane)

  これまでの`FULL OUTER JOIN`ではマージ結合としてのみ実現することができました。 また`LEFT OUTER JOIN`と`RIGHT OUTER JOIN`は結合のNULLを持つ側のみをハッシュ化することができました。 これらの変更により、さらに問い合わせ最適化の可能性が加わりました。

- fsync要求をまとめます。(Robert Haas、Greg Smith)

  これは非常に書き込み負荷が高い状況での性能を大きく改良します。

- `commit_siblings`の性能を向上しました。(Greg Smith)

  これにより、より少ないオーバーヘッドで`commit_siblings`を使用することができます。

- 大規模なispell辞書で必要とされるメモリ量を減少しました。(Pavel Stehule、Tom Lane)

- "blind writes"後データファイルが開いたままになることを防止します。(Alvaro Herrera)

  これは、バックエンドが削除された後も長く間開いた状態のファイルを保持するかもしれず、カーネルによるディスク領域の回収を妨げるという状況を修正します。

#### E.2.3.1.2. オプティマイザ

- 継承テーブルのスキャンが有意にソートされた結果を返すことができます。(Greg Stark、Hans-Jurgen Schonig、Robert Haas、Tom Lane)

  これにより、継承テーブルを持ち、`ORDER BY`、`LIMIT`、`MIN`/`MAX`を使用する問い合わせをより良く最適化することができます。

- GINインデックススキャンのコスト推定を改良しました。(Teodor Sigaev)

- 集約およびウィンドウ関数のコスト推定を改良しました。(Tom Lane)

#### E.2.3.1.3. 認証

- `pg_hba.conf`において、ホスト名およびホスト接尾辞（`.example.com`など）をサポートします。(Peter Eisentraut)

  これまではホストのIPアドレスとCIDR値のみがサポートされていました。

- `pg_hba.conf`のホスト列において`all`キーワードをサポートします。(Peter Eisentraut)

  これまでは、このために`0.0.0.0/0`または`::/0`を使用していました。

- Unixソケット接続をサポートしないプラットフォームにおいて、`pg_hba.conf`内の`local`行を拒絶します。(Magnus Hagander)

  これまではこうした行は警告なく無視されましたが、驚くような結果を招くかもしれませんでした。 これにより他の未サポートの場合とより同じように動作するようになりました。

- GSSAPIをSSPIを介したサーバ認証に使用できるようになりました。(Christian Ullrich)

  特にこれによりUnixベースのGSSAPIクライアントがWindowsサーバでSSPI認証させることができます。

- ローカルソケット経由の`ident`認証を`peer`と名付けました。(Magnus Hagander)

  古い用語はまだ後方互換性のために受け入れられます。 しかし２つの方式は根本的に異なるものですので、別の名前を採用する方が良いのかもしれません。

- 資格制御メッセージの使用を防止するために、peer認証を書き直しました。(Tom Lane)

  この変更によりピア認証コードがより単純に、より良い性能がでるようになりました。 しかし、`getpeereid`関数か同等のソケット操作を提供するプラットフォームが必要です。 分かっている限りでは、これまでピア認証が動作し、このバージョンで動作しなくなったプラットフォームは5.0より前のNetBSDのみです。

#### E.2.3.1.4. 監視

- `log_checkpoints`により制御される、リスタートポイントおよびチェックポイントのログ処理に詳細を追加しました。(Fujii Masao、Greg Smith)

  WALファイルの詳細や同期処理に関する詳細が含まれるようになりました。

- ログ処理コントローラにより作成されるログファイルの権限を制御する、`log_file_mode`が追加されました。(Martin Pihlak)

- syslogログ処理用の最大行長を接頭辞分と900バイトをたし合わせた値に減らしました。(Noah Misch)

  これにより、一般的な2kBではなく1kBの長さ制限を持つsyslog実装における長大な行の切り詰めを防止します。

#### E.2.3.1.5. 統計情報ビュー

- `client_hostname`列を`pg_stat_activity`に追加しました。(Peter Eisentraut)

  これまではクライアントのアドレスのみが報告されていました。

- `pg_stat_xact_*`統計情報関数およびビューを追加しました。(Joel Jacobson)

  これらはデータベース全体の統計情報カウンタビューと似ていますが、現在のトランザクションのみを計数に反映します。

- データベースレベルおよびバックグラウンドライタの統計情報ビューに最終再初期化時間を追加しました。(Tomas Vondra)

- `pg_stat_*_tables`ビューにバキューム操作および解析操作の回数を示す列を追加しました。(Magnus Hagander)

- `buffers_backend_fsync`列を`pg_stat_bgwriter`に追加しました。(Greg Smith)

  この新しい列は、バッファのバックグラウンドfsyncの回数を数えます。

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

- `wal_buffers`の自動調整を提供します。(Greg Smith)

  `wal_buffers`の値はデフォルトで`shared_buffers`の容量に応じて自動的に調整されるようになりました。

- `deadlock_timeout`、`log_min_duration_statement`、`log_autovacuum_min_duration`の最大値を増やしました。(Peter Eisentraut)

  これまでのこれらのパラメータの最大値はそれぞれおよそ35分でしかありませんでした。 もっと大きな値が許されるようになりました。

### E.2.3.2. レプリケーションとリカバリ

#### E.2.3.2.1. ストリーミングレプリケーションと継続的アーカイブ

- 同期レプリケーションが可能です。(Simon Riggs, Fujii Masao)

  これによりプライマリサーバは、コミットを認める前にスタンバイがトランザクション情報をディスクに書き出すまで待機することができます。 一度に１つのスタンバイのみが、`synchronous_standby_names`設定で制御される同期スタンバイの役割を果たすことができます。 同期レプリケーションは、`synchronous_commit`設定を用いてトランザクション単位で有効にしたり無効にしたりすることができます。

- ストリーミングレプリケーション接続を使用してファイルシステムバックアップをスタンバイサーバに送信するためのプロトコルサポートを追加しました。(Magnus Hagander、Heikki Linnakangas)

  これによりスタンバイサーバを構築すると気にファイルシステムバックアップを手作業で転送する必要性がなくなります。

- `replication_timeout`設定を追加しました。(Fujii Masao、Heikki Linnakangas)

  `replication_timeout`間隔より長く待機状態であったレプリケーション接続は自動的に終了します。 これまでは失敗している接続は、多くの状況で不便な長さであるTCPタイムアウトに達するまで通常検出されませんでした。

- 新しいスタンバイサーバの作成やデータベースバックアップのためのpg_basebackupコマンドラインツールを追加しました。(Magnus Hagander)

- ロール用にreplication権限を追加しました。(Magnus Hagander)

  これはストリーミングレプリケーションで使用される読み取り専用の権限です。 これによりスーパーユーザ以外のロールがレプリケーション用接続を使用することができます。 以前はスーパーユーザのみがレプリケーション用接続を初期化することができました。 デフォルトでスーパーユーザは引き続きこの権限を持ちます。

#### E.2.3.2.2. レプリケーションの監視

- WAL送信プロセスの活動を表示する`pg_stat_replication`システムビューを追加しました。(Itagaki Takahiro、Simon Riggs)

  これは接続されたスタンバイサーバすべての状態を報告します。

- `pg_last_xact_replay_timestamp()`監視用関数を追加しました。(Fujii Masao)

  これは、もっとも最近プライマリでコミットまたはアボートしたレコードがスタンバイに適用された時間を報告します。

#### E.2.3.2.3. ホットスタンバイ

- スタンバイがプライマリの古い行バージョンの整理を延期させることを有効にする`hot_standby_feedback`設定パラメータを追加しました。(Simon Riggs)

  これはスタンバイ上で長時間実行している問い合わせがキャンセルされることを防ぐために役立ちます。

- キャンセルされた問い合わせとその理由を示す`pg_stat_database_conflicts`システムビューを追加しました。(Magnus Hagander)

  キャンセルは、削除されたテーブル空間、ロックタイムアウト、古いスナップショット、ピン付けされたバッファ、デッドロックが原因で起こり得ます。

- `pg_stat_database`に`conflicts`カウントを追加しました。(Magnus Hagander)

  これはデータベース内で発生した競合回数です。

- `max_standby_archive_delay`および`max_standby_streaming_delay`の最大値を増やしました。

  これまでのこれらのパラメータの最大値はそれぞれおよそ35分でしかありませんでした。 もっと大きな値が許されるようになりました。

- 削除されたデータベースが原因のリカバリの競合を報告する`ERRCODE_T_R_DATABASE_DROPPED`エラーコードを追加しました。(Tatsuo Ishii)

  これは接続プールソフトウェアで有用です。

#### E.2.3.2.4. リカバリの制御

- ストリーミングレプリケーションの再生を制御する関数を追加しました。(Simon Riggs)

  新しい関数は、`pg_xlog_replay_pause()`、`pg_xlog_replay_resume()`、および、`pg_is_xlog_replay_paused()`状態関数です。

- 指定対象でリカバリを休止させるために`pause_at_recovery_target`設定を`recovery.conf`に追加しました。(Simon Riggs)

  これによりリカバリ中のサーバに問い合わせて、リカバリポイントが希望のものかどうかを検査することができます。

- `pg_create_restore_point()`を使用して、リストアポイントを名前を付けて作成する機能を追加しました。(Jaime Casanova)

  `recovery.conf`の新しい`recovery_target_name`設定を使用して、これらの名前付きリストアポイントをリカバリ対象として指定することができます。

- スタンバイリカバリが新しい時系列に自動的に切り替えることができます。(Heikki Linnakangas)

  スタンバイサーバは新しい時系列用のアーカイブディレクトリを定期的にスキャンします。

- バックエンドのクラッシュ後の自動サーバ再起動を無効にする`restart_after_crash`設定を追加しました。(Robert Haas)

  これにより外部のクラスタ管理ソフトウェアがサーバを再起動すべきかどうかを制御できるようになります。

- `recovery.conf`で`postgresql.conf`と同じ引用符付けを使用できるようになりました。(Dimitri Fontaine)

  これまではすべての値を引用符付けしなければなりませんでした。

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

- 本物のシリアライザブル隔離レベルを追加しました。

  これまでは、シリアライザブルを要求した場合に、そのトランザクション全体で単一MVCCスナップショットが使用されることのみが保証され、文書化された特定の例外が許容されていました。 これまでのスナップショット隔離動作は、`REPEATABLE READ`隔離レベルを要求することでまだ使用することができます。

- `WITH`句内でデータ変更コマンド（`INSERT`/`UPDATE`/`DELETE`）が可能です。(Marko Tiikkaja, Hitoshi Harada)

  これらのコマンドは`RETURNING`を使用して含有する問い合わせにデータを渡すことができます。

- `WITH`句を`INSERT`、`UPDATE`、`DELETE`文に付与することができます。(Marko Tiikkaja、Hitoshi Harada)

- プライマリキーが`GROUP BY`句で指定されていた場合、問い合わせの対象リスト内で`GROUP BY`されていない列が許されます。(Peter Eisentraut)

  標準SQLではすでにこの動作が許されています。 またプライマリキーですので結果にあいまいさはありません。

- `UNION`/`INTERSECT`/`EXCEPT`句内で`DISTINCT`キーワードを使用することができます。(Tom Lane)

  `DISTINCT`はデフォルトの動作ですので、このキーワードは冗長です。 しかし標準SQLでは許されています。

- `EXPLAIN ANALYZE`の時、ルールを持つ普通の問い合わせが同じスナップショットを使用するように修正しました。(Marko Tiikkaja)

  これまでの`EXPLAIN ANALYZE`は、ルールを持つ問い合わせに対して多少時期が異なるスナップショットを使用していました。 `EXPLAIN ANALYZE`の動作はより論理的になるべきと評価されました。

#### E.2.3.3.1. 文字列

- 列単位の照合順序のサポートを追加しました。(Peter Eisentraut, Tom Lane)

  これまでの照合順序（テキスト文字列のソート順序）はデータベース作成時のみで設定することができました。 照合順序は、標準SQLの`COLLATE`句を用いて、列、ドメイン、インデックス、式単位で設定することができるようになりました。

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

- PostgreSQLの追加パッケージを簡略化する拡張を追加しました。(Dimitri Fontaine、Tom Lane)

  拡張は新しい`CREATE`/`ALTER`/`DROP EXTENSION`コマンドで制御されます。 これは、PostgreSQLインストレーションにまとまったオブジェクトを追加するためのその場しのぎの方法を置き換えます。

- 外部テーブルのサポートを追加しました。(Shigeru Hanada、Robert Haas、Jan Urbanski、Heikki Linnakangas)

  これによりデータベースの外部に格納されたデータをPostgreSQLに格納されたデータそのものであるかのように使用することができます。 しかし現時点では外部テーブルは読み取り専用です。

- `ALTER TYPE`を用いて既存の列挙型に新しい値を追加することができます。(Andrew Dunstan)

- `ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE`を追加しました。(Peter Eisentraut)

  これにより複合型の変更ができます。

#### E.2.3.4.1. オブジェクトに対する`ALTER`

- 型付けされたテーブルに対する`ALTER TYPE`操作に`RESTRICT`/`CASCADE`を追加しました。(Peter Eisentraut)

  これは`ADD`/`DROP`/`ALTER`/`RENAME ATTRIBUTE`のカスケード動作を制御します。

- `ALTER TABLE `name` {OF | NOT OF}`type``をサポートします。(Noah Misch)

  この構文により、スタンドアローンのテーブルを型付けされたテーブルにすること、型付けされたテーブルをスタンドアローンにすることができます。

- `ALTER ... SET SCHEMA`コマンド内でより多くのオブジェクトに対するサポートを追加しました。(Dimitri Fontaine)

  このコマンドは、変換、演算子、演算子クラス、演算子族、全文検索設定、全文検索辞書、全文検索パーサ、全文検索テンプレートをサポートするようになりました。

#### E.2.3.4.2. `CREATE/ALTER TABLE`

- `ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX`を追加しました。(Gurjeet Singh)

  これによりプライマリキーまたは一意性制約を、同時に作成された一意性インデックスを含む、既存の一意性インデックスを用いて定義することができます。

- `ALTER TABLE`で検証なく外部キーを追加することができます。(Simon Riggs)

  新しいオプションは`NOT VALID`という名前です。 この制約の状態を後で`VALIDATED`に変更することで有効性検査を行うことができます。 これらを用いて、読み書き操作に対して最小限の影響で外部キーを追加することができます。

- 適切な状況においてテーブル書き換えを行わない`ALTER TABLE ... SET DATA TYPE`が可能です。(Noah Misch、Robert Haas)

  例えば、`varchar`列を`text`に変換する場合にテーブルの書き換えが必要なくなりました。 しかし`varchar`列の長さ制限を増やす場合にはまだテーブルの書き換えが必要です。

- `CREATE TABLE IF NOT EXISTS`構文を追加しました。(Robert Haas)

  これにより、テーブルがすでに存在する場合でもエラーを発生することなく、テーブル作成が許されます。

- ２つのバックエンドが同時に１つのテーブルに継承した子テーブルを追加しようとした時に潜在する"tuple concurrently updated"エラーを修正しました。(Robert Haas)

  セッションが親テーブルを同時に更新できなくするために、`ALTER TABLE`が親テーブルに対してより強いロックを取得するようになりました。

#### E.2.3.4.3. オブジェクトの権限

- `SECURITY LABEL`コマンドを追加しました。(KaiGai Kohei)

  これによりオブジェクトにセキュリティラベルを付与することができます。

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

- トランザクションレベルの勧告的ロックを追加しました。(Marko Tiikkaja)

  これは既存のセッションレベルの勧告的ロックと似ていますが、こうしたロックはトランザクション終了時に自動的に解放されます。

- `TRUNCATE ... RESTART IDENTITY`はトランザクション的にシーケンスを再開始させます。(Steve Singer)

  これまでのカウンタは、バックエンドがコミット中のトランザクション処理とコミット完了の間にクラッシュした場合、同期されないままとなる可能性がありました。

#### E.2.3.5.1. `COPY`

- `ENCODING`オプションを`COPY TO/FROM`に追加しました。(Hitoshi Harada、Itagaki Takahiro)

  これにより`COPY`ファイルの符号化方式をクライアント符号化方式とは別に指定することができます。

- 双方向`COPY`プロトコルのサポートを追加しました。(Fujii Masao)

  現時点ではストリーミングレプリケーションによってのみ使用されています。

#### E.2.3.5.2. `EXPLAIN`

- `EXPLAIN VERBOSE`が、`FunctionScan`ノード内の関数呼び出し式を示すようにしました。(Tom Lane)

#### E.2.3.5.3. `VACUUM`

- `VACUUM FULL VERBOSE`および`CLUSTER VERBOSE`の出力にさらに詳細を追加しました。(Itagaki Takahiro)

  新しい情報には、有効タプル数、無効タプル数、`CLUSTER`が再構築するためにインデックスを使用するかどうかが含まれます。

- テーブルロックを獲得できなかった場合に自動バキュームが待機することを防ぎます。(Robert Haas)

  後でそのテーブルのバキュームを試みます。

#### E.2.3.5.4. `CLUSTER`

- `CLUSTER`がインデックスをスキャンするよりも安価であるように見える場合にインデックスのスキャンではなく、テーブルをソートすることができます。

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

- GiSTインデックスに（演算子で順序付けされた）近傍検索を追加しました。(Teodor Sigaev、Tom Lane)

  これによりGiSTインデックスが`LIMIT`を持つ問い合わせにおいて`N`個の近傍値を素早く返すことができます。 例えば、

      SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;

  は指定された対象位置に最も近い10点を見つけ出します。

- GINインデックスがNULL値と空値をインデックス付けすることができます。(Tom Lane)

  これにより完全なGINインデックススキャンができ、GINスキャンが失敗していた各種境界条件を修正することができます。

- GINインデックスがより良く重複する検索項目を認識することができます。(Tom Lane)

  これは、特に不要な完全なインデックススキャンを防止できる場合に、インデックススキャンのコストを軽減します。

- GiSTインデックスが完全にクラッシュに対して安全になるように修正しました。(Heikki Linnakangas)

  これまでは`REINDEX`が必要となる（通知される）まれな場合がありました。

### E.2.3.6. データ型

- `numeric`をより小さな容量で使用できます。 通常は２バイトのヘッダです。(Robert Haas)

  これまではすべての`numeric`値は４バイトのヘッダを持ちました。 この変更によりディスク容量が少なく済みます。

- `money`による`money`の除算のサポートを追加しました。(Andy Balholm)

- `void`型に対するバイナリI/Oができます。(Radoslaw Smogura)

- 幾何演算における斜辺計算を改良しました。(Paul Matthews)

  これは不要なオーバーフローを防止します。 またより正確になる可能性があります。

- 配列値のハッシュ化をサポートします。(Tom Lane)

  これはさらに問い合わせ最適化の選択肢が提供します。

- すべての列の型がソート可能でない限り、複合型をソート可能として扱いません。(Tom Lane)

  これは、ソート処理なく問い合わせを実現できる場合、実行時に潜在する"could not identify a comparison function"失敗を防止します。 また`ANALYZE`は、こうした複合型の列に対する不適切な統計情報収集メソッドの使用を試みません。

#### E.2.3.6.1. キャスト

- `money`と`numeric`間のキャストのサポートを追加しました。(Andy Balholm)

- `int4`および`int8`から`money`へのキャストのサポートを追加しました。(Joey Adams)

- 型付けされたテーブルの場合、テーブルの行型からテーブルのスーパー型へのキャストが可能です。(Peter Eisentraut)

  これは、行型からスーパーテーブルの行型へのキャストが可能であるという既存の機能に類似したものです。

#### E.2.3.6.2. XML

- `XMLEXISTS`および`xpath_exists()` XML関数を追加しました。(Mike Fowler)

  これらはXPathマッチに使用されます。

- `xml_is_well_formed()`、`xml_is_well_formed_document()`、`xml_is_well_formed_content()` XML関数を追加しました。(Mike Fowler)

  これらは、入力が適切に整形されたXMLかどうかを検査します。 これらは、これまで廃止予定の`contrib/xml2`モジュールでのみ利用できた機能を提供するものです。

### E.2.3.7. 関数

- Cの`printf()`と類似の動作を行う`format(text, ...)` SQL関数を追加しました。(Pavel Stehule、Robert Haas)

  現時点では文字列、SQLリテラル、SQL識別子の書式付けをサポートします。

- `concat()`、`concat_ws()`、`left()`、`right()`、`reverse()`文字列関数を追加しました。(Pavel Stehule)

  これらは他のデータベース製品との互換性を高めます。

- バイナリファイルを読み取る`pg_read_binary_file()`関数を追加しました。(Dimitri Fontaine、Itagaki Takahiro)

- ファイル全体を読み取る`pg_read_file()`関数の単一パラメータ版を追加しました。(Dimitri Fontaine、Itagaki Takahiro)

- NULL値の処理を制御するために、３つのパラメータを持つ`array_to_string()`、`string_to_array()`の構文を追加しました。(Pavel Stehule)

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

- `pg_describe_object()`関数を追加しました。(Alvaro Herrera)

  この関数は、`pg_class` OID、オブジェクトOID、副オブジェクトIDに基づいてオブジェクトを説明する可読性が高い文字列を入手するために使用されます。 これを`pg_depend`の内容を解釈する補助として使用することができます。

- 組み込み演算子とその基になる関数についてのコメントを更新しました。(Tom Lane)

  関連する演算子を介して使用されることを意図した関数についてその旨をコメント付けしました。

- `EXPLAIN`内および`pg_get_viewdef()`のようなシステムカタログ関数内の識別子すべてを強制的に引用符付けする`quote_all_identifiers`変数を追加しました。(Robert Haas)

  これにより、スキーマを引用符付けに関して異なる規則を持つツールや他のデータベースにエキスポートすることがより簡単になります。

- `information_schema.sequences`システムビューに列を追加しました。(Peter Eisentraut)

  これまでもビューは存在していましたが、シーケンスパラメータに関する列は実装されていませんでした。

- `has_table_privilege()`および関連する関数内で仮想ロール名として`public`が許されます。

  これによりpublic権限に対する検査を行うことができます。

#### E.2.3.7.2. 関数およびトリガの作成

- ビューに対する`INSTEAD OF`トリガをサポートします。(Dean Rasheed)

  この機能を更新可能なビューを完全に実装するために使用することができます。

### E.2.3.8. サーバサイド言語

#### E.2.3.8.1. PL/pgSQLサーバサイド言語

- `FOREACH IN ARRAY`をPL/pgSQLに追加しました。(Pavel Stehule)

  これは、配列値の要素を使用する反復についてのこれまでの方法より効率と可読性を向上します。

- パラメータを持たない`RAISE`を`RAISE ERROR`を捕捉できる同じ場所で捕捉できるようになりました。(Piyush Newe)

  これまでのコードでは、実行中の例外ハンドラを含むブロックからこのエラーを発生させました。 新しい動作は他のDBMS製品とより一貫性があります。

#### E.2.3.8.2. PL/Perlサーバサイド言語

- PL/Perl関数で一般的なレコード引数が許されます。(Andrew Dunstan)

  PL/Perl関数を`record`型を受け付けるように宣言することができるようになりました。 この動作は任意の名前付き複合型に対するものと同じです。

- PL/Perlの配列引数をPerl配列に変換します。(Alexey Klyukin、Alex Hunsaker)

  文字列表現もまだ可能です。

- PL/Perlの複合型引数をPerlのハッシュに変換します。(Alexey Klyukin、Alex Hunsaker)

  文字列表現もまだ可能です。

#### E.2.3.8.3. PL/Pythonサーバサイド言語

- PL/Pythonにテーブル関数のサポートを追加しました。(Jan Urbanski)

  PL/Pythonが複数の`OUT`パラメータとレコードセットを返すことができるようになりました。

- PL/Pythonに検証関数を追加しました。(Jan Urbanski)

  これによりPL/Python関数は関数生成時に構文検査を行うことができます。

- PL/Python内でSQL問い合わせに対する例外を許します。(Jan Urbanski)

  これによりSQLが生成する例外エラーコードをPL/Python例外ブロックからアクセスすることができます。

- PL/Pythonに明示的な副トランザクションを追加しました。(Jan Urbanski)

- 文字列の引用符付けを行うPL/Python関数を追加しました。(Jan Urbanski)

  これらの関数は`plpy.quote_ident`、`plpy.quote_literal`、`plpy.quote_nullable`です。

- PL/Pythonエラーにトレースバック情報を追加しました。(Jan Urbanski)

- `PLy_elog`を用いて反復子からのPL/Pythonエラーを報告します。(Jan Urbanski)

- Python 3での例外処理を修正しました。(Jan Urbanski)

  これまではPython 3下の`plpy`では例外クラスを利用することができませんでした。

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

- createlangおよびdroplangを廃止予定とし、拡張コマンドを呼び出すだけのものにしました。(Tom Lane)

#### E.2.3.9.1. psql

- 現在の接続情報を示す`\conninfo` psqlコマンドを追加しました。(David Christensen)

- 関数定義を示す`\sf` psqlコマンドを追加しました。(Pavel Stehule)

- 言語を列挙する`\dL` psqlコマンドを追加しました。(Fernando Ike)

- psqlの`\dn`(スキーマ列挙)コマンドに`S`（"システム"）オプションを追加しました。(Tom Lane)

  `S`のない`\dn`ではシステムスキーマを表示しないようになりました。

- psqlの`\e`および`\ef`コマンドが、エディタにおけるカーソル位置を設定するために使用される行番号を受け付けることができます。(Pavel Stehule)

  これは`PSQL_EDITOR_LINENUMBER_ARG`環境変数にしたがってエディタに渡されます。

- psqlがデフォルトでオペレーティングシステムのロケールからクライアント符号化方式を設定するようにしました。(Heikki Linnakangas)

  これは`PGCLIENTENCODING`環境変数が設定されていない場合に起こります。

- `\d`が一意性インデックスと一意性制約を区別するようにしました。(Josh Kupershmidt)

- 9.0以降のサーバと接続している場合、`\dt+`が`pg_relation_size`ではなく`pg_table_size`を報告するようにしました。(Bernd Helmle)

  これはテーブルサイズの測定にはより有用です。 しかしこれまで同じ表示で報告された値と同じではないことに注意してください。

- タブ補完サポートを追加しました。(Itagaki Takahiro、Pavel Stehule、Andrey Popp、Christoph Berg、David Fetter、Josh Kupershmidt)

#### E.2.3.9.2. pg_dump

- すべての識別子を強制的に引用符付けする`--quote-all-identifiers`オプションをpg_dumpおよびpg_dumpallに追加しました。(Robert Haas)

- `directory`形式をpg_dumpに追加しました。(Joachim Wieland, Heikki Linnakangas)

  これは内部的には`tar` pg_dump形式と似ています。

#### E.2.3.9.3. pg_ctl

- サーバが稼動していないと間違った報告をしないようにpg_ctlを修正しました。(Bruce Momjian)

  これまではサーバが稼動していてもpg_ctlが認証させられなかった場合にこれが起こることがありました。

- pg_ctl startの"待機"（`-w`）オプションを改良しました。(Bruce Momjian、Tom Lane)

  待機モードは非常に堅牢になりました。 デフォルト以外のポート番号、デフォルト以外のUnixソケット位置、権限問題、古いpostmasterのロックファイルにより混乱することがなくなります。

- スタンバイサーバをプライマリに切り替える`promote`オプションをpg_ctlに追加しました。(Fujii Masao)

### E.2.3.10. 開発ツール

#### E.2.3.10.1. libpq

- `PGCLIENTENCODING`環境変数と同様に振舞う`client_encoding` libpq接続オプションを追加しました。(Heikki Linnakangas)

  `auto`という値はオペレーティングシステムのロケールに基づいてクライアント符号化方式を設定します。

- libpqライブラリのバージョンを返す`PQlibVersion()`を追加しました。(Magnus Hagander)

  libpqはサーババージョンを返す`PQserverVersion()`をすでに有していました。

- Unixドメインソケット経由で接続している場合に、libpqデータベースクライアントは新しい接続オプション`requirepeer`を使用してサーバプロセスのユーザ名を検査することができます。(Peter Eisentraut)

  PostgreSQLではすでにサーバにUnixドメインソケット経由で接続するクライアントユーザ名を検査させることが可能でした。

- libpqに`PQping()`および`PQpingParams()`を追加しました。(Bruce Momjian、Tom Lane)

  これらの関数により、新しくセッションを開こうとしなくても、サーバの状態を検出することができます。

#### E.2.3.10.2. ECPG

- ECPGは`WHERE CURRENT OF`句の中であっても動的カーソル名を受け付けることができます。(Zoltan Boszormenyi)

- ecpglibが`double`値をこれまでの14桁ではなく15桁の精度で書き込むようにしました。(Akira Kurosawa)

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

- HP-UX Cコンパイラで受け付けられる`+Olibmerrno`コンパイルオプションを使用します。(Ibrar Ahmed)

  これは最近のHPプラットフォームで起こり得る数学ライブラリ呼び出し誤動作を防止します。

#### E.2.3.11.1. Makefiles

- 並行makeのサポートを改良しました。(Peter Eisentraut)

  これによりコンパイルがより高速になります。 また`make -k`がより一貫性をもって動作します。

- GNU make 3.80以降が必要です。(Peter Eisentraut)

  並行makeの改良のためこれが必要です。

- `make maintainer-check`ターゲットを追加しました。(Peter Eisentraut)

  このターゲットは、構築やリグレッションテストでは不適切な、様々なソースコード検査を行います。 現時点では、duplicate_oids、SGMLの構文およびタブの検査、NLS構文検査があります。

- `contrib`内の`make check`をサポートします。(Peter Eisentraut)

  従来は`make installcheck`のみが動作していましたが、一時的なインストレーション内での試験をサポートするようになりました。 最上位レベルの`make check-world`ターゲットに、この方法による`contrib`の試験が含まれるようになりました。

#### E.2.3.11.2. Windows

- Windowsにおいて、pg_ctlがサービスを自動または手動として登録することができます。(Quan Zongliang)

- Windowsにおいてクラッシュダンプの収集サポートを追加しました。(Craig Ringer、Magnus Hagander)

  minidumpsがデバッグ用ではないWindowsバイナリで生成でき、標準のデバッグツールで解析できるようになりました。

- MinGW64コンパイラを使用する構築を有効にしました。(Andrew Dunstan)

  これにより、Windowsプラットフォーム以外であってもクロスコンパイルすることにより64ビットWindowsバイナリを構築することができます。

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

- GUC変数の代入フック用のAPIを改良しました。(Tom Lane)

  これまでの代入フック機能が、検査フックと代入フックに分離されました。 前者は失敗しても構いませんが、後者は失敗してはなりません。 この変更は、独自のGUCパラメータを定義する追加モジュールに影響を与えます。

- イベントの待機をサポートするためにソースコードにラッチを加えました。(Heikki Linnakangas)

- データ変更の権限検査ロジックをまとめました。(KaiGai Kohei)

- 一貫性を目的に、なくなった`get_`object`_oid()`関数を追加しました。(Robert Haas)

- 競合するキーワードを除去することにより、 追加モジュールのコンパイルでのC++コンパイラを使用する機能を改良しました。(Tom Lane)

- DragonFly BSDに対するサポートを追加しました。(Rumko)

- バックエンドで使用するために`quote_literal_cstr()`を公開しました。(Robert Haas)

- デフォルトの符号化方式でリグレッション試験を実行します。(Peter Eisentraut)

  これまでのリグレッション試験では常に`SQL_ASCII`符号化方式で実行していました。

- cvs2clとpgcvslogを置き換えるsrc/tools/git_changelogを追加しました。(Robert Haas、Tom Lane)

- git-external-diffスクリプトを`src/tools`に追加しました。(Bruce Momjian)

  これはgitからコンテキストdiffを生成するために使用されます。

- Clangを用いた構築のサポートを改良しました。(Peter Eisentraut)

#### E.2.3.12.1. サーバフック

- 権限を編さするソースコードフックを追加しました。(Robert Haas、Stephen Frost)

- セキュリティフレームワークで使用するためのpost-object-creation関数フックを追加しました。(KaiGai Kohei)

- クライアント認証フックを追加しました。(KaiGai Kohei)

### E.2.3.13. Contrib

- 新しい拡張機構を用いて`contrib`モジュールと手続き言語をインストールするように変更しました。(Tom Lane、Dimitri Fontaine)

- `contrib/file_fdw`外部データラッパを追加しました。(Shigeru Hanada)

  この外部データラッパを使用する外部テーブルは、`COPY`と非常によく似た方法で通常のファイルを読み取ることができます。

- `contrib/pg_trgm`および`contrib/btree_gist`に近傍検索サポートを追加しました。(Teodor Sigaev)

- 等価以外の検索に対する`contrib/btree_gist`サポートを追加しました。(Jeff Davis)

- マルチバイト文字を扱うように`contrib/fuzzystrmatch`の`levenshtein()`関数を修正しました。(Alexander Korotkov)

- `contrib/sslinfo`に`ssl_cipher()`および`ssl_version()`関数を追加しました。(Robert Haas)

- インデックス付けされた空配列に関して一貫した結果になるように`contrib/intarray`および`contrib/hstore`を修正しました。(Tom Lane)

  これまでは、インデックスを使用する空配列の問い合わせは、シーケンシャルスキャンを使用した場合の結果と異なる結果が返る可能性がありました。

- `contrib/intarray`が多次元の配列に対して適切に動作するようにしました。(Tom Lane)

- `contrib/intarray`において、実際にはNULL値が無い場合でもNULLが存在するとしてエラーになることを防止しました。(Tom Lane)

- `contrib/intarray`において、含有演算子が空配列を考慮するように修正しました。(Tom Lane)

  空配列は他の任意の配列に含まれるものと、正しくみなされるようになりました。

- `contrib/xml2`において、`xslt_process()`で取り扱うことができる、`parameter`=`value`の組み合わせ数についての独断的な制限を除去しました。(Pavel Stehule)

  以前の制限は10でした。

- `contrib/pageinspect`において、32ビット値としてinfomaskを返すようにheap_page_itemを修正しました。(Alvaro Herrera)

  これは混乱を招く負の値が返されることを防ぎます。 基になる値は16ビット符号なし整数です。

#### E.2.3.13.1. セキュリティ

- SELinuxと権限検査をやりとりする`contrib/sepgsql`を追加しました。(KaiGai Kohei)

  これは新しい`SECURITY LABEL`機能を使用します。

- `auth_delay` contribモジュールを追加しました。(KaiGai Kohei)

  これは、認証失敗を返す前にサーバを休止します。 ブルートフォースパスワード攻撃をより困難にするために設計されました。

- `dummy_seclabel` contribモジュールを追加しました。(KaiGai Kohei)

  これは権限に関するリグレッション試験で使用されます。

#### E.2.3.13.2. 性能

- `contrib/pg_trgm`に`LIKE`および`ILIKE`インデックス検索のサポートを追加しました。(Alexander Korotkov)

- `contrib/fuzzystrmatch`に小さな距離を最適化する`levenshtein_less_equal()`関数を追加しました。(Alexander Korotkov)

- `contrib/seg`列のインデックス検索の性能を向上しました。(Alexander Korotkov)

- 多くのリレーションを持つデータベースにおいてのpg_upgradeの性能を向上しました。(Bruce Momjian)

- 文単位の遅延を報告するフラグを`contrib/pgbench`に追加しました。(Florian Pflug)

#### E.2.3.13.3. Fsyncの試験

- `src/tools/test_fsync`を`contrib/pg_test_fsync`に移動しました。(Bruce Momjian、Tom Lane)

- `contrib/pg_test_fsync`に`O_DIRECT`サポートを追加しました。(Bruce Momjian)

  これは、`wal_sync_method`による`O_DIRECT`の使用に対応します。

- `contrib/pg_test_fsync`に新しい試験を追加しました。(Bruce Momjian)

### E.2.3.14. 文書

- ECPGの文書を大きく改良しました。(Satoshi Nagayasu)

- 大量の校正と文書の改良を行いました。(Thom Brown、Josh Kupershmidt、Susanne Ebrecht)

- `exit_on_error`についての文書を追加しました。(Robert Haas)

  このパラメータは任意のエラーでセッションを終了させます。

- `pg_options_to_table()`についての文書を追加しました。(Josh Berkus)

  この関数は可読性の高い書式でテーブル格納オプションを表示します。

- `(compositeval).*`構文を使用することですべての複合型のフィールドにアクセスできることを文書化しました。(Peter Eisentraut)

- `translate()`が、対応する`to`文字を持たない`from`内の文字を除去することを文書化しました。(Josh Kupershmidt)

- `CREATE CONSTRAINT TRIGGER`と`CREATE TRIGGER`の文書をまとめました。(Alvaro Herrera)

- permissionとupgradeの文書を中心に集めました。(Bruce Momjian)

- Solaris10についてのカーネルチューニング文書を追加しました。(Josh Berkus)

  これまではSolaris9のみについてカーネルチューニングが文書化されていました。

- `HISTORY`ファイル内の非ASCII文字を一貫して扱います。(Peter Eisentraut)

  `HISTORY`ファイルは英語で記述されていますが、貢献者の名前を非ASCII文字で扱う必要がありました。 文字セットに関して前提を置くことなく合理的に判読できるように書き直されました。

前のページ | ホーム | 次のページ
リリース9.1.1 | 上に戻る | リリース9.0.5