リリース日: 2012-09-10
このリリースでは、新しいSQLの機能もありますが、主にパフォーマンスの向上に注力してきました。 レプリケーションのサポートにおいても開発が継続されています。 主な機能強化には以下のものがあります。
問い合わせがヒープにアクセスせず、インデックスのみからデータを検索できるようにしました(インデックスオンリースキャン)。
プリペアド文が使われる場合であっても、特定のパラメータ値のための特別な計画をプランナが生成できるようにしました。
ネステッドループで内部インデックススキャンを使えるようプランナを改善しました。
ストリーミングレプリケーションのスレーブが、他のスレーブにデータを転送できるようにしました(カスケードレプリケーション)。
pg_basebackupで、スタンバイサーバからバックアップを作れるようにしました。
WALファイルが書き込まれた時に、その更新をアーカイブするツールpg_receivexlogを追加しました。
SP-GiST (Space-Partitioned GiST、空間分割されたGiST)というインデックスアクセス方法を追加しました。
範囲データ型のサポートを追加しました。
JSON
データ型を追加しました。
ビューにsecurity_barrier
オプションを追加しました。
libpqの接続文字列を、URIの形式にできるようにしました。
libpqが大きな結果集合をより良く処理できるように、1行処理モードを追加しました。
上記の項目については、以下でより詳細に説明します。
以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpを利用したダンプとリストア、あるいはpg_upgradeの利用が必要です。
バージョン9.2には、以前のバージョンとの互換性に影響する多くの変更点が含まれています。 以下の非互換性に注意してください。
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
を参照してください。
hstoreの=>
演算子を削除しました。(Robert Haas)
代わりにhstore(text, text)
を使ってください。
=>
は標準SQLで他の目的のために予約しているので、PostgreSQL 9.0からは=>
という名前の演算子が作られると警告メッセージを出力していました。
xpath()
が文字列中の特殊文字を確実にエスケープするようにしました。(Florian Pflug)
これがないと、結果が正当なXMLにならない場合がありました。
オブジェクトが存在しないとき、pg_relation_size()
およびその同類の関数がNULLを返すようにしました。(Phil Sorber)
これにより、同時にDROP
をした直後にこれらの関数を呼び出してもエラーを返さなくなります。
EXTRACT(EPOCH FROM
がUTCの0時ではなく、現地時間の0時からの時間を返すようにしました。(Tom Lane)
timestamp without time zone
)
この変更は、リリース7.3でなされた、誤った考えによる変更を元に戻すものです。
UTCの0時から時間を計るのは一貫性がありませんでした。
その結果がtimezone
の設定に依存することになりますが、timestamp without time zone
の計算はそのようになるべきではないからです。
入力値をtimestamp with time zone
にキャストすれば、以前と同じ動作が得られます。
時間文字列の終わりにyesterday
、today
あるいはtomorrow
が付いている場合について、適切に処理するようにしました。(Dean Rasheed)
以前は、SELECT '04:00:00 yesterday'::timestamp
を0時に実行すると、前日の日付を返していました。
to_date()
およびto_timestamp()
に不完全な日付を渡したとき、2020年に向けて丸めるように修正しました。(Bruce Momjian)
以前は、3桁以下の年、および年のマスクを渡したときの丸め方が一貫していませんでした。
ALTER DOMAIN
がドメインでない型に対して動作しないようにしました。(Peter Eisentraut)
以前は、ドメインでない型に対して所有者とスキーマを変更することができました。
CREATE FUNCTION
で、手続き言語の名前を強制的に小文字に変換しないようにしました。(Robert Haas)
引用符のついていない言語識別子は引き続き小文字変換されますが、文字列および引用符付きの識別子に対して強制的な小文字変換をしないようにしました。
従って、例えば、CREATE FUNCTION ... LANGUAGE 'C'
は、動作しなくなります。
これは'c'
とする必要がありますが、引用符を付けないのがもっと良いでしょう。
外部キーの強制トリガーについてシステムが生成する名前を変更しました。(Tom Lane)
この変更により、自己参照型の外部キー制約のあるいくつかの境界条件においても、トリガーが正しい順番で実行されることが確実になります。
psqlのメタコマンドの引数における、逆引用符、変数展開、引用符付きの部分文字列の処理を一貫したものにしました。(Tom Lane)
以前は、そのような参照が隣接する文字列と空白で分けられていなかった場合、奇妙な取り扱いをされていました。
例えば、'FOO'BAR
はFOO BAR
と出力されていました(想定されない空白を挿入していた)。
また、FOO'BAR'BAZ
は変更なしにそのまま出力されていました(大勢の期待と異なり、引用符を削除しなかった)。
clusterdbのテーブル名を二重引用符付きとして処理しないようにしました。 また、reindexdbのテーブル名およびインデックス名を二重引用符付きとして処理しないようにしました。(Bruce Momjian)
引用符が必要な時は、コマンドの引数に二重引用符を含める必要があります。
createuserは、デフォルトではオプション設定のためのプロンプトを表示しないようになりました。(Peter Eisentraut)
以前と同じ動作をさせるには--interactive
を使ってください。
--interactive
が指定されていなければ、dropuserはユーザ名のプロンプトを表示しないようにしました。(Peter Eisentraut)
サーバ側のSSLファイルの場所を指定するためのサーバパラメータを追加しました。(Peter Eisentraut)
これにより、以前はデータディレクトリ内のserver.crt
、server.key
、root.crt
、root.crl
としてハードコードされていたファイルの名前と場所を変更することができます。
サーバはroot.crt
やroot.crl
をデフォルトでは検査しないようになりました。
これらのファイルをロードするには、関連するパラメータをデフォルトでない値に設定する必要があります。
silent_mode
パラメータを削除しました。(Heikki Linnakangas)
同様の動作は、pg_ctl start -l postmaster.log
とすることで実現できます。
wal_sender_delay
パラメータは、必要とされていないので削除しました。(Tom Lane)
custom_variable_classes
パラメータを削除しました。(Tom Lane)
この設定によって提供される検査は信頼できないものでした。 これからは、任意の設定の前に任意のクラス名を置くことができます。
pg_stat_activity
.procpid
の名前をpid
に変更し、他のシステムテーブルと同じようにしました。(Magnus Hagander)
pg_stat_activity
にプロセスの状態を表示する新しい列を作りました。(Scott Mead、Magnus Hagander)
アイドル状態のセッションについては、直前のquery
とquery_start
の値が利用可能となるので、高度な分析が可能になります。
pg_stat_activity
.current_query
は問い合わせが完了しても値がクリアされないので、名前をquery
に変更しました。(Magnus Hagander)
SQLレベルの時間に関する統計の全ての値を、ミリ秒で測定されるfloat8
の列に変更しました。(Tom Lane)
この変更により、値がミリ秒まで正確だがそれ以上にはできないという設計上の前提が取り除かれました(float8
は小数にできるからです)。
これにより影響を受ける列は、pg_stat_user_functions
.total_time
、pg_stat_user_functions
.self_time
、pg_stat_xact_user_functions
.total_time
、pg_stat_xact_user_functions
.self_time
です。
これらの列の基となっている統計関数も、bigint
のミリ秒ではなく、float8
のミリ秒を返すようになります。
contrib/pg_stat_statements
のtotal_time
列も、ミリ秒で測定されるようになります。
以下に、PostgreSQL 9.2とそれ以前のメジャーリリースとの違いに関する詳細な説明をします。
問い合わせがインデックスのみからデータを検索し、ヒープにアクセスしなくてもすむことを可能にしました。(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のセッションが以前より多くのオープン状態のファイルディスクリプタを使うことができます。
チェックポイントを実行する専用のバックグラウンドプロセスを作りました。(Simon Riggs)
以前は、バックグラウンドライタがダーティページの書き込みとチェックポイントの両方を行なっていました。 これを2つのプロセスに分けることにより、それぞれがより予測可能な状態で目的を達することができます。
walwriterプロセスをより早く再開することで、非同期コミットの動作を改善しました。(Simon Riggs)
以前は、wal_writer_delay
が、 WALをディスクにフラッシュする唯一のトリガーでした。
WALバッファが一杯になったときも、WAL書き込みが起こります。
処理が何も行われていない間、bgwriter、walwriter、checkpointer、statistics collector、log collector、archiverのバックグラウンドプロセスが、より効率的に休止できるようにしました。(Peter Geoghegan、Tom Lane)
この一連の変更により、何もすることがないときのプロセスの再開の頻度が減り、アイドル状態のサーバの電力消費が大幅に削減されます。
プリペアド文が使われる場合であっても、特定のパラメータ値のための特別な計画をプランナが生成できるようにしました。(Tom Lane)
以前は、プリペアド文は必ず1つだけの「一般的な」計画があり、それがすべてのパラメータ値に対して使われていました。 これは、明示的な定数値を持つプリペアドでない文で使われる計画に比べ、大幅に劣ることが時々ありました。 これからは、プランナは、特定のパラメータ値に対して特別な計画を生成しようとします。 特別な計画による利点がないことが繰り返し証明された後になって初めて、一般的な計画が使われます。 この変更により、以前からあった、(PL/pgSQLの動的でない文を含め)プリペアド文を使うことによるパフォーマンスの不利を排除できます。
ネステッドループで内部インデックススキャンを使えるようプランナを改善しました。(Tom Lane)
新しい「パラメータ化されたパス」の機構により、内部インデックススキャンが、そのスキャンより2つ以上結合レベルが上のリレーションの値を使うことができるようになります。 これにより、(外部結合などの)意味的な制約により、可能な結合順序が制限される場合にパフォーマンスが大きく向上します。
外部データラッパの計画のAPIを改善しました。(Etsuro Fujita、Shigeru Hanada、Tom Lane)
ラッパがそのテーブルに対して複数のアクセス「パス」を提供できるようになったので、結合の計画がより柔軟になります。
テーブルでないリレーションについて、自己矛盾する制約句を認知します。(Tom Lane)
この検査はconstraint_exclusion
がon
に設定されている場合にのみ実行されます。
単純なインデックススキャン、およびインデックスオンリースキャンで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)
pg_hba.conf
で指定されるロール名とsamerole
が自動的にスーパーユーザを含むとは扱わないようにしました。(Andrew Dunstan)
これにより、グループロールによるreject
の行を使うのが簡単になります。
pg_hba.conf
によるトークン解析の処理がより一貫したものになるよう調整しました。(Brendan Jurd、Álvaro Herrera)
空のpg_hba.conf
ファイルを禁止しました。(Tom Lane)
これは、間違った構成についてより早く検知するためです。
スーパーユーザ権限はreplication権限を暗示するものとしました。(Noah Misch)
これにより、そのような権限を明示的に割り当てる必要がなくなります。
バックエンドがクラッシュする間に、現在の問い合わせの文字列のログ出力を試みるようにしました。(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)
この変更により、データベース接続を正しく閉じないアプリケーションによって起こされるログファイルへの雑多な書き込みが減少します。
一時ファイルのサイズとファイル数を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)
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
が異なる解釈をされることを防ぎます。
postgresql.conf
postgresql.conf
で、最初のエラーだけでなく、複数のエラーが報告されるようにしました。(Alexey Klyukin、Tom Lane)
postgresql.conf
の再読み込みで、特定のセッションにとって不正な設定が含まれる場合でも、すべてのセッションによって処理されるようにしました。(Alexey Klyukin)
以前は、そのようなセッション内で有効でない値があると、そのセッションは全ての設定変更を無視していました。
設定ファイルにinclude_if_exists
の機能を追加しました。(Greg Smith)
これは、ファイルが見つからなくてもエラーを発生させない、という点を除き、include
と同じ動作をします。
initdbの実行中にサーバの時間帯を調べ、postgresql.conf
のtimezone
およびlog_timezone
エントリを適切に設定するようにしました。(Tom Lane)
これにより、時間のかかる時間帯の調査をサーバの起動時に実施しないですみます。
Windowsでpostgresql.conf
の行番号が報告されるように、pg_settings
を修正しました。(Tom Lane)
ストリーミングレプリケーションのスレーブが、他のスレーブにデータを転送できるようにしました(カスケードレプリケーション)。(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ファイルがプライマリ上で捨てられる前に、スタンバイに転送することができます。
クライアントが切断されたら、実行中の問い合わせを取り消すようにしました。(Florian Pflug)
問い合わせの実行中にクライアントの接続が失われたことをバックエンドが検知したら、問い合わせを完了しようとせずにキャンセルします。
行式において実行時に列名を保持するようにしました。(Andrew Dunstan、Tom Lane)
この変更により、行の値がhstore
あるいはjson
型に変換される場合により良い結果が得られます。
つまり、返される値のフィールドには期待される名前がつけられます。
副SELECT
の結果に使われる列のラベルを改善しました。(Marti Raudsepp)
以前は、?column?
という一般的なラベルが使われていました。
不明の値の型を決定する経験則を改善しました。(Tom Lane)
不明の定数は、それを使う演算子のもう一方の側の値と同じ型を持つかもしれないという長年使われていた規則を、単純な演算子の場合だけでなく、多様演算子を考慮する場合も適用するようにしました。
ドメイン型へのキャスト、およびドメイン型からのキャストの作成について警告を出すようにしました。(Robert Haas)
そのようなキャストには何の効果もありません。
行がCHECK
制約、あるいはNOT NULL
制約に違反したとき、行の内容をエラー詳細として表示するようにしました。(Jan Kundrát)
これにより、insertやupdateが多数の行を処理しているときに、どの行に問題があるか特定するのが容易になるはずです。
DDLの同時実行中に、より信頼できる操作を提供しました。(Robert Haas、Noah Misch)
この変更ではロックを追加し、それにより、多くの状況で「cache lookup failed」(キャッシュの検索に失敗)のエラーを起こさなくなります。 また、同時削除中のスキーマにリレーションを追加することはできなくなりました。 以前はこれによりシステムカタログの内容が不整合を起こすことがありました。
DROP INDEX
にCONCURRENTLY
オプションを追加しました。(Simon Riggs)
これにより、他のセッションを妨害することなくインデックスを削除できます。
外部データラッパに列ごとのオプションが付けられるようにしました。(Shigeru Hanada)
ビューの定義の見やすい表示(pretty-print)を改善しました。(Andrew Dunstan)
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)
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 SERVER
にRENAME
を追加しました。(Peter Eisentraut)
ALTER DOMAIN
にRENAME
を追加しました。(Peter Eisentraut)
以前もALTER TYPE
を使えばドメインの名前の変更は可能でした。
ALTER DOMAIN
のDROP CONSTRAINT
で、存在しない制約を指定したらエラーを発生させるようにしました。(Peter Eisentraut)
IF EXISTS
オプションが追加されたので、以前と同じ動作をさせることは可能です。
CREATE TABLE
外部テーブル、ビューおよび複合型からのCREATE TABLE (LIKE ...)
を可能にしました。(Peter Eisentraut)
例えば、テーブルのスキーマがビューにマッチするようなテーブルを作成することも可能になります。
CREATE TABLE (LIKE ...)
でインデックスのコメントをコピーするときに、インデックス名の衝突が起きないように修正しました。(Tom Lane)
CREATE TABLE
... AS EXECUTE
で、WITH NO DATA
と列名の指定を処理できるように修正しました。(Tom Lane)
ビューに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 INTO
やCREATE TABLE AS
ではオブジェクトが作られるので、作成者は通常はinsert権限を持っています。
しかし、ALTER DEFAULT PRIVILEGES
によりそのような権限を取り消した場合など、そうならない例外的な場合もあります。
VACUUM
でページをロックできない時は、そのページをより安易にスキップするようにしました。(Simon Riggs、Robert Haas)
この変更により、VACUUM
が「詰まって」しまう事故が大幅に減るでしょう。
EXPLAIN
(BUFFERS)
がダーティーにされたブロック数、書き込まれたブロックを数えるようにしました。(Robert Haas)
EXPLAIN ANALYZE
がフィルタの段階で除外した行の数を報告するようにしました。(Marko Tiikkaja)
EXPLAIN ANALYZE
で時間の値が必要とされていないとき、時間測定のオーバーヘッドがなくなるようにしました。(Tomas Vondra)
これは新しいTIMING
オプションをFALSE
に設定することで実現できます。
範囲データ型の機能を追加しました。(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)
スーパーユーザでないユーザが、同じユーザの他のセッションに対して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)+$
です。
以前のリリースでは、後方参照が実際に最初の出現とマッチしていることを検査していませんでした。
情報スキーマにビューrole_udt_grants
、udt_privileges
、user_defined_types
を追加しました。(Peter Eisentraut)
情報スキーマのビューelement_types
に、複合型の属性を追加しました。(Peter Eisentraut)
情報スキーマにinterval_type
列を実装しました。(Peter Eisentraut)
以前はこの列はNULLとして読み出されていました。
情報スキーマのビューattributes
、columns
、domains
、element_types
で、照合順序に関連した列を実装しました。(Peter Eisentraut)
情報スキーマのビューtable_privileges
でwith_hierarchy
列を実装しました。(Peter Eisentraut)
情報スキーマでシーケンスのUSAGE
権限の表示を追加しました。(Peter Eisentraut)
情報スキーマがデフォルト権限を表示するようにしました。(Peter Eisentraut)
以前は空でないデフォルト権限はビューに表示されませんでした。
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)
PL/PythonにSPIカーソルのサポートを追加しました。(Jan Urbanski)
これにより、PL/Pythonが結果集合の一部だけを読むことができるようになります。
PL/Pythonに結果メタデータ関数を追加しました。(Peter Eisentraut)
具体的には、結果オブジェクト関数.colnames
、.coltypes
、.coltypmods
が追加されました。
Python 2.2をサポートから外しました。(Peter Eisentraut)
SQL言語による関数で、パラメータを名前で参照できるようにしました。(Matthew Draper)
これを使うには、関数の引数を名前にして、その引数名をSQL関数の本体から参照するだけで良いです。
initdbのオプションに、--auth-local
と--auth-host
を追加しました。(Peter Eisentraut)
これにより、pg_hba.conf
の認証設定で、local
とhost
を別々に設定することができます。
--auth
は引き続き、両方の設定を行います。
createuserで、レプリケーションの権限を設定するために、--replication
/--no-replication
のフラグを追加しました。(Fujii Masao)
コマンドラインツールが接続先のデータベースを指定でき、またpostgres
データベースへの接続に失敗した時は、template1
に接続するようにしました。(Robert Haas)
端末の幅に合わせて、出力を自動的に拡張する表示モードを追加しました。(Peter Eisentraut)
\x
コマンドにauto
オプションを追加しました。
通常の出力が画面の幅より広いとき、拡張モードに切り替えます。
起動に使われたファイルのディレクトリからの相対パス名でスクリプトファイルを指定できるようにしました。(Gurjeet Singh)
これは新しいコマンド\ir
で実行できます。
psqlの変数名で、非ASCII文字の使用をサポートしました。(Tom Lane)
特定メジャーバージョン用の.psqlrc
ファイルをサポートしました。(Bruce Momjian)
psqlは以前から、特定マイナーバージョン用の.psqlrc
ファイルはサポートしていました。
psqlの履歴ファイル、起動ファイルの位置について、環境変数で優先指定できるようにしました。(Andrew Dunstan)
PSQL_HISTORY
とPSQLRC
が設定されていれば、そこで指定されたファイル名が使われます。
子プロセスに渡される環境変数を変更できる\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
を尊重したものになります。
シーケンスについての\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)
psqlのタブ補完で、SQLのキーワードについては、新しいCOMP_KEYWORD_CASE
の設定に基づいて、大文字あるいは小文字で補完するようにしました。(Peter Eisentraut)
EXECUTE
についてタブ補完ができるようにしました。(Andreas Karlsson)
GRANT
/REVOKE
でのロールの参照についてタブ補完ができるようにしました。(Peter Eisentraut)
ファイル名のタブ補完で、必要なら引用符を補完できるようにしました。(Noah Misch)
TABLE
についてのタブ補完で、ビューも含むように変更しました。(Magnus Hagander)
pg_dumpに--exclude-table-data
オプションを追加しました。(Andrew Dunstan)
これにより、テーブルの定義はダンプするがそのデータは出力しない、ということをテーブル毎に指定できます。
pg_dumpとpg_restoreに--section
オプションを追加しました。(Andrew Dunstan)
有効な値はpre-data
、data
、post-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)
libpqの接続文字列についてURIの形式にすることを可能にしました。(Alexander Shulgin)
その構文はpostgres://
で始まります。
これにより、データベース接続を表現するURIについて、アプリケーションが独自のパーサを実装しなくても済むようになります。
SSL圧縮を使用不可にする接続オプションを追加しました。(Laurenz Albe)
高速なネットワークでSSL圧縮によるオーバーヘッドをなくすために使うことができます。
大きな結果集合をより良く処理できるように、1行処理モードを追加しました。(Kyotaro Horiguchi、Marko Kreen)
以前は、libpqは必ず問い合わせ結果の全体をメモリに取り込んでから、アプリケーションに返していました。
関数PQconnectdbParams
、PQconnectStartParams
、PQpingParams
の宣言にconst
修飾子を追加しました。(Lionel Elie Mamane)
.pgpass
ファイルで、パスワードフィールドにエスケープ文字を含められるようにしました。(Robert Haas)
プロセスを終了させる必要があるとき、ライブラリ関数がexit()
ではなく、abort()
を使うようにしました。(Peter Eisentraut)
この選択は、プログラムが使う通常の終了コードと競合せず、また呼び出し側が捕捉できるシグナルを生成します。
使われていないポートを削除しました。(Peter Eisentraut)
以下のプラットフォームはサポートされなくなりました。 dgux、nextstep、sunos4、svr4、ultrix4、univel、bsdi。
MS Visual Studio 2010でのビルドをサポートしました。(Brar Piening)
MinGW-w64の32ビットコンパイラでのコンパイルを可能にしました。(Lars Kanis)
インストール時にplpgsql.h
をinclude/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)
libpqの新しい1行処理モードを使うことで、dblinkの性能を向上しました。(Kyotaro Horiguchi、Marko Kreen)
この改善は、dblink_send_query()
/dblink_get_result()
には適用されません。
file_fdwでforce_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)
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)
具体的には、リンクモードが利用されている場合に古いクラスタをロックするだけで、それをスキーマがリストアされた直後に実行します。
pg_stat_statementsで、SQLテキストの正規化により、類似した問い合わせを1つにまとめられるようにしました。(Peter Geoghegan、Tom Lane)
パラメータ化されていないSQLを使うアプリケーションのユーザは、ログファイルの詳細な分析をしなくても、問い合わせのパフォーマンスを監視できるようになります。
ダーティーにされたブロック数、書き込まれたブロック数、読み書きの回数をpg_stat_statementsに追加しました。(Robert Haas、Ants Aasma)
pg_stat_statementsがPREPARE
およびEXECUTE
コマンドを二重に数えないようにしました。(Tom Lane)
グローバルオブジェクトについてSECURITY LABEL
をサポートしました。(KaiGai Kohei、Robert Haas)
具体的には、データベース、テーブル空間、ロールについてセキュリティラベルを追加しました。
sepgsqlがデータベースのラベルを尊重するようにしました。(KaiGai Kohei)
様々なオブジェクトの作成にあたり、sepgsqlのパーミッションの検査を行うようにしました。(KaiGai Kohei)
sepgsql_setcon()
およびそれに関連した関数を追加しました。
これらはsepgsqlのセキュリティドメインを制御します。(KaiGai Kohei)
パフォーマンスを向上するため、sepgsqlにユーザ空間のアクセスのキャッシュを追加しました。(KaiGai Kohei)
オプションで、Webサイトのスタイルシートを使ってHTML文書をビルドするルールを追加しました。(Magnus Hagander)
gmake STYLE=website draft
を使ってください。
EXPLAIN
の文書を改善しました。(Tom Lane)
vacuumdbのようなコマンドラインツールを使うときに、ユーザ名やデータベース名が二重引用符付きとして維持されることを文書に記述しました。(Bruce Momjian)
MD5認証でクライアントによって返される実際の文字列について文書に記述しました。(Cyan Ogilvie)
CREATE TEMP TABLE
でGLOBAL
とLOCAL
の利用を勧められないものとしました。(Noah Misch)
PostgreSQLでは長い間、これらのキーワードを意味のないものとして扱って来ましたし、今後もそのようにし続けます。 しかし将来、それらは標準SQLが意図しているものになるかも知れませんので、アプリケーションはそれらを使わないようにすべきです。