リリース日: 2011-09-12
このリリースは、PostgreSQLが伝統的なリレーショナルデータベース機能群を超え、PostgreSQL独特の新しく革新的な機能を持つものになったことを表しています。 リリース9.0で導入されたストリーミングレプリケーション機能は、同期レプリケーションオプション、ストリームを使用したバックアップ、監視の改良を追加することにより非常に強化されました。 以下に多くの改良を示します。
同期レプリケーションが可能です。
外部テーブルのサポートを追加しました。
列単位の照合順序のサポートを追加しました。
PostgreSQLの追加パッケージを簡略化する拡張を追加しました。
本物のシリアライザブル隔離レベルを追加しました。
CREATE TABLE
内のUNLOGGED
オプションを使用する、ログを取らないテーブルをサポートします。
WITH
句内でデータ変更コマンド(INSERT
/UPDATE
/DELETE
)が可能です。
GiSTインデックスに(演算子で順序付けされた)近傍検索を追加しました。
SECURITY LABEL
コマンドとSELinux権限制御のサポートを追加しました。
PL/Pythonサーバサイド言語を更新しました。
上記の項目については後述の節で詳しく説明します。
全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ/リストア、または、pg_upgradeの使用が必要です。
バージョン9.1には、以前のリリースとの互換性に影響する多くの変更が含まれます。 以下の非互換性に注意してください。
standard_conforming_strings
のデフォルト値が有効に変わりました。(Robert Haas)
デフォルトで文字列リテラル内のバックスラッシュが通常の文字になります。
この変更により長く存在した標準SQLとの非互換性がなくなります。
長い間escape_string_warning
がこの使用に関する警告を発生していました。
E''
文字列が文字列内にバックスラッシュを埋め込む適切な方法であり、この変更による影響を受けません。
この変更は、これを想定せずに古い規則にしたがった独自の文字列エスケープ処理を行うアプリケーションを破壊する可能性があります。 この結果SQLインジェクションセキュリティホールをもたらしてしまうほど厳しいものです。 信頼できない入力を外部にさらしだすアプリケーションを試験し、テキスト文字列内のバックスラッシュと単一引用符を正しく扱っていることを確認してください。
複合型に対する、関数形式の型キャストおよび属性形式の型キャストを許しません。(Tom Lane)
例えば
とcomposite_value
.texttext(
は許されません。
意図しないこの構文の使用により頻繁に不具合報告がなされました。
これは不具合ではありませんが、こうした表現を拒絶するように戻す方が良いように考えました。
複合型全体のキャストを本当に意図している場合にはcomposite_value
)CAST
および::
構文がまだ使用できます。
配列に基づくドメインに対するキャスト検査を厳しくしました。(Tom Lane)
ドメインが配列型に基づく場合、要素を取り出したり代入したりするためにドメイン値に添え字を付けるなど、配列要素にアクセスするためにドメイン型に「目を通す」ことができます。
例えばUPDATE ... SET domaincol[5] = ...
などこうしたドメイン値の要素への代入はドメイン型の制約で再検査されるようになりました。
これまではこの検査は飛ばされていました。
string_to_array()
が長さゼロの文字列に対して空の配列を返すように変更しました。(Pavel Stehule)
これまではNULL値を返しました。
NULL
セパレータが文字列を文字に分割するようにstring_to_array()
を変更しました。(Pavel Stehule)
これまではNULL値を返しました。
BEFORE/AFTERトリガに対する不適切な検査を修正しました。(Tom Lane)
トリガが次の3つの場合で発行できるようになりました。
BEFORE
、AFTER
、何らかの作業のINSTEAD OF
(代わり)。
トリガ関数の作者は、3つの場合すべてにおいてロジックが健全であることを検証しなければなりません。
ロールにコメントを設定するためにはスーパーユーザ権限またはCREATEROLE
権限が必要です。(Tom Lane)
返り値が減少することのないようにpg_last_xlog_receive_location()
を変更しました。(Fujii Masao)
これまでは、ストリーミングレプリケーションが再開する時にpg_last_xlog_receive_location()
の値が減少することがあり得ました。
log_connections
にしたがったレプリケーション接続のログが取られます。(Magnus Hagander)
これまでは、レプリケーション接続のログは常に取られていました。
付与された例外ブロックで例外が捕捉できるようにパラメータを持たない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コマンドで微妙な違いが発生するかもしれません。
すべてのcontribモジュールは、独自のSQLスクリプトを手作業で呼び出すのではなく、CREATE EXTENSION
を用いてインストールされます。(Dimitri Fontaine、Tom Lane)
バージョン9.0のcontribモジュールを含む既存のデータベースを更新する場合は、既存のcontribモジュールのオブジェクトを拡張としてまとめるためにCREATE EXTENSION ... FROM unpackaged
を使用してください。
9.0より前のバージョンから更新する場合は、古いアンインストールスクリプトを使用してcontribモジュールのオブジェクトを削除してからCREATE EXTENSION
を使用してください。
pg_stat_reset()
がすべてのデータベースレベルの統計情報を再初期化するようになりました。(Tomas Vondra)
一部のpg_stat_database
カウンタが再初期化されていませんでした。
information_schema.triggers
の一部の列名を新しい標準SQLの名前に合致するように修正しました。(Dean Rasheed)
ECPGのカーソル名を大文字小文字を区別せずに扱います。(Zoltan Boszormenyi)
PostgreSQL 9.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)
これは、バックエンドが削除された後も長い間開いた状態のファイルを保持するかもしれず、カーネルによるディスク領域の回収を妨げるという状況を修正します。
継承テーブルのスキャンが有意にソートされた結果を返すことができます。(Greg Stark、Hans-Jurgen Schonig、Robert Haas、Tom Lane)
これにより、継承テーブルを持ち、ORDER BY
、LIMIT
、MIN
/MAX
を使用する問い合わせをより良く最適化することができます。
GINインデックススキャンのコスト推定を改良しました。(Teodor Sigaev)
集約およびウィンドウ関数のコスト推定を改良しました。(Tom Lane)
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)
古い用語はまだ後方互換性のために受け入れられます。 しかし2つの方式は根本的に異なるものですので、別の名前を採用する方が良いのかもしれません。
資格制御メッセージの使用を防止するために、peer認証を書き直しました。(Tom Lane)
この変更によりピア認証コードがより単純に、より良い性能がでるようになりました。
しかし、getpeereid
関数か同等のソケット操作を提供するプラットフォームが必要です。
分かっている限りでは、これまでピア認証が動作し、このバージョンで動作しなくなったプラットフォームは5.0より前のNetBSDのみです。
log_checkpoints
により制御される、リスタートポイントおよびチェックポイントのログ処理に詳細を追加しました。(Fujii Masao、Greg Smith)
WALファイルの詳細や同期処理に関する詳細が含まれるようになりました。
ログ収集機構により作成されるログファイルの権限を制御する、log_file_mode
が追加されました。(Martin Pihlak)
syslogログ処理用の最大行長を接頭辞分と900バイトをたし合わせた値に減らしました。(Noah Misch)
これにより、一般的な2kBではなく1kBの長さ制限を持つsyslog実装における長大な行の切り詰めを防止します。
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の回数を数えます。
wal_buffers
の自動調整を提供します。(Greg Smith)
wal_buffers
の値はデフォルトでshared_buffers
の容量に応じて自動的に調整されるようになりました。
deadlock_timeout
、log_min_duration_statement
、log_autovacuum_min_duration
の最大値を増やしました。(Peter Eisentraut)
これまでのこれらのパラメータの最大値はそれぞれおよそ35分でしかありませんでした。 もっと大きな値が許されるようになりました。
同期レプリケーションが可能です。(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)
これはストリーミングレプリケーションで使用される読み取り専用の権限です。 これによりスーパーユーザ以外のロールがレプリケーション用接続を使用することができます。 以前はスーパーユーザのみがレプリケーション用接続を初期化することができました。 デフォルトでスーパーユーザは引き続きこの権限を持ちます。
WAL送信プロセスの活動を表示するpg_stat_replication
システムビューを追加しました。(Itagaki Takahiro、Simon Riggs)
これは接続されたスタンバイサーバすべての状態を報告します。
pg_last_xact_replay_timestamp()
監視用関数を追加しました。(Fujii Masao)
これは、もっとも最近プライマリでコミットまたはアボートしたレコードがスタンバイに適用された時間を報告します。
スタンバイがプライマリの古い行バージョンの整理を延期させることを有効にする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)
これは接続プールソフトウェアで有用です。
ストリーミングレプリケーションの再生を制御する関数を追加しました。(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)
これまではすべての値を引用符付けしなければなりませんでした。
本物のシリアライザブル隔離レベルを追加しました。
これまでは、シリアライザブルを要求した場合に、そのトランザクション全体で単一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
の動作はより論理的になるべきと評価されました。
列単位の照合順序のサポートを追加しました。(Peter Eisentraut、Tom Lane)
これまでの照合順序(テキスト文字列のソート順序)はデータベース作成時のみで設定することができました。
照合順序は、標準SQLのCOLLATE
句を用いて、列、ドメイン、インデックス、式単位で設定することができるようになりました。
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)
これにより複合型の変更ができます。
ALTER
型付けされたテーブルに対するALTER TYPE
操作にRESTRICT
/CASCADE
を追加しました。(Peter Eisentraut)
これはADD
/DROP
/ALTER
/RENAME ATTRIBUTE
のカスケード動作を制御します。
ALTER TABLE
をサポートします。(Noah Misch)
name
{OF | NOT OF}type
この構文により、スタンドアローンのテーブルを型付けされたテーブルにすること、型付けされたテーブルをスタンドアローンにすることができます。
ALTER ... SET SCHEMA
コマンド内でより多くのオブジェクトに対するサポートを追加しました。(Dimitri Fontaine)
このコマンドは、変換、演算子、演算子クラス、演算子族、全文検索設定、全文検索辞書、全文検索パーサ、全文検索テンプレートをサポートするようになりました。
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
が親テーブルに対してより強いロックを取得するようになりました。
SECURITY LABEL
コマンドを追加しました。(KaiGai Kohei)
これによりオブジェクトにセキュリティラベルを付与することができます。
トランザクションレベルの勧告的ロックを追加しました。(Marko Tiikkaja)
これは既存のセッションレベルの勧告的ロックと似ていますが、こうしたロックはトランザクション終了時に自動的に解放されます。
TRUNCATE ... RESTART IDENTITY
はトランザクション的にシーケンスを再開始させます。(Steve Singer)
これまでのカウンタは、バックエンドがコミット中のトランザクション処理とコミット完了の間にクラッシュした場合、同期されないままとなる可能性がありました。
COPY
ENCODING
オプションをCOPY TO/FROM
に追加しました。(Hitoshi Harada、Itagaki Takahiro)
これによりCOPY
ファイルの符号化方式をクライアント符号化方式とは別に指定することができます。
双方向COPY
プロトコルのサポートを追加しました。(Fujii Masao)
現時点ではストリーミングレプリケーションによってのみ使用されています。
EXPLAIN
EXPLAIN VERBOSE
が、FunctionScan
ノード内の関数呼び出し式を示すようにしました。(Tom Lane)
VACUUM
VACUUM FULL VERBOSE
およびCLUSTER VERBOSE
の出力にさらに詳細を追加しました。(Itagaki Takahiro)
新しい情報には、有効タプル数、無効タプル数、CLUSTER
が再構築するためにインデックスを使用するかどうかが含まれます。
テーブルロックを獲得できなかった場合に自動バキュームが待機することを防ぎます。(Robert Haas)
後でそのテーブルのバキュームを試みます。
CLUSTER
CLUSTER
がインデックスをスキャンするよりも安価であるように見える場合にインデックスのスキャンではなく、テーブルをソートすることができます。
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
が必要となる(通知される)まれな場合がありました。
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
は、こうした複合型の列に対する不適切な統計情報収集メソッドの使用を試みません。
money
とnumeric
間のキャストのサポートを追加しました。(Andy Balholm)
int4
およびint8
からmoney
へのキャストのサポートを追加しました。(Joey Adams)
型付けされたテーブルの場合、テーブルの行型からテーブルのスーパー型へのキャストが可能です。(Peter Eisentraut)
これは、行型からスーパーテーブルの行型へのキャストが可能であるという既存の機能に類似したものです。
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
モジュールでのみ利用できた機能を提供するものです。
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)
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権限に対する検査を行うことができます。
ビューに対するINSTEAD OF
トリガをサポートします。(Dean Rasheed)
この機能を更新可能なビューを完全に実装するために使用することができます。
FOREACH IN ARRAY
をPL/pgSQLに追加しました。(Pavel Stehule)
これは、配列値の要素を使用する反復についてのこれまでの方法より効率と可読性を向上します。
パラメータを持たないRAISE
をRAISE ERROR
を捕捉できる同じ場所で捕捉できるようになりました。(Piyush Newe)
これまでのコードでは、実行中の例外ハンドラを含むブロックからこのエラーを発生させました。 新しい動作は他のDBMS製品とより一貫性があります。
PL/Perl関数で一般的なレコード引数が許されます。(Andrew Dunstan)
PL/Perl関数をrecord
型を受け付けるように宣言することができるようになりました。
この動作は任意の名前付き複合型に対するものと同じです。
PL/Perlの配列引数をPerl配列に変換します。(Alexey Klyukin、Alex Hunsaker)
文字列表現もまだ可能です。
PL/Perlの複合型引数をPerlのハッシュに変換します。(Alexey Klyukin、Alex Hunsaker)
文字列表現もまだ可能です。
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
では例外クラスを利用することができませんでした。
createlangおよびdroplangを廃止予定とし、拡張コマンドを呼び出すだけのものにしました。(Tom Lane)
現在の接続情報を示す\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)
すべての識別子を強制的に引用符付けする--quote-all-identifiers
オプションをpg_dumpおよびpg_dumpallに追加しました。(Robert Haas)
directory
形式をpg_dumpに追加しました。(Joachim Wieland、Heikki Linnakangas)
これは内部的にはtar
pg_dump形式と似ています。
サーバが稼動していないと間違った報告をしないようにpg_ctlを修正しました。(Bruce Momjian)
これまではサーバが稼動していてもpg_ctlが認証させられなかった場合にこれが起こることがありました。
pg_ctl startの「待機」(-w
)オプションを改良しました。(Bruce Momjian、Tom Lane)
待機モードは非常に堅牢になりました。 デフォルト以外のポート番号、デフォルト以外のUnixソケット位置、権限問題、古いpostmasterのロックファイルにより混乱することがなくなります。
スタンバイサーバをプライマリに切り替えるpromote
オプションをpg_ctlに追加しました。(Fujii Masao)
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)
これらの関数により、新しくセッションを開こうとしなくても、サーバの状態を検出することができます。
ECPGはWHERE CURRENT OF
句の中であっても動的カーソル名を受け付けることができます。(Zoltan Boszormenyi)
ecpglibがdouble
値をこれまでの14桁ではなく15桁の精度で書き込むようにしました。(Akira Kurosawa)
HP-UX Cコンパイラで受け付けられる+Olibmerrno
コンパイルオプションを使用します。(Ibrar Ahmed)
これは最近のHPプラットフォームで起こり得る数学ライブラリ呼び出し誤動作を防止します。
並行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
の試験が含まれるようになりました。
Windowsにおいて、pg_ctlがサービスを自動または手動として登録することができます。(Quan Zongliang)
Windowsにおいてクラッシュダンプの収集サポートを追加しました。(Craig Ringer、Magnus Hagander)
minidumpsがデバッグ用ではないWindowsバイナリで生成でき、標準のデバッグツールで解析できるようになりました。
MinGW64コンパイラを使用する構築を有効にしました。(Andrew Dunstan)
これにより、Windowsプラットフォーム以外であってもクロスコンパイルすることにより64ビットWindowsバイナリを構築することができます。
GUC変数の代入フック用のAPIを改良しました。(Tom Lane)
これまでの代入フック機能が、検査フックと代入フックに分離されました。 前者は失敗しても構いませんが、後者は失敗してはなりません。 この変更は、独自のGUCパラメータを定義する追加モジュールに影響を与えます。
イベントの待機をサポートするためにソースコードにラッチを加えました。(Heikki Linnakangas)
データ変更の権限検査ロジックをまとめました。(KaiGai Kohei)
一貫性を目的に、なくなったget_
関数を追加しました。(Robert Haas)
object
_oid()
競合するキーワードを除去することにより、 追加モジュールのコンパイルでの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)
権限を編さするソースコードフックを追加しました。(Robert Haas、Stephen Frost)
セキュリティフレームワークで使用するためのpost-object-creation関数フックを追加しました。(KaiGai Kohei)
クライアント認証フックを追加しました。(KaiGai Kohei)
新しい拡張機構を用いて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ビット符号なし整数です。
SELinuxと権限検査をやりとりするcontrib/sepgsql
を追加しました。(KaiGai Kohei)
これは新しいSECURITY LABEL
機能を使用します。
auth_delay
contribモジュールを追加しました。(KaiGai Kohei)
これは、認証失敗を返す前にサーバを休止します。 ブルートフォースパスワード攻撃をより困難にするために設計されました。
dummy_seclabel
contribモジュールを追加しました。(KaiGai Kohei)
これは権限に関するリグレッションテストで使用されます。
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)
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)
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文字で扱う必要がありました。
文字セットに関して前提を置くことなく合理的に判読できるように書き直されました。