他のバージョンの文書9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.6. リリース9.1

リリース日: 2011-09-12

E.6.1. 概要

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

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

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

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

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

E.6.2.1. 文字列

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

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

    警告

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

E.6.2.2. キャスト

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

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

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

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

E.6.2.3. 配列

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

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

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

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

E.6.2.4. オブジェクトの操作

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

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

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

E.6.2.5. サーバの設定

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

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

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

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

E.6.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.6.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.6.2.8. その他の非互換性

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

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

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

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

E.6.3. 変更点

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

E.6.3.1. サーバ

E.6.3.1.1. 性能

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

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

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

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

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

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

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

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

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

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

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

E.6.3.1.2. オプティマイザ

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

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

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

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

E.6.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)

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

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

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

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

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

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

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

E.6.3.1.4. 監視

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

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

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

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

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

E.6.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.6.3.1.6. サーバの設定

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

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

  • deadlock_timeoutlog_min_duration_statementlog_autovacuum_min_durationの最大値を増やしました。(Peter Eisentraut)

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

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

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

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

    これによりプライマリサーバは、コミットを認める前にスタンバイがトランザクション情報をディスクに書き出すまで待機することができます。 一度に1つのスタンバイのみが、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.6.3.2.2. レプリケーションの監視

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

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

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

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

E.6.3.2.3. ホットスタンバイ

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

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

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

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

  • pg_stat_databaseconflictsカウントを追加しました。(Magnus Hagander)

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

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

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

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

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

E.6.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.confpostgresql.confと同じ引用符付けを使用できるようになりました。(Dimitri Fontaine)

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

E.6.3.3. 問い合わせ

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

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

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

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

  • WITH句をINSERTUPDATEDELETE文に付与することができます。(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.6.3.3.1. 文字列

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

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

E.6.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.6.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.6.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)

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

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

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

E.6.3.4.3. オブジェクトの権限

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

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

E.6.3.5. ユーティリティ操作

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

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

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

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

E.6.3.5.1. COPY

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

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

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

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

E.6.3.5.2. EXPLAIN

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

E.6.3.5.3. VACUUM

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

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

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

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

E.6.3.5.4. CLUSTER

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

E.6.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.6.3.6. データ型

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

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

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

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

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

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

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

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

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

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

E.6.3.6.1. キャスト

  • moneynumeric間のキャストのサポートを追加しました。(Andy Balholm)

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

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

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

E.6.3.6.2. XML

E.6.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値の処理を制御するために、3つのパラメータを持つarray_to_string()string_to_array()の構文を追加しました。(Pavel Stehule)

E.6.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.6.3.7.2. 関数およびトリガの作成

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

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

E.6.3.8. サーバサイド言語

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

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

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

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

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

E.6.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.6.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_identplpy.quote_literalplpy.quote_nullableです。

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

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

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

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

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

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

E.6.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.6.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.6.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.6.3.10. 開発ツール

E.6.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.6.3.10.2. ECPG

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

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

E.6.3.11. 構築オプション

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

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

E.6.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.6.3.11.2. Windows

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

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

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

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

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

E.6.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符号化方式で実行していました。

  • cvs2clpgcvslogを置き換えるsrc/tools/git_changelogを追加しました。(Robert Haas、Tom Lane)

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

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

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

E.6.3.12.1. サーバフック

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

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

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

E.6.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/fuzzystrmatchlevenshtein()関数を修正しました。(Alexander Korotkov)

  • contrib/sslinfossl_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.6.3.13.1. セキュリティ

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

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

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

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

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

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

E.6.3.13.2. 性能

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

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

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

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

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

E.6.3.13.3. Fsyncの試験

E.6.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 TRIGGERCREATE TRIGGERの文書をまとめました。(Alvaro Herrera)

  • permissionupgradeの文書を中心に集めました。(Bruce Momjian)

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

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

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

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