他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 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.32. リリース9.2

リリース日: 2012-09-10

E.32.1. 概要

このリリースでは、新しいSQLの機能もありますが、主にパフォーマンスの向上に注力してきました。 レプリケーションのサポートにおいても開発が継続されています。 主な機能強化には以下のものがあります。

上記の項目については、以下でより詳細に説明します。

E.32.2. バージョン9.2への移行

以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpを利用したダンプとリストア、あるいはpg_upgradeの利用が必要です。

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

E.32.2.1. システムカタログ

  • pg_tablespaceからspclocationフィールドを削除しました。(Magnus Hagander)

    このフィールドは、テーブル空間の場所を実際に定義するシンボリックリンクと同じでしたので、テーブル空間を移動するときにそれがなくなってしまうエラーを起こす危険性がありました。 この変更により、サーバが停止している間に、シンボリックリンクを手作業で操作することにより、テーブル空間のディレクトリを移動することが可能になります。 このフィールドを置き換え、このシンボリックリンクについて問い合わせができるように、pg_tablespace_location()を追加しました。

  • tsvectorのmost-common-element(最も共通な要素)統計をpg_statsの新しい列に移動しました。(Alexander Korotkov)

    以前、tsvectorの列についてmost_common_valsおよびmost_common_freqsで利用可能だったデータについては、most_common_elemsおよびmost_common_elem_freqsを参照してください。

E.32.2.2. Functions

  • hstore=>演算子を削除しました。(Robert Haas)

    代わりにhstore(text, text)を使ってください。 =>は標準SQLで他の目的のために予約しているので、PostgreSQL 9.0からは=>という名前の演算子が作られると警告メッセージを出力していました。

  • xpath()が文字列中の特殊文字を確実にエスケープするようにしました。(Florian Pflug)

    これがないと、結果が正当なXMLにならない場合がありました。

  • オブジェクトが存在しないとき、pg_relation_size()およびその同類の関数がNULLを返すようにしました。(Phil Sorber)

    これにより、同時にDROPをした直後にこれらの関数を呼び出してもエラーを返さなくなります。

  • EXTRACT(EPOCH FROM timestamp without time zone)UTCの0時ではなく、現地時間の0時からの時間を返すようにしました。(Tom Lane)

    この変更は、リリース7.3でなされた、誤った考えによる変更を元に戻すものです。 UTCの0時から時間を計るのは一貫性がありませんでした。 その結果がtimezoneの設定に依存することになりますが、timestamp without time zoneの計算はそのようになるべきではないからです。 入力値をtimestamp with time zoneにキャストすれば、以前と同じ動作が得られます。

  • 時間文字列の終わりにyesterdaytodayあるいはtomorrowが付いている場合について、適切に処理するようにしました。(Dean Rasheed)

    以前は、SELECT '04:00:00 yesterday'::timestampを0時に実行すると、前日の日付を返していました。

  • to_date()およびto_timestamp()に不完全な日付を渡したとき、2020年に向けて丸めるように修正しました。(Bruce Momjian)

    以前は、3桁以下の年、および年のマスクを渡したときの丸め方が一貫していませんでした。

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

  • ALTER DOMAINがドメインでない型に対して動作しないようにしました。(Peter Eisentraut)

    以前は、ドメインでない型に対して所有者とスキーマを変更することができました。

  • CREATE FUNCTIONで、手続き言語の名前を強制的に小文字に変換しないようにしました。(Robert Haas)

    引用符のついていない言語識別子は引き続き小文字変換されますが、文字列および引用符付きの識別子に対して強制的な小文字変換をしないようにしました。 従って、例えば、CREATE FUNCTION ... LANGUAGE 'C' は、動作しなくなります。 これは'c'とする必要がありますが、引用符を付けないのがもっと良いでしょう。

  • 外部キーの強制トリガーについてシステムが生成する名前を変更しました。(Tom Lane)

    この変更により、自己参照型の外部キー制約のあるいくつかの境界条件においても、トリガーが正しい順番で実行されることが確実になります。

E.32.2.4. コマンドラインツール

  • psqlのメタコマンドの引数における、逆引用符、変数展開、引用符付きの部分文字列の処理を一貫したものにしました。(Tom Lane)

    以前は、そのような参照が隣接する文字列と空白で分けられていなかった場合、奇妙な取り扱いをされていました。 例えば、'FOO'BARFOO BARと出力されていました(想定されない空白を挿入していた)。 また、FOO'BAR'BAZは変更なしにそのまま出力されていました(大勢の期待と異なり、引用符を削除しなかった)。

  • clusterdbのテーブル名を二重引用符付きとして処理しないようにしました。 また、reindexdbのテーブル名およびインデックス名を二重引用符付きとして処理しないようにしました。(Bruce Momjian)

    引用符が必要な時は、コマンドの引数に二重引用符を含める必要があります。

  • createuserは、デフォルトではオプション設定のためのプロンプトを表示しないようになりました。(Peter Eisentraut)

    以前と同じ動作をさせるには--interactiveを使ってください。

  • --interactiveが指定されていなければ、dropuserはユーザ名のプロンプトを表示しないようにしました。(Peter Eisentraut)

E.32.2.5. サーバの設定

  • サーバ側のSSLファイルの場所を指定するためのサーバパラメータを追加しました。(Peter Eisentraut)

    これにより、以前はデータディレクトリ内のserver.crtserver.keyroot.crtroot.crlとしてハードコードされていたファイルの名前と場所を変更することができます。 サーバはroot.crtroot.crlをデフォルトでは検査しないようになりました。 これらのファイルをロードするには、関連するパラメータをデフォルトでない値に設定する必要があります。

  • silent_modeパラメータを削除しました。(Heikki Linnakangas)

    同様の動作は、pg_ctl start -l postmaster.logとすることで実現できます。

  • wal_sender_delayパラメータは、必要とされていないので削除しました。(Tom Lane)

  • custom_variable_classesパラメータを削除しました。(Tom Lane)

    この設定によって提供される検査は信頼できないものでした。 これからは、任意の設定の前に任意のクラス名を置くことができます。

E.32.2.6. 監視

  • pg_stat_activity.procpidの名前をpidに変更し、他のシステムテーブルと同じようにしました。(Magnus Hagander)

  • pg_stat_activityにプロセスの状態を表示する新しい列を作りました。(Scott Mead、Magnus Hagander)

    アイドル状態のセッションについては、直前のqueryquery_startの値が利用可能となるので、高度な分析が可能になります。

  • pg_stat_activity.current_queryは問い合わせが完了しても値がクリアされないので、名前をqueryに変更しました。(Magnus Hagander)

  • SQLレベルの時間に関する統計の全ての値を、ミリ秒で測定されるfloat8の列に変更しました。(Tom Lane)

    この変更により、値がミリ秒まで正確だがそれ以上にはできないという設計上の前提が取り除かれました(float8は小数にできるからです)。 これにより影響を受ける列は、pg_stat_user_functions.total_timepg_stat_user_functions.self_timepg_stat_xact_user_functions.total_timepg_stat_xact_user_functions.self_timeです。 これらの列の基となっている統計関数も、bigintのミリ秒ではなく、float8のミリ秒を返すようになります。 contrib/pg_stat_statementstotal_time列も、ミリ秒で測定されるようになります。

E.32.3. 変更点

以下に、PostgreSQL 9.2とそれ以前のメジャーリリースとの違いに関する詳細な説明をします。

E.32.3.1. サーバ

E.32.3.1.1. パフォーマンス

  • 問い合わせがインデックスのみからデータを検索し、ヒープにアクセスしなくてもすむことを可能にしました。(Robert Haas、Ibrar Ahmed、Heikki Linnakangas、Tom Lane)

    この機能はよくインデックスオンリースキャン(index-only scan)と呼ばれます。 可視性マップの報告により、すべてのセッションに対して可視であるタプルだけが含まれるヒープページについては、ヒープのアクセスをスキップできます。 従って、この利益は主に、専ら静的であるデータに当てはまります。 この機能を実装するのに必要な部分の一つとして、可視性マップはクラッシュに対して安全にされました。

  • SP-GiST(Space-Partitioned GiST、空間分割したGiST)インデックスアクセス方式を追加しました。(Teodor Sigaev、Oleg Bartunov、Tom Lane)

    SP-GiSTは、柔軟性の点でGiSTに匹敵するものですが、均衡なツリーではなく不均衡に分割された検索構造をサポートします。 これが適合する問題では、インデックスの作成時間、検索時間のいずれにおいても、SP-GiSTはGiSTよりも速く動作します。

  • 高負荷の状況においてグループコミットが効率的に動作するようにしました。(Peter Geoghegan、imon Riggs、Heikki Linnakangas)

    以前は、内部ロックの競合により書込負荷のある状況でコミットをまとめて実行するのは非効率的でした。

  • 新しいファストパス(fast-path)ロック機構を使うことで、競合しないロックが管理できるようにしました。(Robert Haas)

  • 仮想的なトランザクションIDロックを作成することのオーバーヘッドを削減しました。(Robert Haas)

  • シリアライザブル隔離レベルのロックのオーバーヘッドを削減しました。(Dan Ports)

  • PowerPCとItaniumでのスピンロックのパフォーマンスを向上しました。(Manabu Ori、Robert Haas、Tom Lane)

  • 共有無効キャッシュのメッセージのオーバーヘッドを削減しました。(Robert Haas)

  • PGPROC共有メモリ配列のよくアクセスされるメンバを別の配列に移動しました。(Pavan Deolasee、Heikki Linnakangas、Robert Haas)

  • ヒープにタプルをバッチで追加することにより、COPYの性能を向上しました。(Heikki Linnakangas)

  • より良いツリーをより少ないメモリ割り当てのオーバーヘッドで生成することにより、幾何データ型についてのGiSTインデックスのパフォーマンスを向上しました。(Alexander Korotkov)

  • GiSTインデックスの構築時間を向上しました。(Alexander Korotkov、Heikki Linnakangas)

  • 一時テーブルおよびログを取らないテーブルについて、ヒントビットをより早くセットできるようにしました。(Robert Haas)

  • インラインの、SQLから呼び出し可能でない比較関数によってソートを実行できるようにしました。(Peter Geoghegan、Robert Haas、Tom Lane)

  • CLOGバッファの数がshared_buffersに基づいて変わるようにしました。(Robert Haas、Simon Riggs、Tom Lane)

  • テーブルまたはデータベースの削除で発生するバッファプールスキャンの性能を向上しました。(Jeff Janes、Simon Riggs)

  • 多くのテーブルが削除される、あるいは空にされるときの、チェックポイントによるfsync要求のキューの性能を向上しました。(Tom Lane)

  • Windowsの子プロセスに、安全な個数のファイルディスクリプタを渡すようにしました。(Heikki Linnakangas)

    これによりWindowsのセッションが以前より多くのオープン状態のファイルディスクリプタを使うことができます。

E.32.3.1.2. プロセス管理

  • チェックポイントを実行する専用のバックグラウンドプロセスを作りました。(Simon Riggs)

    以前は、バックグラウンドライタがダーティページの書き込みとチェックポイントの両方を行なっていました。 これを2つのプロセスに分けることにより、それぞれがより予測可能な状態で目的を達することができます。

  • walwriterプロセスをより早く再開することで、非同期コミットの動作を改善しました。(Simon Riggs)

    以前は、wal_writer_delayが、 WALをディスクにフラッシュする唯一のトリガーでした。 WALバッファが一杯になったときも、WAL書き込みが起こります。

  • 処理が何も行われていない間、bgwriter、walwriter、checkpointer、statistics collector、log collector、archiverのバックグラウンドプロセスが、より効率的に休止できるようにしました。(Peter Geoghegan、Tom Lane)

    この一連の変更により、何もすることがないときのプロセスの再開の頻度が減り、アイドル状態のサーバの電力消費が大幅に削減されます。

E.32.3.1.3. オプティマイザ

  • プリペアド文が使われる場合であっても、特定のパラメータ値のための特別な計画をプランナが生成できるようにしました。(Tom Lane)

    以前は、プリペアド文は必ず1つだけの"一般的な"計画があり、それがすべてのパラメータ値に対して使われていました。 これは、明示的な定数値を持つプリペアドでない文で使われる計画に比べ、大幅に劣ることが時々ありました。 これからは、プランナは、特定のパラメータ値に対して特別な計画を生成しようとします。 特別な計画による利点がないことが繰り返し証明された後になって初めて、一般的な計画が使われます。 この変更により、以前からあった、(PL/pgSQLの動的でない文を含め)プリペアド文を使うことによるパフォーマンスの不利を排除できます。

  • 入れ子ループで内部インデックススキャンを使えるようプランナを改善しました。(Tom Lane)

    新しい"パラメータ化されたパス"の機構により、内部インデックススキャンが、そのスキャンより2つ以上結合レベルが上のリレーションの値を使うことができるようになります。 これにより、(外部結合などの)意味的な制約により、可能な結合順序が制限される場合にパフォーマンスが大きく向上します。

  • 外部データラッパの計画のAPIを改善しました。(Etsuro Fujita、Shigeru Hanada、Tom Lane)

    ラッパがそのテーブルに対して複数のアクセス"パス"を提供できるようになったので、結合の計画がより柔軟になります。

  • テーブルでないリレーションについて、自己矛盾する制約句を認知します。(Tom Lane)

    この検査はconstraint_exclusiononに設定されている場合にのみ実行されます。

  • 単純なインデックススキャン、およびインデックスオンリースキャンでindexed_col op ANY(ARRAY[...])の条件が使われるようにしました。(Tom Lane)

    以前は、このような条件は、ビットマップインデックススキャンでのみ使うことができました。

  • boolean型の列でMIN/MAXの索引の最適化をサポートしました。(Marti Raudsepp)

  • 行数の推定を設定するとき、SELECTのターゲットリスト内の集合を返す関数について説明するようにしました。(Tom Lane)

  • 複製された列を持つインデックスをより信頼できる方法で処理するようプランナを修正しました。(Tom Lane)

  • 配列について、要素頻度の統計情報を収集し、利用するようにしました。(Alexander Korotkov、Tom Lane)

    この変更により、配列についての<@&&@>演算子(配列の含有および重なり)の選択性評価が改善されます。

  • 外部テーブルの統計情報を収集できるようにしました。(Etsuro Fujita)

  • 部分インデックスの利用について、コスト推定を改善しました。(Tom Lane)

  • 副問い合わせで参照される列の統計情報を利用できるようプランナの機能を改善しました。(Tom Lane)

  • DISTINCTを使う副問い合わせについて、統計の推定を改善しました。(Tom Lane)

E.32.3.1.4. 認証

  • pg_hba.confで指定されるロール名とsameroleが自動的にスーパーユーザを含むとは扱わないようにしました。(Andrew Dunstan)

    これにより、グループロールによるrejectの行を使うのが簡単になります。

  • pg_hba.confによるトークン解析の処理がより一貫したものになるよう調整しました。(Brendan Jurd、Álvaro Herrera)

  • 空のpg_hba.confファイルを禁止しました。(Tom Lane)

    これは、間違った構成についてより早く検知するためです。

  • スーパーユーザ権限はreplication権限を暗示するものとしました。(Noah Misch)

    これにより、そのような権限を明示的に割り当てる必要がなくなります。

E.32.3.1.5. 監視

  • バックエンドがクラッシュする間に、現在の問い合わせの文字列のログ出力を試みるようにしました。(Marti Raudsepp)

  • 自動バキュームのI/O処理のログ出力を、より冗長にしました。(Greg Smith、Noah Misch)

    このログ出力はlog_autovacuum_min_durationをトリガとして実行されます。

  • WAL再生の失敗をより早く報告するようにしました。(Fujii Masao)

    サーバーがマスターモードになるまで失敗が報告されない場合がありました。

  • WALの場所の比較を単純にするため、pg_xlog_location_diff()を追加しました。(Euler Taveira de Oliveira)

    これはレプリケーションの遅延を計算するのに便利です。

  • Windowsでイベントログのアプリケーション名を設定可能にしました。(MauMau、Magnus Hagander)

    event_sourceサーバパラメータを設定することで、異なるインスタンスが異なる識別子を持つイベントログ使うことができるようになります。 これは、syslog_identの動作と似ています。

  • 実行中のトランザクションがある場合を除き、"unexpected EOF"のメッセージをDEBUG1レベルに変更しました。(Magnus Hagander)

  • この変更により、データベース接続を正しく閉じないアプリケーションによって起こされるログファイルへの雑多な書き込みが減少します。

E.32.3.1.6. 統計情報ビュー

  • 一時ファイルのサイズとファイル数をpg_stat_databaseシステムビューで追跡するようにしました。(Tomas Vondra)

  • デッドロックのカウンタをpg_stat_databaseシステムビューに追加しました。(Magnus Hagander)

  • サーバパラメータtrack_io_timingを追加し、I/Oの時間を追跡できるようにしました。(Ants Aasma、Robert Haas)

  • チェックポイントの時間の情報をpg_stat_bgwriterで報告するようにしました。(Greg Smith、Peter Geoghegan)

E.32.3.1.7. サーバの設定

  • search_pathで指定したスキーマが存在しないとき、黙って無視するようにしました。(Tom Lane)

  • これにより、すべてのデータベースには存在しないスキーマ名を含むような一般的なパス設定の利用が、より便利になります。

  • スーパーユーザが、deadlock_timeoutについて、クラスタ単位だけでなく、セッション単位でも設定できるようにしました。(Noah Misch)

    これにより、デッドロックに関連しそうなトランザクションについてdeadlock_timeoutを小さくできるので、より速く検出できるようになります。 また、この値を大きくすることで、デッドロックにより、あるセッションが取消対象として選択される可能性を小さくするために使うこともできます。

  • セッションあたりの一時ファイルの容量を制限するため、サーバパラメータtemp_file_limitを追加しました。(Mark Kirkwood)

  • スーパーユーザだけが設定できる拡張の独自変数について、関連する拡張をロードする前にスーパーユーザーがSETできるようにしました。(Tom Lane)

    SETがスーパーユーザによって実行されたかどうか、システムは記憶するようになります。 これにより、拡張をロードするときに、適切な権限の検査が可能になります。

  • 設定パラメータについて問い合わせをするpostmaster-Cオプションを追加しました。(Bruce Momjian)

    これにより、PGDATAあるいは-Dが、設定ファイルだけがインストールされたディレクトリを指している場合について、pg_ctlがより良い処理をできるようになります。

  • CREATE DATABASEで、空のロケール名を暗示された値で置換するようにしました。(Tom Lane)

    これにより、サーバの再起動後に、pg_database.datcollateあるいはdatctypeが異なる解釈をされることを防ぎます。

E.32.3.1.7.1. postgresql.conf

  • postgresql.confで、最初のエラーだけでなく、複数のエラーが報告されるようにしました。(Alexey Klyukin、Tom Lane)

  • postgresql.confの再読み込みで、特定のセッションにとって不正な設定が含まれる場合でも、すべてのセッションによって処理されるようにしました。(Alexey Klyukin)

    以前は、そのようなセッション内で有効でない値があると、そのセッションは全ての設定変更を無視していました。

  • 設定ファイルにinclude_if_existsの機能を追加しました。(Greg Smith)

    これは、ファイルが見つからなくてもエラーを発生させない、という点を除き、includeと同じ動作をします。

  • initdbの実行中にサーバの時間帯を調べ、postgresql.conftimezoneおよびlog_timezoneエントリを適切に設定するようにしました。(Tom Lane)

    これにより、時間のかかる時間帯の調査をサーバの起動時に実施しないですみます。

  • Windowsでpostgresql.confの行番号が報告されるように、pg_settingsを修正しました。(Tom Lane)

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

  • ストリーミングレプリケーションのスレーブが、他のスレーブにデータを転送できるようにしました(カスケードレプリケーション)。(Fujii Masao)

    以前は、スタンバイサーバにストリーミングレプリケーションのログファイルを提供できるのはマスターサーバだけでした。

  • synchronous_commitのモードに新しくremote_writeを追加しました。 (Fujii Masao、Simon Riggs)

    このモードでは、スタンバイサーバがトランザクションデータをスタンバイのオペレーティングシステム上で書き込むのを待ちますが、スタンバイのディスクにデータがフラッシュされるのは待ちません。

  • pg_receivexlogツールを追加しました。 これは、完全なWALファイルを待つ代わりに、WALファイルの変更を、書き込まれたときにアーカイブします。(Magnus Hagander)

  • pg_basebackupでスタンバイサーバからバックアップを作れるようにしました。(Jun Ishizuka、Fujii Masao)

    この機能により、新しいベースバックアップを作る作業について、プライマリサーバの負荷を減らすことができます。

  • pg_basebackupがバックアップを実行している間も、WALファイルをストリーム転送できるようにしました。(Magnus Hagander)

    これにより、WALファイルがプライマリ上で捨てられる前に、スタンバイに転送することができます。

E.32.3.3. 問い合わせ

  • クライアントが切断されたら、実行中の問い合わせを取り消すようにしました。(Florian Pflug)

  • 問い合わせの実行中にクライアントの接続が失われたことをバックエンドが検知したら、問い合わせを完了しようとせずにキャンセルします。

  • 行式において実行時に列名を保持するようにしました。(Andrew Dunstan、Tom Lane)

    この変更により、行の値がhstoreあるいはjson型に変換される場合により良い結果が得られます。 つまり、返される値のフィールドには期待される名前がつけられます。

  • SELECTの結果に使われる列のラベルを改善しました。(Marti Raudsepp)

    以前は、?column?という一般的なラベルが使われていました。

  • 不明の値の型を決定する経験則を改善しました。(Tom Lane)

    不明の定数は、それを使う演算子のもう一方の側の値と同じ型を持つかもしれないという長年使われていた規則を、単純な演算子の場合だけでなく、多様演算子を考慮する場合も適用するようにしました。

  • ドメイン型へのキャスト、およびドメイン型からのキャストの作成について警告を出すようにしました。(Robert Haas)

    そのようなキャストには何の効果もありません。

  • 行がCHECK制約、あるいはNOT NULL制約に違反したとき、行の内容をエラー詳細として表示するようにしました。(Jan Kundrát)

    これにより、insertやupdateが多数の行を処理しているときに、どの行に問題があるか特定するのが容易になるはずです。

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

  • DDLの同時実行中に、より信頼できる操作を提供しました。(Robert Haas、Noah Misch)

    この変更ではロックを追加し、それにより、多くの状況で"cache lookup failed"(キャッシュの検索に失敗)のエラーを起こさなくなります。 また、同時削除中のスキーマにリレーションを追加することはできなくなりました。 以前はこれによりシステムカタログの内容が不整合を起こすことがありました。

  • DROP INDEXCONCURRENTLYオプションを追加しました。(Simon Riggs)

    これにより、他のセッションを妨害することなくインデックスを削除できます。

  • 外部データラッパに列ごとのオプションが付けられるようにしました。(Shigeru Hanada)

  • ビューの定義の見やすい表示(pretty-print)を改善しました。(Andrew Dunstan)

E.32.3.4.1. 制約

  • CHECK制約をNOT VALIDとして宣言できるようにしました。(Álvaro Herrera)

    NOT VALIDの制約を追加しても、既存の行が制約を満たすかどうかを検査するテーブルスキャンは実行されません。 その後に、新規に追加あるいは更新する行は検査されます。 すべての行が制約を満たすかどうか確かではありませんから、プランナがconstraint_exclusionを考慮する際、そのような制約は無視されます。

    新しいALTER TABLE VALIDATEコマンドはNOT VALIDの制約を既存の行について検査することができ、その後で通常の制約に変換します。

  • CHECK制約をNO INHERITとして宣言できるようにしました。(Nikhil Sontakke、Alex Hunsaker、Álvaro Herrera)

    こうすると、制約は親テーブルでのみ有効で、子テーブルでは無効になります。

  • 制約の名前を変更できる機能を追加しました。(Peter Eisentraut)

E.32.3.4.2. ALTER

  • いくつかのALTER TABLE ... ALTER COLUMN TYPEの操作において、テーブルとインデックスの再作成の必要性を削減しました。(Noah Misch)

    varcharあるいはvarbitの列の長さの制限を大きくする、あるいは制限をなくしてしまう場合には、テーブルの再書き込みは必要なくなりました。 numeric列の精度を大きくする場合、あるいは列を制限のあるnumericから制限のないnumericに変更する場合は、テーブルの再書き込みは必要なくなりました。 interval型、timestamp型、timestamptz型についての同様なケースでもテーブルの再書き込みは行われません。

  • ALTER TABLEの外部キーの再検証について、不要な場合には実行しないようにしました。(Noah Misch)

  • いくつかのALTERコマンドにIF EXISTSオプションを追加しました。(Pavel Stehule)

    例えば、ALTER FOREIGN TABLE IF EXISTS foo RENAME TO barのように使います。

  • ALTER FOREIGN DATA WRAPPERおよびALTER SERVERRENAMEを追加しました。(Peter Eisentraut)

  • ALTER DOMAINRENAMEを追加しました。(Peter Eisentraut)

    以前もALTER TYPEを使えばドメインの名前の変更は可能でした。

  • ALTER DOMAINDROP CONSTRAINTで、存在しない制約を指定したらエラーを発生させるようにしました。(Peter Eisentraut)

    IF EXISTSオプションが追加されたので、以前と同じ動作をさせることは可能です。

E.32.3.4.3. CREATE TABLE

  • 外部テーブル、ビューおよび複合型からのCREATE TABLE (LIKE ...)を可能にしました。(Peter Eisentraut)

    例えば、テーブルのスキーマがビューにマッチするようなテーブルを作成することも可能になります。

  • CREATE TABLE (LIKE ...)でインデックスのコメントをコピーするときに、インデックス名の衝突が起きないように修正しました。(Tom Lane)

  • CREATE TABLE ... AS EXECUTEで、WITH NO DATAと列名の指定を処理できるように修正しました。(Tom Lane)

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

  • ビューにsecurity_barrierオプションを追加しました。(KaiGai Kohei、Robert Haas)

    このオプションは、ビューが保護するデータがユーザに開示されるような最適化を防ぎます。 例えば、安全でない関数を含む句をビューのWHERE句に入れるようなことです。 このようなビューは、通常のビューに比べパフォーマンスが悪くなることが予想されます。

  • 新しい関数の属性LEAKPROOFを追加しました。 これは、security_barrierのビューで安全に利用できる関数に印を付けるものです。(KaiGai Kohei)

  • データ型についての権限の機能を追加しました。(Peter Eisentraut)

    これにより、型とドメインについて、SQL準拠のUSAGE権限がサポートされます。 その目的は、どのユーザが型の依存性を作成できるか制限することです。 というのは、そのような依存性は型の所有者による型定義の変更の能力を制限することになるからです。

  • SELECT INTOおよびCREATE TABLE ASで、INSERT権限について確認するようにしました。(KaiGai Kohei)

    SELECT INTOCREATE TABLE ASではオブジェクトが作られるので、作成者は通常はinsert権限を持っています。 しかし、ALTER DEFAULT PRIVILEGESによりそのような権限を取り消した場合など、そうならない例外的な場合もあります。

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

  • VACUUMでページをロックできない時は、そのページをより安易にスキップするようにしました。(Simon Riggs、Robert Haas)

    この変更により、VACUUM"詰まって"しまう事故が大幅に減るでしょう。

  • EXPLAIN (BUFFERS)がダーティーにされたブロック数、書き込まれたブロックを数えるようにしました。(Robert Haas)

  • EXPLAIN ANALYZEがフィルタの段階で除外した行の数を報告するようにしました。(Marko Tiikkaja)

  • EXPLAIN ANALYZEで時間の値が必要とされていないとき、時間測定のオーバーヘッドがなくなるようにしました。(Tomas Vondra)

    これは新しいTIMINGオプションをFALSEに設定することで実現できます。

E.32.3.6. データ型

  • 範囲データ型の機能を追加しました。(Jeff Davis、Tom Lane、Alexander Korotkov)

    範囲データ型は、その基本のデータ型に属する下限値と上限値を記録します。 含有、重なり、共通部分などの演算をサポートします。

  • JSONデータ型を追加しました。(Robert Haas)

    この型はJSON(JavaScript Object Notation)データを適切に検証して保存します。

  • array_to_json()およびrow_to_json()を追加しました。(Andrew Dunstan)

  • SMALLSERIALデータ型を追加しました。(Mike Pultz)

    これはSERIALと似ていますが、シーケンスを2バイトの整数の列(int2)に格納します。

  • ドメインNOT VALIDとして宣言できるようにしました。(Álvaro Herrera)

    このオプションはドメインの作成時にも指定できますし、またALTER DOMAIN> ... ADD CONSTRAINT ... NOT VALIDとしても設定できます。 ALTER DOMAIN ... VALIDATE CONSTRAINTとすると、制約を完全に検証します。

  • moneyデータ型で、サポートするロケール独自の書式オプションの数を増やしました。(Tom Lane)

    具体的には、金額の出力における値の順序、符号、通貨記号についてすべてのPOSIXのオプションを尊重するようにしました。 また、3桁毎の区切り文字も、POSIXの要請に従い、小数点の左側にだけ挿入されることを確実にしました。

  • macaddrデータ型について、ビット演算の"and""or""not"演算子をサポートしました。(Brendan Jurd)

  • xpath()にスカラー値が渡されたとき、1つだけの要素を持つXML配列を返すようにしました。(Florian Pflug)

    以前は空の配列を返していました。 この変更に伴い、そのような式について、xpath_exists()は偽ではなく真を返すようになります。

  • XMLのエラー処理がより堅牢になるよう改善しました。(Florian Pflug)

E.32.3.7. 関数

  • スーパーユーザでないユーザが、同じユーザの他のセッションに対してpg_cancel_backend()およびpg_terminate_backend()を使うことができるようにしました。(Magnus Hagander、Josh Kupershmidt、Dan Farina)

    以前は、スーパーユーザだけがこれらの関数を使うことができました。

  • トランザクションスナップショットのインポートとエクスポートができるようにしました。(Joachim Wieland、Tom Lane)

    これにより、複数のトランザクションがデータベースの状態に関する同一のビューを共有することができるようになります。 スナップショットのエクスポートはpg_export_snapshot()によって、インポートはSET TRANSACTION SNAPSHOTによって行います。 現在実行中のトランザクションのスナップショットだけがインポート可能です。

  • 式でCOLLATION FORをサポートしました。(Peter Eisentraut)

    これは、式の照合順序を表す文字列を返します。

  • pg_opfamily_is_visible()を追加しました。(Josh Kupershmidt)

  • pg_size_pretty()pg_xlog_location_diff()で使えるように、numeric型の亜種を追加しました。(Fujii Masao)

  • pg_trigger_depth()関数を追加しました。(Kevin Grittner)

    この関数は、現在のトリガの呼び出し階層数を返します。

  • string_agg()bytea型の値を処理できるようにしました。(Pavel Stehule)

  • 正規表現で、より大きな量指定された部分表現の中で後方参照が使われる場合について修正しました。(Tom Lane)

    例えば、^(\w+)( \1)+$です。 以前のリリースでは、後方参照が実際に最初の出現とマッチしていることを検査していませんでした。

E.32.3.8. 情報スキーマ

  • 情報スキーマにビューrole_udt_grantsudt_privilegesuser_defined_typesを追加しました。(Peter Eisentraut)

  • 情報スキーマのビューelement_typesに、複合型の属性を追加しました。(Peter Eisentraut)

  • 情報スキーマにinterval_type列を実装しました。(Peter Eisentraut)

    以前はこの列はNULLとして読み出されていました。

  • 情報スキーマのビューattributescolumnsdomainselement_typesで、照合順序に関連した列を実装しました。(Peter Eisentraut)

  • 情報スキーマのビューtable_privilegeswith_hierarchy列を実装しました。(Peter Eisentraut)

  • 情報スキーマでシーケンスのUSAGE権限の表示を追加しました。(Peter Eisentraut)

  • 情報スキーマがデフォルト権限を表示するようにしました。(Peter Eisentraut)

    以前は空でないデフォルト権限はビューに表示されませんでした。

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

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

  • PL/pgSQLのカーソルのOPENコマンドで、パラメータを名前で指定できるようにしました。(Yeb Havinga)

  • PL/pgSQLで例外情報を取得するGET STACKED DIAGNOSTICSコマンドを追加しました。(Pavel Stehule)

  • 型情報をキャッシュすることにより、PL/pgSQLでの配列の代入を高速化しました。(Pavel Stehule)

  • PL/pgSQLでELSIF句が長く続いているときのパフォーマンスとメモリ消費を改善しました。(Tom Lane)

  • PL/pgSQLのエラーメッセージで、関数の名前だけでなくシグネチャも出力するようにしました。(Pavel Stehule)

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

  • PL/PythonにSPIカーソルのサポートを追加しました。(Jan Urbanski)

    これにより、PL/Pythonが結果集合の一部だけを読むことができるようになります。

  • PL/Pythonに結果メタデータ関数を追加しました。(Peter Eisentraut)

    具体的には、結果オブジェクト関数.colnames.coltypes.coltypmodsが追加されました。

  • Python 2.2をサポートから外しました。(Peter Eisentraut)

E.32.3.9.3. SQLサーバサイド言語

  • SQL言語による関数で、パラメータを名前で参照できるようにしました。(Matthew Draper)

    これを使うには、関数の引数を名前にして、その引数名をSQL関数の本体から参照するだけで良いです。

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

  • initdbのオプションに、--auth-local--auth-hostを追加しました。(Peter Eisentraut)

    これにより、pg_hba.confの認証設定で、localhostを別々に設定することができます。 --authは引き続き、両方の設定を行います。

  • createuserで、レプリケーションの権限を設定するために、--replication/--no-replicationのフラグを追加しました。(Fujii Masao)

  • dropdbdropuser--if-existsオプションを追加しました。(Josh Kupershmidt)

  • コマンドラインツールが接続先のデータベースを指定でき、またpostgresデータベースへの接続に失敗した時は、template1に接続するようにしました。(Robert Haas)

E.32.3.10.1. psql

  • 端末の幅に合わせて、出力を自動的に拡張する表示モードを追加しました。(Peter Eisentraut)

    \xコマンドにautoオプションを追加しました。 通常の出力が画面の幅より広いとき、拡張モードに切り替えます。

  • 起動に使われたファイルのディレクトリからの相対パス名でスクリプトファイルを指定できるようにしました。(Gurjeet Singh)

    これは新しいコマンド\irで実行できます。

  • psqlの変数名で、非ASCII文字の使用をサポートしました。(Tom Lane)

  • 特定メジャーバージョン用の.psqlrcファイルをサポートしました。(Bruce Momjian)

    psqlは以前から、特定マイナーバージョン用の.psqlrcファイルはサポートしていました。

  • psqlの履歴ファイル、起動ファイルの位置について、環境変数で優先指定できるようにしました。(Andrew Dunstan)

    PSQL_HISTORYPSQLRCが設定されていれば、そこで指定されたファイル名が使われます。

  • 子プロセスに渡される環境変数を変更できる\setenvコマンドを追加しました。(Andrew Dunstan)

  • psqlのエディタの一時ファイルで.sqlを拡張子に使うようにしました。(Peter Eisentraut)

    拡張子によって動作が変わるエディタは、これにより正しいモードを選択できるようになります。

  • psqlで、0バイトのフィールド区切り文字およびレコード区切り文字を使えるようにしました。(Peter Eisentraut)

    様々なシェルツール(例:find)で、0バイトの区切り文字(NUL)を使うことができます。

  • \timingオプションで、失敗した問い合わせについても時間を表示するようにしました。(Magnus Hagander)

    以前は、成功した問い合わせについてのみ時間が表示されていました。

  • psqlによる\copyとSQLのCOPYの処理を統一し、また厳格にしました。(Noah Misch)

    この修正により、失敗した時の動作が、より予期できるものになり、また、\set ON_ERROR_ROLLBACKを尊重したものになります。

E.32.3.10.2. 情報表示コマンド

  • シーケンスについての\dで、シーケンスを所有するテーブルと列の名前を表示するようにしました。(Magnus Hagander)

  • \d+で列の統計対象を表示するようにしました。(Magnus Hagander)

  • \duでロールのパスワードの有効期限日を表示するようにしました。(Fabrízio de Royes Mello)

  • キャスト、変換、ドメイン、言語についてコメントを表示するようにしました。(Josh Kupershmidt)

    これは、それぞれ\dC+\dc+\dD+\dLの出力に含まれます。

  • SQL/MEDオブジェクトのコメントを表示するようにしました。(Josh Kupershmidt)

    これは、外部サーバ、外部テーブル、外部データラッパのそれぞれについて、\des+\det+\dew+の出力に含まれます。

  • \ddを変更し、その種のオブジェクト型専用のバックスラッシュコマンドを持たないものについてのみコメントを表示するようにしました。(Josh Kupershmidt)

E.32.3.10.3. タブ補完

  • psqlのタブ補完で、SQLのキーワードについては、新しいCOMP_KEYWORD_CASEの設定に基づいて、大文字あるいは小文字で補完するようにしました。(Peter Eisentraut)

  • EXECUTEについてタブ補完ができるようにしました。(Andreas Karlsson)

  • GRANT/REVOKEでのロールの参照についてタブ補完ができるようにしました。(Peter Eisentraut)

  • ファイル名のタブ補完で、必要なら引用符を補完できるようにしました。(Noah Misch)

  • TABLEについてのタブ補完で、ビューも含むように変更しました。(Magnus Hagander)

E.32.3.10.4. pg_dump

  • pg_dump--exclude-table-dataオプションを追加しました。(Andrew Dunstan)

    これにより、テーブルの定義はダンプするがそのデータは出力しない、ということをテーブル毎に指定できます。

  • pg_dumppg_restore--sectionオプションを追加しました。(Andrew Dunstan)

    有効な値はpre-datadatapost-dataです。 このオプションは複数回指定することで、2つ以上のセクションを選択することができます。

  • pg_dumpallで、まずすべてのロールについてダンプし、それからロールのすべての構成設定についてダンプするようにしました。(Phil Sorber)

    これにより、ロールの構成設定が他のロールを参照する場合でもエラーを発生しなくなります。

  • 新しいクラスタにpostgresデータベースが存在しない場合でも、pg_dumpallがエラーを起こさないようにしました。(Robert Haas)

  • 外部サーバのユーザマッピングをユーザ名の順にダンプするようにしました。(Peter Eisentraut)

    これにより、予測可能なダンプファイルが生成されます。

  • 演算子を予測可能な順序でダンプするようにしました。(Peter Eisentraut)

  • 拡張設定テーブルがpg_dumpでダンプされる時の規則を厳格にしました。 (Tom Lane)

  • pg_dumpが、より役に立つ依存性の情報を吐き出すようにしました。(Tom Lane)

    アーカイブ形式のダンプに含まれる依存性のリンクは、ダンプ内のどこにも現れないオブジェクトを参照することが多く、以前は非常に限られた使い方しかできませんでした。 これからはダンプされるオブジェクトの間の実際の依存性(間接的なこともある)を出力します。

  • pg_dumpが多くのデータベースオブジェクトをダンプするときの性能を向上しました。(Tom Lane)

E.32.3.11. libpq

  • libpqの接続文字列についてURIの形式にすることを可能にしました。(Alexander Shulgin)

    その構文はpostgres://で始まります。 これにより、データベース接続を表現するURIについて、アプリケーションが独自のパーサを実装しなくても済むようになります。

  • SSL圧縮を使用不可にする接続オプションを追加しました。(Laurenz Albe)

    高速なネットワークでSSL圧縮によるオーバーヘッドをなくすために使うことができます。

  • 大きな結果集合をより良く処理できるように、1行処理モードを追加しました。(Kyotaro Horiguchi、Marko Kreen)

    以前は、libpqは必ず問い合わせ結果の全体をメモリに取り込んでから、アプリケーションに返していました。

  • 関数PQconnectdbParamsPQconnectStartParamsPQpingParamsの宣言にconst修飾子を追加しました。(Lionel Elie Mamane)

  • .pgpassファイルで、パスワードフィールドにエスケープ文字を含められるようにしました。(Robert Haas)

  • プロセスを終了させる必要があるとき、ライブラリ関数がexit()ではなく、abort()を使うようにしました。(Peter Eisentraut)

    この選択は、プログラムが使う通常の終了コードと競合せず、また呼び出し側が捕捉できるシグナルを生成します。

E.32.3.12. ソースコード

  • 使われていないポートを削除しました。(Peter Eisentraut)

    以下のプラットフォームはサポートされなくなりました。 dgux、nextstep、sunos4、svr4、ultrix4、univel、bsdi。

  • MS Visual Studio 2010でのビルドをサポートしました。(Brar Piening)

  • MinGW-w64の32ビットコンパイラでのコンパイルを可能にしました。(Lars Kanis)

  • インストール時にplpgsql.hinclude/serverにインストールするようにしました。(Heikki Linnakangas)

  • ラッチ機構にpostmasterの終了の検知を含めるよう改善しました。(Peter Geoghegan、Heikki Linnakangas、Tom Lane)

    これにより、バックグラウンドプロセスが以前はイベントのポーリングのために再開しなければならなかった主要な理由の1つが取り除かれます。

  • Cの柔軟な配列のメンバーを(サポートされていれば)使うようにしました。(Peter Eisentraut)

  • 同時トランザクションのリグレッションテスト(isolationtester)を改善しました。(Noah Misch)

  • thread_testを修正し、テストファイルを/tmpでなく、カレントディレクトリに作成するようにしました。(Bruce Momjian)

  • flexとbisonの警告およびエラー報告を改善しました。(Tom Lane)

  • メモリバリアのサポートを追加しました。(Robert Haas)

    これは、現在は使用されていません。

  • pgindentを修正し、typedefファイルを使うようにしました。(Bruce Momjian)

  • サーバのログに送信されることになっているメッセージを処理するフックを追加しました。(Martin Pihlak)

  • DROPコマンドに、オブジェクトアクセスのフックを追加しました。(KaiGai Kohei)

  • いくつかのオブジェクト型についてDROPの処理を一つにまとめました。(KaiGai Kohei)

  • pg_upgradeテストスイートを追加しました。(Peter Eisentraut)

  • 正規表現のコードをTCL 8.5.11と同期し、内部処理を改善しました。(Tom Lane)

  • CRCテーブルをlibpgportに移し、それを別のインクルードファイルで提供するようにしました。(Daniel Farina)

  • メジャーバージョンのリリースノートの作成で使えるように、git_changelogのオプションを追加しました。(Bruce Momjian)

  • Linuxの/proc/self/oom_score_adj APIをサポートしました。(Tom Lane)

E.32.3.13. 追加モジュール

  • libpqの新しい1行処理モードを使うことで、dblinkの性能を向上しました。(Kyotaro Horiguchi、Marko Kreen)

    この改善は、dblink_send_query()/dblink_get_result()には適用されません。

  • file_fdwforce_not_nullオプションをサポートしました。(Shigeru Hanada)

  • pg_archivecleanupの試運転モードを実装しました。(Gabriele Bartolini)

    これは、削除されることになるファイルの名前を出力するだけです。

  • pgbenchに新しいスイッチ--unlogged-tables--tablespace--index-tablespaceを追加しました。(Robert Haas)

  • pg_test_fsyncが、一定回数のサイクル内ではなく、一定の時間内についてテストするように変更しました。(Bruce Momjian)

    -o/サイクル数、のオプションを削除し、-s/秒数、のオプションを追加しました。

  • 時計の単調性と時間測定のオーバーヘッドを測定するユーティリティ、pg_test_timingを追加しました。(Ants Aasma、Greg Smith)

  • tcn(Triggered Change Notification、トリガによる変更の通知)モジュールを追加しました。 これはテーブルの変更について、NOTIFYイベントを生成します。(Kevin Grittner)

E.32.3.13.1. pg_upgrade

  • pg_upgradeの環境変数を変更しました。(Bruce Momjian)

    data、bin、portの環境変数名をPGで始まるものに変更しました。 PGPORTの代わりにPGPORTOLD/PGPORTNEWを使うようにしました。

  • pg_upgradeのログ出力とエラー報告について大幅に見直しました。(Bruce Momjian)

    追記書き込みのみのファイルを4つ作り、成功したときはそれらを削除するようにしました。 これらのファイルを無条件に残す、-r/--retainオプションを追加しました。 pg_upgrade-g/-G/-lオプションは不要なので削除しました。 また、ログファイルのパーミッションを厳しくしました。

  • pg_upgradeで、より正確なオプティマイザ用統計情報を少しずつ生成するスクリプトを作成するようにしました。(Bruce Momjian)

    これにより、アップグレード後に最小限のクラスタの統計情報を生成するのに要する時間を削減できます。

  • pg_upgradeで、postgresデータベースのない古いクラスタをアップグレードできるようにしました。(Bruce Momjian)

  • pg_upgradeで、一部の古い、あるいは新しいデータベースが見つからなくても、それらが空であれば処理できるようにしました。(Bruce Momjian)

  • pg_upgradeで、設定ファイルだけがディレクトリにインストールされている場合を処理できるようにしました。(Bruce Momjian)

  • pg_upgradeでサーバーにパラメータを渡す-o/-Oオプションを追加しました。(Bruce Momjian)

    これは、設定ファイルだけがディレクトリにインストールされている場合に便利です。

  • pg_upgradeがデフォルトでポート50432を使うように変更しました。(Bruce Momjian)

    これにより、アップグレード中にクライアントが意図せず接続してしまうのを防ぐことができます。

  • pg_upgradeにおけるクラスタのロックを削減しました。(Bruce Momjian)

    具体的には、リンクモードが利用されている場合に古いクラスタをロックするだけで、それをスキーマがリストアされた直後に実行します。

E.32.3.13.2. pg_stat_statements

  • pg_stat_statementsで、SQLテキストの正規化により、類似した問い合わせを1つにまとめられるようにしました。(Peter Geoghegan、Tom Lane)

    パラメータ化されていないSQLを使うアプリケーションのユーザは、ログファイルの詳細な分析をしなくても、問い合わせのパフォーマンスを監視できるようになります。

  • ダーティーにされたブロック数、書き込まれたブロック数、読み書きの回数をpg_stat_statementsに追加しました。(Robert Haas、Ants Aasma)

  • pg_stat_statementsPREPAREおよびEXECUTEコマンドを二重に数えないようにしました。(Tom Lane)

E.32.3.13.3. sepgsql

  • グローバルオブジェクトについてSECURITY LABELをサポートしました。(KaiGai Kohei、Robert Haas)

    具体的には、データベース、テーブル空間、ロールについてセキュリティラベルを追加しました。

  • sepgsqlがデータベースのラベルを尊重するようにしました。(KaiGai Kohei)

  • 様々なオブジェクトの作成にあたり、sepgsqlのパーミッションの検査を行うようにしました。(KaiGai Kohei)

  • sepgsql_setcon()およびそれに関連した関数を追加しました。 これらはsepgsqlのセキュリティドメインを制御します。(KaiGai Kohei)

  • パフォーマンスを向上するため、sepgsqlにユーザ空間のアクセスのキャッシュを追加しました。(KaiGai Kohei)

E.32.3.14. 文書

  • オプションで、Webサイトのスタイルシートを使ってHTML文書をビルドするルールを追加しました。(Magnus Hagander)

    gmake STYLE=website draftを使ってください。

  • EXPLAINの文書を改善しました。(Tom Lane)

  • vacuumdbのようなコマンドラインツールを使うときに、ユーザ名やデータベース名が二重引用符付きとして維持されることを文書に記述しました。(Bruce Momjian)

  • MD5認証でクライアントによって返される実際の文字列について文書に記述しました。(Cyan Ogilvie)

  • CREATE TEMP TABLEGLOBALLOCALの利用を勧められないものとしました。(Noah Misch)

    PostgreSQLでは長い間、これらのキーワードを意味のないものとして扱って来ましたし、今後もそのようにし続けます。 しかし将来、それらは標準SQLが意図しているものになるかも知れませんので、アプリケーションはそれらを使わないようにすべきです。