2010-09-20
このリリースのPostgreSQLで数年に渡り要望があった、簡単に利用できるレプリケーション、一括権限管理機能、匿名ブロックといった機能を追加しました。 これまでのメジャーリリースではその範囲は保守的なものでしたが、このリリースでは、これまでPostgreSQLを使用してきたユーザや新しく使い始めるユーザが喜ぶ機能を提供できることに大胆かつ新しい期待を持っています。 これはすべて非互換性がほぼないようになされました。 主な改良点を以下に示します。
組込みのログシッピングによるレプリケーション。 この進歩は次の2つの機能から構成されます。 ストリーミングレプリケーションにより、継続的なアーカイブ(WAL)ファイルをスタンバイサーバに対してネットワーク上にストリーミングさせることができます。 ホットスタンバイにより、継続的アーカイブを行うスタンバイデータベースサーバは読み取り専用の問い合わせを受け付けることができます。 これらを合わせた結果、シングルマスタと複数の読み取り専用のスレーブサーバをサポートします。
より簡単なデータベースオブジェクトの権限管理。
GRANT
/REVOKE IN SCHEMA
は既存のオブジェクトに対するは一括権限変更をサポートし、そして、ALTER DEFAULT PRIVILEGES
は将来作成されるオブジェクトの権限を制御します。
ラージオブジェクト(BLOB)も同様に権限管理をサポートするようになりました。
ストアドプロシージャサポートの大きな改良。
DO
文により、その場限り、または、「匿名」のコードブロックをサポートします。
関数は名前付きパラメータを使用して呼び出すことができるようになりました。
PL/pgSQLはデフォルトでインストールされるようになり、また、PL/PerlおよびPL/Pythonは、Python3のサポートを含む多くの点で改良されました。
64ビットWindowsを完全にサポートします。
追加されたウィンドウ処理オプション(PRECEDING
とFOLLOWING
)と集約関数に渡される値の順序を制御する機能による、より先端的な報告問い合わせ。
SQL互換の列単位のトリガと条件付きのトリガ実行など、新しいトリガ機能。
遅延可能な一意性制約。工夫することなく一意キーの大量更新ができるようになります。
排他制約。 これらは、複雑な条件を強制させることができる、汎用的な一意性制約を提供します。
新しく高度なセキュリティ機能。
RADIUS認証、LDAP認証の改良、パスワード強度を検査する新しいpasswordcheck
オプションモジュールなどがあります。
新しい高性能なLISTEN
/NOTIFY
機能の実装。
待ち状態のイベントがテーブルではなく、メモリベースのキューに格納されるようになりました。
また、以前のようにイベント名だけを送信するのではなく、「ペイロード」文字列を各イベントといっしょに送信できるようになりました。
新しいVACUUM FULL
の実装。
このコマンドは、容量を抑えるために行を一行一行移動するのではなく、テーブルおよびインデックス全体を書き換えるようになりました。
ほとんどの状況でかなり高速になり、また、インデックスが膨張することがなくなりました。
8.3または8.4から9.0へのその場での更新をサポートするpg_upgrade
を追加しました。
不要な結合を除去するなど、特定の種類の問い合わせに対する複数の性能向上。 オブジェクト/リレーションマッパ(ORM)で生成されるなどの自動生成される問い合わせの一部を最適化する際に役に立ちます。
EXPLAIN
の改良。
この出力がJSON、XML、YAML形式で利用可能になりました。
これまでは利用できなかったバッファ使用状況などその他のデータが含まれるようになりました。
新しい関数やより多くのデータ能力など、hstore
の改良。
上述の項目については、以下でより詳しく説明します。
全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ/リストア、または、pg_upgradeの使用が必要です。
バージョン9.0には、新機能のサポートおよびコード品質の向上のために、後方互換性を一部壊してしまう多くの変更が含まれます。 具体的にはPL/pgSQL、ポイントインタイムリカバリ(PITR)およびウォームスタンバイを多く使用しているユーザは、これらにユーザに影響する変更が多くありますので、自身のアプリケーションを試験しなければなりません。 以下の非互換性に注意してください。
add_missing_from
サーバパラメータがなくなりました。
これは長い間デフォルトで無効でした。(Tom Lane)
regex_flavor
サーバパラメータがなくなりました。
これは長い間デフォルトでadvanced
でした。(Tom Lane)
archive_mode
はarchive_command
のみに影響するようになりました。
新しいwal_level
設定は先行書き込みログの内容に影響を与えます。
log_temp_files
がデフォルトのファイルサイズの単位としてキロバイトを使用するようになりました。(Robert Haas)
親テーブルを問い合わせる場合、問い合わせの一部としてスキャンされる子テーブルに対する異なる権限検査がまったく行われません。(Peter Eisentraut)
標準SQLではこの挙動を規定しています。 また、実際の所、親と同様に子それぞれに権限を検査するという以前の振舞いよりも非常に便利です。
bytea
の出力はデフォルトで16進数書式になりました。(Peter Eisentraut)
互換性が必要ならばbytea_output
サーバパラメータを使用して伝統的な出力書式を選択することができます。
配列入力において通常のASCII空白文字のみを無視可能なものとみなすようになりました。 一部のロケールに従うと空白文字になるものであっても、ASCII文字以外を無視することはありません。
これは、配列の値がサーバのロケール設定に依存して異なった解釈をされる場合の一部の境界問題を防止します。
SIMILAR TO
パターンとSQL形式のsubstring()
パターンの標準互換性を高めました。(Tom Lane)
これには、パターンのメタ文字としての?
および{...}
の扱いが含まれます。
これらの文字は以前は単なるリテラル文字でしたが、SQL:2008で追加された新しい機能に対応しました。
また^
および$
は単なるリテラル文字として扱われるようになりました。
これまでは、パターンがSQL規則ではなくPOSIXに従うかのようにメタ文字として扱われていました。
また、標準SQLのsubstring()
では入れ子のための括弧が部分文字列の取得に影響を与えることがなくなりました。
同時に大括弧式(文字クラス)の処理の標準に対する互換性が高まりました。
標準SQLに従い、substring()
の第3パラメータでは負の長さ値を拒絶します。(Tom Lane)
date_trunc
を秒の端数に対する精度を減らす時に四捨五入するのではなく切り捨てるようにしました。(Tom Lane)
整数を基にした日付時刻では常にこのようにこのコードは動作していました。 浮動小数点を基にした日付時刻も同様に動作するようになりました。
子テーブルが複数の関連がない親から同じ列を継承する場合、RENAME
中の列名の一貫性をより厳しく強制します。(KaiGai Kohei)
背後にあるテーブル列が改名された場合にインデックス名とインデックス列名は自動的に改名されなくなりました。(Tom Lane)
管理者はまだこうしたインデックスや列を手作業で改名することができます。 この変更は、改名後も一意性インデックスが正しく認識されるように、JDBCドライバとおそらく他のドライバの更新を要求します。
CREATE OR REPLACE FUNCTION
で宣言された関数パラメータの名前を変更できなくなりました。(Pavel Stehule)
名前付きパラメータ呼び出しにおけるあいまい性を防ぐために、既存関数の宣言における入力変数に対する別名を変更できないようになりました。
(しかし過去に名前を付けていないパラメータには名前を割り当てることができます。)
これを行うためには関数をDROP
し再作成しなければなりません。
変数名が問い合わせで使用される列名と競合する場合にPL/pgSQLはエラーを発生するようになりました。(Tom Lane)
これまでの動作は問い合わせの列名より優先してあいまいな名前をPL/pgSQL変数にバインドすることでした。
これはよく驚くほどの誤動作をもたらしていました。
エラーを発生させることにより、曖昧な状況を簡単に検知できるようになります。
こうしたエラーを発生させる関数を修正し、競合を解消させることを推奨しますが、plpgsql.variable_conflict
サーバ変数または関数毎の#variable_conflict
オプションにより従来の動作に戻すことができます。
PL/pgSQLは特定のSQL予約語と一致する変数名を許さなくなりました。(Tom Lane)
これはPL/pgSQLのパーサをよりコアのSQLパーサに近づけるように調整した結果です。 必要ならば、変数名を二重引用符でくくることでこの制限を回避することができます。
PL/pgSQLは、基本型と同様に想定する型修飾子と一致する複合型結果の列を必要とするようになりました。(Pavel Stehule、Tom Lane)
例えば、結果の列の型がNUMERIC(30,2)
と宣言されていた場合、その列に多少異なる精度のNUMERIC
を返すことを受け付けなくなりました。
これまでのバージョンでは修飾子の検査は省略され、その結果、実際には宣言された制限に従わない結果行が許されていました。
PL/pgSQLが複合型のフィールドへの選択をより一貫性を持って扱うようになりました。(Tom Lane)
これまでは、SELECT ... INTO
のような文はrec
.fld
FROM ...fld
レコードフィールドが複合型であったとしてもスカラの代入として扱われました。
これが、INTO
の対象が通常の複合型の変数であった場合と同様に、レコードの代入として扱われるようになりました。
このため、このフィールドのサブフィールドに代入される値は、これまでのバージョンにおけるROW(...)
式ではなく、SELECT
リストの別々の列として記述されなければなりません。
9.0と過去のリリースの両方で動作する方法で行う必要があれば、
のように記述することができます。
rec
.fld
:= ROW(...) FROM ...
PL/pgSQLのRENAME
宣言を削除しました。(Tom Lane)
RENAME
の代わりにALIAS
を使用してください。
これは、以前のような(例えば$1
のような)ドル記号付きの変数だけではなく任意の変数に別名を作成することができるようになります。
演算子名としての=>
を使用を廃止する予定です。(Robert Haas)
名前付きパラメータに関する標準SQL記法をサポートするために、将来のバージョンのPostgreSQLではおそらくこの演算子名を完全に拒絶します。 現時点ではまだ許されますが、このような演算子が定義された場合に警告が現れます。
64ビット整数データ型が動作しないプラットフォームのサポートを取りやめました。(Tom Lane)
まだサポートされているプラットフォームはすべて64ビット整数データ型が動作するはずです。
バージョン9.0には予期しないほど多くの主要機能が追加され、また、増強、改良、新しいコマンド、新しい関数、その他の変更が200以上あります。
PostgreSQLに存在するスタンバイサーバ機能は、スタンバイサーバにおいて読み取り専用の問い合わせをサポートすること、および、マスタサーバとスタンバイサーバとの間の遅延を大きく削減することができるように拡張されました。 多くのユーザにとって、これは有用かつ、高可用性、スケールアウト性を目的としたレプリケーションを構成する管理作業を低減します。
スタンバイサーバで読み取り専用の問い合わせを受け付けることができます。(Simon Riggs、Heikki Linnakangas)
この機能はホットスタンバイと呼ばれます。
この機能を制御するための新しい設定がpostgresql.conf
とrecovery.conf
にあります。
さらに広大な文書も存在します。
先行書き込みログ(WAL)データをスタンバイサーバに流し込むことができます。(Fujii Masao、Heikki Linnakangas)
これはストリーミングレプリケーションと呼ばれます。
これまでWALデータはWALファイル全体(通常それぞれ16メガバイト)を単位としてのみスタンバイサーバに送付することができました。
ストリーミングレプリケーションはこの非効率性を減らし、マスタの変更をほとんど遅延なくスタンバイサーバに伝播できるようになります。
この機能を制御するための新しい設定がpostgresql.conf
とrecovery.conf
にあります。
さらに広範囲の文書も存在します。
スタンバイサーバのWAL状況の監視に使用することができる、pg_last_xlog_receive_location()
およびpg_last_xlog_replay_location()
を追加しました。(Simon Riggs, Fujii Masao, Heikki Linnakangas)
ALTER TABLESPACE ... SET/RESET
を使用して、テーブル空間単位の値をシーケンシャルおよびランダムページコスト推定(seq_page_cost
/random_page_cost
)に設定できます。(Robert Haas)
結合問い合わせにおけるEvalPlanQual再検査の性能と信頼性を改善しました。(Tom Lane)
最近更新された行に対する、結合を含むUPDATE
、DELETE
およびSELECT FOR UPDATE/SHARE
問い合わせが非常によく動作するようになりました。
同じトランザクションにおいてテーブル生成またはテーブルデータの消去が以前に行われていた場合の、TRUNCATE
の性能を改良しました。(Tom Lane)
継承された子テーブルの検索性能を改良しました。(Tom Lane)
不要な外部結合を除きました。(Robert Haas)
内側が一意かつ結合の上位で参照されない場合の外部結合は不要ですので、削除されるようになりました。 これは、オブジェクト/リレーションマッパ(ORM)で作成される問い合わせなど、多くの自動生成される問い合わせを高速化します。
IS NOT NULL
制限でインデックスを使用できます。(Tom Lane)
これは特に、インデックス内に多くのNULL値を含む場合のMAX()
/MIN()
値の検索に有用です。
いつマテリアライズされたノードを使用するか、および、DISTINCT
についてソート処理を使用するかハッシュ処理を使用するか、に関するオプティマイザの選択を改良しました。(Tom Lane)
boolean
<>
演算子を含む式におけるオプティマイザの等価検知を改良しました。(Tom Lane)
GEQOが問い合わせ計画を作成する時毎回、同じランダムシードを使用します。(Andres Freund)
遺伝的問い合わせオプティマイザ(GEQO)は無作為な計画を選択し続けますが、同一の問い合わせに対して同じ無作為な計画を選択するようになりました。
これにより一貫した性能が得られます。
他の計画を試すためにgeqo_seed
を変更することができます。
GEQOの計画選択を改良しました。(Tom Lane)
まれに発生する「failed to make a valid plan」エラーを防止します。 また計画作成速度も改良されたはずです。
継承ツリー統計情報をサポートするANALYZE
を改良しました。(Tom Lane)
具体的にはこれはパーティション分けされたテーブルで有用です。 しかし子テーブルが変更された時に、自動バキュームはまだ自動的に親テーブルを再解析しません。
再解析が必要か否かに関するautovacuumの判定を改良しました。(Tom Lane)
より大きい/より小さいの比較についてオプティマイザの推定を改良しました。(Tom Lane)
より大きい/より小さいの比較についての統計情報を検索する時、比較用の値がヒストグラムバケットの先頭または末尾にあれば、現在の列の最小と最大を得るために(利用可能であれば)インデックスを使用します。 これは データ範囲の終端に近い比較値に対する推定精度を、特に新しいデータの追加によりデータ範囲が定常的に変更する場合に、大きく改善します。
ALTER TABLE
を使用することで、個別値の個数に関する統計情報の設定が可能です。(Robert Haas)
これにより、列の個別値の数もしくは割合をユーザが上書きすることができます。
この統計情報は通常ANALYZE
で計算されますが、特に非常に多くの行があるテーブルでは推定値が悪化することがあり得ます。
RADIUS (リモート認証ダイヤルインユーザサービス)認証サポートを追加しました。(Magnus Hagander)
LDAP(軽量ディレクトリアクセスプロトコル)認証において「search/bind」モードで操作できます。(Robert Fleming、Magnus Hagander)
これにより、まずユーザを検索し、その後にそのユーザ用に返されるDN(識別名)をシステムが使用することができるようになります。
samehost
およびsamenet
指定をpg_hba.conf
に追加しました。(Stef Walter)
これらはそれぞれサーバのIPおよびサブネットアドレスに一致します。
クライアントが適切なクライアント証明書を返すことができるように、クライアントに信頼できるSSLルート証明書の名前を渡します。(Craig Ringer)
クライアントがpg_stat_activity
で表示される、アプリケーション名を設定できる機能を追加しました。(Dave Page)
これにより管理者は元となるアプリケーションによってデータベースの流量を特徴付けし、また、問題への対応を行うことができます。
log_line_prefix
にSQLSTATEオプション(%e
)を追加しました。(Guillaume Smet)
これによりユーザはエラーコード番号によりエラーとメッセージに関する統計情報を収集することができます。
UTF16符号化方式でWindowsのイベントログに書き出します。(Itagaki Takahiro)
これでWindowsのPostgreSQLのログメッセージに対する多言語サポートが実現しました。
クラスタ全体で共有するバックグラウンドライタの統計情報をリセットするためのpg_stat_reset_shared('bgwriter')
を追加しました。(Greg Smith)
個々のテーブルおよび関数用の統計情報カウンタのリセットを可能とするpg_stat_reset_single_table_counters()
およびpg_stat_reset_single_function_counters()
を追加しました。(Magnus Hagander)
データベースまたはロールの組み合わせに基づく設定パラメータを設定することができます。(Alvaro Herrera)
これまではデータベース単位およびロール単位の設定のみが可能で、組み合わせることができませんでした。
すべてのロールおよびデータベースの設定が新しいpg_db_role_setting
システムカタログに格納されるようになりました。
新しいpsqlの\drds
コマンドはこれらの設定を表示します。
古いpg_roles
、pg_shadow
およびpg_user
システムビューでは組み合わせた情報を表示しません。
このためこれらはユーザまたはデータベース用の設定を完全に表さなくなりました。
bonjour
サーバパラメータを追加しました。
これはBonjourが有効なサーバが自身をBonjour経由で広告するかどうかを制御します。(Tom Lane)
デフォルトは無効で、広告を行わないことを意味します。 これによりパッケージ作成者は個々のユーザがこの機能を欲しないかどうか気にすることなく、Bonjourを有効として構築したものを配布することができます。
オプティマイザ内でノードマテリアライゼーションの使用を制御する、enable_material
サーバパラメータを追加しました。(Robert Haas)
デフォルトは有効です。 無効の場合、オプティマイザは純粋に性能上の理由のためにマテリアライズされたノードを追加しません。 ですが正確性のために必要な場合は使用されます。
デフォルトのファイルサイズの単位としてキロバイトを使用するようにlog_temp_files
サーバパラメータを変更しました。(Robert Haas)
これまでは単位指定がない場合、この設定はバイト単位として解釈されました。
postgresql.conf
が再読み込みされた場合、パラメータ値の変更記録が残ります。(Peter Eisentraut)
これにより管理者およびセキュリティ担当者はデータベースが変更された時点を監査することができるようになります。
またpostgresql.conf
の変更が反映されたかどうか検査することもでき、非常に便利です。
独自のサーバパラメータに対して、適切にスーパーユーザ権限を強制します。(Tom Lane)
スーパーユーザ以外のユーザが、その時にサーバが認識していないパラメータに対するALTER ROLE
/DATABASE SET
を発行することができなくなりました。
これによりサーバは、スーパーユーザのみのパラメータがスーパーユーザのみにより設定されることを正しく検査することができます。
これまではセッション開始時にSET
は受け付けられますが、無視されていました。
このためスーパーユーザのみの独自パラメータが本来の有用性を持っていませんでした。
返される行数を常に予測できるように、LIMIT
の適用後にSELECT FOR UPDATE
/SHARE
処理を行います。(Tom Lane)
これまでは、同時実行のトランザクションによりなされた変更により、SELECT FOR UPDATE
がそのLIMIT
で指定した行より少ない行が返ってしまうことが発生しました。
ORDER BY
を付けたFOR UPDATE
は今でも予想外の結果を生成することがあり得ますが、これは副問い合わせでFOR UPDATE
を使用することで正しくすることができます。
LIMIT
/OFFSET
構文に関して、伝統的な方法と標準SQLの方法を混在できるようにしました。(Tom Lane)
ウィンドウ関数でサポートされるフレームオプションを拡張しました。(Hitoshi Harada)
フレームはCURRENT ROW
から始められるようになり、また、ROWS n PRECEDING
/FOLLOWING
オプションがサポートされるようになりました。
SELECT INTO
およびCREATE TABLE AS
はそのコマンドタグ内でクライアントに行数を返します。(Boszormenyi Zoltan)
これにより、追加のCOUNT
問い合わせを行うことなく結果数やページ数を計算することができますので、クライアントとの往復作業を完全になくすことができます。
ディスクへの吐き出しを遅延させることによりCREATE DATABASE
を高速化しました。(Andres Freund、Greg Stark)
テーブル、ビュー、複合型の列に対してのみにコメントを許します。 インデックスやTOASTテーブルのような他の種類のリレーションでは許されません。(Tom Lane)
値を持たない列挙型の作成が可能です。(Bruce Momjian)
行をページに合わせることができない場合を除き、MAIN
格納型を持つ列の値を主ヒープページに保持させます。(Kevin Grittner)
これまでは、MAIN
値は行の容量がページ容量の1/4になるまで、強制的にTOASTテーブルとなりました。
ALTER TABLE
DROP COLUMN
およびDROP CONSTRAINT
にIF EXISTS
を実装しました。(Andres Freund)
テーブルを書き換えるALTER TABLE
コマンドでWALロギングを飛ばすことができます。(Itagaki Takahiro)
こうした操作は新しいテーブルのコピーが作成されるかロールバックされるかのいずれかです。 このため継続的アーカイブモードで実行している場合を除き、WALアーカイブ処理を飛ばすことができます。 これによりI/Oオーバーヘッドが減少し、性能が向上します。
テーブル所有者以外により実行された時のALTER TABLE
の失敗を修正しました。(Tom Lane)
table
ADD COLUMN col
serial
CREATE TABLE
CREATE TABLE ... LIKE
コマンドにおいて、COMMENTS
およびSTORAGE
設定の複製サポートを追加しました。(Itagaki Takahiro)
CREATE TABLE ... LIKE
コマンドに全属性コピーの省略形を追加しました。(Itagaki Takahiro)
標準SQLのCREATE TABLE ... OF type
コマンドを追加しました。(Peter Eisentraut)
これにより、既存の複合型に一致するテーブルを作成することができます。 コマンド内で制約やデフォルトを追加で指定することができます。
遅延可能な一意性制約を追加しました。(Dean Rasheed)
これにより、列が一意性インデックスを持つ場合でも主キーと印付けされている場合でもUPDATE tab SET col = col + 1
などの大量更新が確実に動作できるようになります。
制約がDEFERRABLE
であると指定されている場合、各行が更新された後ではなく、文の最後で検査されるようになります。
また制約検査を現在のトランザクションの最後まで遅延させ、複数のSQLコマンドをまたがって更新を行うこともできます。
排他制約を追加しました。(Jeff Davis)
排他制約は等価だけではなく任意の比較演算を許すことにより、一意性制約を汎用化します。
これはCREATE TABLE CONSTRAINT ... EXCLUDE
句により作成されます。
排他制約のもっともよくある使用方法は、単に一致しないではなく、重複を許さない列項目を指定することです。
時間間隔やその他配列などの範囲に対して有用です。
この機能は、多くの予定帳、時間管理、科学アプリケーションにおけるデータ整合性検査を改良します。
失敗の原因となる値を報告する、一意性制約違反エラーメッセージを改良しました。(Itagaki Takahiro)
例えば、一意性制約違反ではKey (x)=(2) already exists
(キー(x)=(2)はすでに存在します)のように報告されます。
新しいGRANT
/REVOKE IN SCHEMA
句を使用してスキーマ全体にまたがった大量な権限変更を行う機能を追加しました。(Petr Jelinek)
オブジェクト権限管理を簡略化すると共に、アプリケーションのデータセキュリティのためにデータベースロールを使用することをより簡単にします。
今後作成されるオブジェクトの権限を制御するためのALTER DEFAULT PRIVILEGES
を追加しました。(Petr Jelinek)
これは複雑なデータベースアプリケーションにおけるオブジェクト権限の割り当てを大きく簡略化します。 テーブル、ビュー、シーケンス、関数に対してデフォルトの権限を設定することができます。 デフォルトはスキーマ単位またはデータベース全体に対して割り当てることができます。
GRANT
/REVOKE
によりラージオブジェクト(BLOB)の権限を制御する機能を追加しました。(KaiGai Kohei)
これまでは、すべてのデータベースユーザは任意のラージオブジェクトを読み取り、変更することができました。 読み取り権限、書き込み権限をラージオブジェクト毎に付与したり取り上げたりできるようになりました。 また、ラージオブジェクトの所有権も追跡されます。
COPY
COPY ... CSV FORCE QUOTE *
を受け付けます。(Itagaki Takahiro)
FORCE QUOTE
句において*
が「すべての列」を表す省略形として使用できるようになりました。
オプションを括弧内で指定する新しいCOPY
構文を追加しました。(Robert Haas、Emmanuel Cecchet)
これにより今後のCOPY
オプションの柔軟性が改良されます。
過去に存在したオプションのためだけに、古い構文もまだサポートされます。
EXPLAIN
EXPLAIN
がXML、JSON、YAML形式で出力することができます。(Robert Haas、Greg Sabino Mullane)
新しい出力形式はマシンによる可読性が簡単になり、EXPLAIN
出力の解析用の新しいツールの開発を補助します。
EXPLAIN ANALYZE
時に問い合わせバッファの活動を報告する、新しいBUFFERS
オプションを追加しました。(Itagaki Takahiro)
これにより個々の問い合わせに対してより良い問い合わせプロファイリングを行うことができます。 log_statement_statsと関連する設定の出力では、バッファ使用量は報告されなくなりました。
EXPLAIN
の出力にハッシュ使用状況に関する情報を追加しました。(Robert Haas)
括弧内でオプションの指定を行うことができる、新しいEXPLAIN
構文を追加しました。(Robert Haas)
これにより将来のEXPLAIN
オプションに対する柔軟性が大きく高まりました。
過去に存在したオプションのためだけに、古い構文もまだサポートされます。
VACUUM
容量を抑えるために行を一行一行移動するのではなく、テーブル全体を書き換え、インデックスを再構築するようにVACUUM FULL
を変更しました。(Itagaki Takahiro、Tom Lane)
これまでの方式では通常低速であり、インデックスの膨張を引き起こしました。
新しい方式ではVACUUM FULL
実行時に一時的により多くのディスク領域を使用することに注意してください。
通常テーブルとインデックスにより占められる領域の2倍程度使用する可能性があります。
オプションを括弧内に指定することができる、新しいVACUUM
構文を追加しました。(Itagaki Takahiro)
これにより将来のVACUUM
オプションに対する柔軟性が大きく高まりました。
過去に存在したオプションのためだけに、古い構文もまだサポートされます。
CREATE INDEX
においてインデックス名を省略した場合、インデックス名が自動的に付与できるようにしました。(Tom Lane)
デフォルトで、複数列に対するインデックスが対象列すべてにちなんだ名前が付けられるようになり、また、式インデックス列はその式にちなんだ名前が付けられるようになりました。
共有システムカタログのインデックス再作成が完全にトランザクションを守るようになり、かつ、クラッシュに対して安全になりました。(Tom Lane)
これまでは共有インデックスに対するインデックス再作成はスタンドアローンモードでのみ許されていました。 またこの操作中のクラッシュによりインデックスは操作前よりも悪化した状態になり得ました。
GiSTにpoint_ops
演算子クラスを追加しました。(Teodor Sigaev)
この機能によりpoint
列に対するGiSTインデックス付けが可能です。
このインデックスはpoint
<@
polygon
(多角形内の点)などのいろいろな種類の問い合わせに使用することができます。
これにより多くのPostGIS問い合わせが高速になるはずです。
GINインデックス生成において赤黒バイナリツリーを使用します。 (Teodor Sigaev)
赤黒ツリーは自身でバランスを保ちます。 これは入力順序がランダムではない場合に起こる低速化を防ぎます。
bytea
値を16進数記法で記述できます。(Peter Eisentraut)
bytea_output
サーバパラメータはbytea
出力において16進数か伝統的な書式のどちらを使用するかを制御します。
libpqのPQescapeByteaConn()
関数は、PostgreSQL 9.0以降のサーバに接続する場合、自動的に16進数書式を使用します。
しかし9.0より前のバージョンのlibpqは新しいサーバからの16進数書式を正しく処理しません。
新しい16進数書式は、バイナリデータを使用するより多くのアプリケーションと直接的な互換性を持つことになり、余計な変換を行うことなく格納、抽出を行うことができるようになります。 また伝統的な書式よりもかなり高速に読み書きすることができます。
extra_float_digitsサーバパラメータを3
に増やすことができます。(Tom Lane)
これまでの最大のextra_float_digits
は2
でした。
float4
値を正確にダンプ/リストアするために3桁が必要な場合があります。
pg_dumpは、3桁を許すサーバからのダンプを行う時に3という設定を使用するようになります。
int2vector
入力に対する入力検査を厳しくしました。(Caleb Welton)
synonym
辞書において接頭辞サポートを追加しました。(Teodor Sigaev)
フィルタ処理辞書を追加しました。(Teodor Sigaev)
フィルタ処理用辞書により、トークンを変更した後に後続の辞書に渡すことができます。
メールアドレストークンにおいてアンダースコアを認めます。(Teodor Sigaev)
URLトークンの解析処理においてより標準互換の規則を使用します。(Tom Lane)
関数呼び出しにおいて、パラメータ名を提供し、それらを関数定義における名前付きパラメータに一致させることができます。(Pavel Stehule)
例えば、関数がa
およびb
というパラメータを取るものと定義されている場合、その関数をfunc(a := 7, b := 12)
やfunc(b := 12, a := 7)
のように呼び出すことができます。
UTF-8サーバ符号化方式で処理する、ロケール固有正規表現をサポートしました。(Tom Lane)
ロケール固有の正規表現機能には、大文字小文字を区別しない一致およびロケール固有の文字クラスが含まれます。 これまでは、これらの機能は(LATIN1など)シングルバイトサーバ符号化方式を使用している場合、ASCII以外の文字でのみ正しく動作していました。 これらはまだ他のUTF-8以外のマルチバイト符号化方式では適切ではありません。
to_char()
において科学技術表記法をサポートしました。
('EEEE'
規定)(Pavel Stehule、Brendan Jurd)
to_char()
がY
、YY
およびYYY
指定においてFM
(字詰めモード)を尊重するようにしました。(Bruce Momjian、Tom Lane)
YYYY
ではすでに尊重されていました。
Windowsにおいて翻訳された数値および貨幣文字を正しい符号化方式で出力するようにto_char()
を修正しました。(Hiroshi Inoue、Itagaki Takahir、Bruce Momjian)
多角形をまたがる「重複」および「含有」演算の計算を正しくしました。(Teodor Sigaev)
多角形の&&
(重複)演算子はこれまで、2つの多角形の外接矩形が重複するかどうかのみを検査していました。
これがより正しく検査するようになりました。
多角形の@>
および<@
(含有する/含有される)演算子はこれまで、多角形の頂点がすべてもう片方に含まれているかどうかを検査していました。
これは一部の非凸多角形で間違って「真」を返す可能性がありました。
多角形のすべての線分がもう片方に含まれているかどうかを検査するようになりました。
集約関数でORDER BY
を使用することができます。(Andrew Gierth)
例えばarray_agg(a ORDER BY b)
がサポートされるようになりました。
これは入力値の順序が重要な集約で有用であり、順序を決定するための非標準的な副問い合わせを使用する必要がなくなります。
複数引数を持つ集約関数がDISTINCT
を使用できるようになりました。(Andrew Gierth)
値を単一の文字列にまとめるstring_agg()
集約関数を追加しました。(Pavel Stehule)
集約遷移関数がSTRICT
と印付けされていない場合、DISTINCT
付きで呼び出される集約関数がNULL値を渡すようになりました。(Andrew Gierth)
例えばagg(DISTINCT x)
はNULLというx
値をagg()
に渡す可能性があります。
これはDISTINCT
指定がない場合の動作との一貫性を高めます。
pg_relation_size()
関数よりもよりユーザ向けのインタフェースを提供するpg_table_size()
およびpg_indexes_size()
を追加しました。(Bernd Helmle)
シーケンスの権限検査のためのhas_sequence_privilege()
を追加しました。(Abhijit Menon-Sen)
information_schemaビューをSQL:2008に従うように更新しました。(Peter Eisentraut)
information_schema
ビューがchar
およびvarchar
列の最大オクテット長を適切に表示するようにしました。(peter Eisentraut)
information_schema
の権限ビューを高速化しました。(Joachim Wieland)
DO
文を使用した匿名コードブロックの実行をサポートしました。(Petr Jelinek、Joshua Tolley、Hannu Valtonen)
これにより一時的な関数の作成と削除を行う必要なく、サーバサイドのコードを実行できるようになりました。 ユーザが関数を定義する権限を持つ、任意の言語でコードを実行することができます。
標準SQL互換の列単位のトリガを実装しました。(Itagaki Takahiro)
例えばUPDATE
のSET
リスト内にあるなど、問い合わせにより指定された列が影響を受けた時にのみ、こうしたトリガは発行されます。
情報スキーマにもこうした情報が表示されるようになりました。
トリガの発行を行うか否かを制御できるように、CREATE TRIGGER
にWHEN
句を追加しました。(Itagaki Takahiro)
トリガの中で同様の検査を常に行うことができますが、外部のWHEN
句で検査を行う方が性能が上がります。
CREATE LANGUAGE
にOR REPLACE
句を追加しました。(Tom Lane)
これはまだ存在しない省略可能な言語をインストールする際に役に立ちます。 また、PL/pgSQLがデフォルトでインストールされるようになったことに部分的に役に立ちます。
デフォルトでPL/pgSQLをインストールします。(Bruce Momjian)
この言語を利用可能とすることに関して、セキュリティや性能を問題とする管理者は、この言語を特定のデータベースから削除することができます。
関数内の問い合わせにおいて識別子と競合するPL/pgSQL変数名が使用される状況の取り扱いを改良しました。(Tom Lane)
デフォルトでは予想外の動作を防ぐために競合があるとエラーになるようになりました。
これはplpgsql.variable_conflict
設定パラメータや関数単位の#variable_conflict
オプションを使用して、変数か問い合わせが提供する列を使用させるように、変更することができます。
どちらの場合でもPL/pgSQLは文法的に有効でないところで変数置換を行わないようになりました。
PL/pgSQLが独自版ではなく主レクサを使用するようにしました。(Tom Lane)
これにより確実に文字列のエスケープ処理など主システムの詳細な振舞いを正確に追従します。 PL/pgSQL内で予約されたとみなされるキーワード群など、ユーザから見える詳細も当然変更されました。
無効なレコード参照に対する不要なエラーを発生させないようにしました。(Tom Lane)
周りの式に達する度ではなく、参照が実際に取り出された時のみにエラーが発生するようになりました。 例えば、多くの方がトリガで以下を行おうとしています。
if TG_OP = 'INSERT' and NEW.col1 = ... then
これは想定通りに動作しなくなりました。
削除された列を持つ行型を扱うPL/pgSQLの機能を改良しました。(Pavel Stehule)
PL/pgSQL関数において入力パラメータを変数に代入することができます。(Steve Prentice)
これまでは、入力パラメータはCONST
と宣言されたものと扱われていました。
このため関数のコードではこれらを変更することができませんでした。
同じ制限を持たせない他のDBMSからの関数移植を容易にするために、この制限は削除されました。
入力パラメータは渡された値で初期化された局所変数のように動作するようになりました。
PL/pgSQLにおいてエラー発生箇所の報告を改良しました。(Tom Lane)
PL/pgSQLのMOVE FORWARD
/BACKWARD
にcount
およびALL
オプションを追加しました。(Pavel Stehule)
PL/pgSQLのWHERE CURRENT OF
でカーソル変数を使用することができます。(Tom Lane)
PL/pgSQLのOPEN cursor FOR EXECUTE
はパラメータを使用できます。(Pavel Stehule、Itagaki Takahiro)
これは新しいUSING
句を用いて実現しました。
次のPL/Perl関数を新規に追加しました。
quote_literal()
、quote_nullable()
、quote_ident()
、encode_bytea()
、decode_bytea()
、looks_like_number()
、encode_array_literal()
、encode_array_constructor()
(Tim Bunce)
PL/Perlの初期化関数を指定する、plperl.on_init
サーバパラメータを追加しました。(Tim Bunce)
またplperl.on_plperl_init
およびplperl.on_plperlu_init
を使用して、それぞれ信頼できる/信頼できない場合に特化した初期化を行うことができます。
PL/PerlにおいてEND
ブロックをサポートします。(Tim Bunce)
現在END
ブロックではデータベースにアクセスすることはできません。
PL/Perlにおいてuse strict
を使用できます。(Tim Bunce)
またPerlのstrict
検査は新しいplperl.use_strict
サーバパラメータで大域的に有効にすることができます。
PL/Perlにおいてrequire
を使用できます。(Tim Bunce)
これは基本的に、そのモジュールがロードされているかどうか確認することを試験します。 ロードされなければエラーとなります。 管理者が初期化パラメータを通して前もってロードしていないモジュールをロードすることはできません。
Perlバージョン5.10以降が使用されている場合、PL/Perlにおいてuse feature
を使用できます。(Tim Bunce)
PL/Perlの戻り値がサーバ符号化方式において有効かどうかを検証します。(Andrew Dunstan)
PL/PythonにUnicodeサポートを追加しました。(Peter Eisentraut)
文字列は必要に応じて、サーバ符号化方式から、サーバ符号化方式へ自動的に変換されます。
PL/Pythonのbytea
サポートを改良しました。(Caleb Welton)
PL/Pythonに渡されるBytea
値は、PostgreSQLのbytea
テキスト書式ではなく、バイナリとして表現されるようになりました。
またPL/Pythonからヌルバイトを含むBytea
値が適切に出力されるようになりました。
PL/Pythonに渡す論理値、整数値、浮動小数点値も改良されました。
PL/Pythonにおいてパラメータおよび戻り値として配列がサポートされるようになりました。(Peter Eisentraut)
SQLドメインとPythonの型との対応付けを改良しました。(Peter Eisentraut)
PL/PythonにPython 3のサポートを追加しました。(Peter Eisentraut)
この新しいサーバサイド言語はplpython3u
と呼ばれます。
これは同じセッションでPython 2サーバサイド言語と一緒に使用することはできません。
PL/Pythonにおけるエラー発生箇所および例外の報告を改良しました。(Peter Eisentraut)
vacuumdb
にバキュームを行わずに解析を行う--analyze-only
オプションを追加しました。(Bruce Momjian)
SQL文字列や識別子と同様にpsqlの変数の値の引用符付け処理とエスケープ処理のサポートを追加しました。(Pavel Stehule、Robert Haas)
例えば、:'var'
はvar
の値を引用符付けしリテラル文字列としてエスケープされます。
一方、:"var"
はその値を引用符付けしSQL識別子としてエスケープされます。
psqlによって読み取られるスクリプトファイル内の先頭のUTF-8で符号化されたUnicodeバイトオーダ印を無視します。(Itagaki Takahiro)
これはクライアント符号化方式がUTF-8の場合に有効です。 これは、大抵はWindowsですが、こうした印の挿入を要求する特定のエディタの互換性を改良します。
--single-transaction
を適切に尊重するようにpsql --file -
を修正しました。(Bruce Momjian)
2つのpsqlのセッションが同時に実行している場合にpsqlのコマンドライン履歴の上書きを防止します。(Tom Lane)
psqlのタブ補完サポートを改良しました。(Itagaki Takahiro)
有効な場合、「quiet」モードか否かに関係なく\timing
出力を表示します。(Peter Eisentraut)
psqlにおける改行を含む列の表示を改良しました。(Roger Leigh)
この動作がデフォルトになりました。
\pset linestyle old-ascii
を使用することで、これまでの書式を利用することができます。
psqlで\pset linestyle unicode
を使用してUnicodeの装飾描画文字を使用できます。(Roger Leigh)
\d
コマンド\d
が指定された親テーブルから継承された子テーブルを表示するようにしました。(Damien Clochard)
\d
では子テーブルの個数のみを表示し、\d+
はすべての子テーブルの名前を表示します。
\d index_name
でインデックス列の定義を表示します。(Khee Chin)
この定義は式インデックスで有用です。
psqlにおいて、\d
ではなく\d+
のみでビューを定義した問い合わせを表示します。(Peter Eisentraut)
常に問い合わせを含めることはあまりにも冗長であると思われました。
pg_dump/pg_restore --clean
が同時にラージオブジェクトを削除するようにしました。(Itagaki Takahiro)
standard_conforming_strings
が有効な場合に適切にラージオブジェクトをダンプするようにpg_dumpを修正しました。(Tom Lane)
これまでのコードでは、アーカイブファイルにダンプしpg_restoreからスクリプト出力を生成する時に失敗しました。
pg_restoreがスクリプト出力を生成する時に16進書式でラージオブジェクトを出力するようになりました。
スクリプトがその後9.0より前のサーバにロードされる場合に互換性に関する問題を引き起こすかもしれません。 これを回避するには代わりにサーバに直接リストアしてください。
pg_dumpは複合型の列に割り当てられたコメントをダンプすることができます。(Taro Minowa (Higepon))
pg_dump --verbose
がテキスト出力モードにおいてpg_dumpとサーバのバージョンを出力するようにしました。(Jim Cox、Tom Lane)
これらはカスタム出力モードではすでに提供されていました。
スイッチと省略可能なファイル名の後にコマンドライン引数が残っていた場合に、pg_restoreが注意するようになりました。(Tom Lane)
これまではこうした引数すべては警告なく無視されました。
ブート時にpostmasterを起動するためにpg_ctlを安全に使用することができます。(Tom Lane)
これまでは、無効なpostmasterロックファイルに基づき、pg_ctl親プロセスが間違ってpostmasterが起動中であると認識することがありました。 その結果データベースを起動させる際に一時的な失敗が起こりました。
pg_ctlに(initdbを呼び出す)データベースの初期化機能を付与しました。(Zdenek Kotala)
新しいlibpq関数、PQconnectdbParams()
およびPQconnectStartParams()
を追加しました。(Guillaume Lelarge)
これらの関数はPQconnectdb()
とPQconnectStart()
と似たものですが、1つの文字列として必要とするすべてのオプションを提供するのではなく、接続オプションのヌル終端の配列を受け付けます。
libpq関数、PQescapeLiteral()
およびPQescapeIdentifier()
を追加しました。(Robert Haas)
これらの関数は適切に引用符付け、およびエスケープされたSQLリテラル文字列および識別子を返します。
PQescapeStringConn()
では必要でしたが、呼び出し元で前もって文字列結果を割り当てておく必要はありません。
ユーザ単位のサービスファイル(.pg_service.conf
)のサポートを追加しました。
これはサイト全体のサービスファイルの前に検査されます。(Peter Eisentraut)
指定されたlibpqサービスが見つからない場合に適切にエラーを報告します。(Peter Eisentraut)
libpqにTCPキープアライブに関する設定を追加しました。(Tollef Fog Heen、Fujii Masao、Robert Haas)
キープアライブに関する設定はTCP接続のサーバ側ではすでにサポートされていました。
代替方法があるプラットフォームでは、libpqにおけるSIGPIPE
をブロックおよびブロック解除するための余計なシステムコールを防止します。(Jeremy Kerr)
.pgpass
が提供するパスワードが失敗した場合、エラーメッセージにそのパスワードの源を記載します。(Bruce Momjian)
クライアント証明書ファイル内で与えられるすべてのSSL証明書をロードします。(Tom Lane)
これは間接的に署名されたSSLクライアント証明書のサポートを改良します。
ecpgにSQLDA(SQL記述子領域)サポートを追加しました。(Boszormenyi Zoltan)
ecpgにDESCRIBE
[OUTPUT
]文を追加しました。(Boszormenyi Zoltan)
現在のトランザクション状態を返すECPGtransactionStatusを追加しました。(Bernd Helmle)
ecpgのinformix互換モードにstring
データ型を追加しました。(Boszormenyi Zoltan)
ecpgでnew
およびold
変数名を制限なく使用できます。(Michael Meskes)
ecpgにおいてfree()
内の変数を使用することができます。(Michael Meskes)
SQL3以外のデータ型に対してecpg_dynamic_type()
がゼロを返すようにしました。(Michael Meskes)
これまではOIDデータ型の否定を返しました。 しかしこれは有効なOID型と混乱を招くことがありました。
64ビットのlong
型をすでに持っていたプラットフォームにおいてlong long
型をサポートします。(Michael Meskes)
ecpg本来のモードにてスコープ外のカーソルサポートを追加しました。(Boszormenyi Zoltan)
これによりDECLARE
でOPEN
を呼び出した時にスコープ範囲外にある変数を使用することができます。
この機能はすでにecpgのInformix互換モードに存在していました。
ecpgにおいて動的なカーソル名が可能です。(Boszormenyi Zoltan)
ecpgは FETCH
およびMOVE
でノイズの単語FROM
とIN
を使用することができます。(Boszormenyi Zoltan)
デフォルトでクライアントスレッドセーフを有効にします。(Bruce Momjian)
スレッドセーフに関するオプションはconfigure
の--disable-thread-safety
により無効にすることができます。
Linuxのout-of-memory killerの制御のサポートを追加しました。(Alex Hunsaker、Tom Lane)
/proc/self/oom_adj
によりLinuxのout-of-memory(OOM)killerを無効にすることができますが、
これはpostmasterに対するOOMによる停止を無効にする際に推奨されるものです。
postmasterの子プロセスに対するOOMによる停止を再度有効にすることが望まれることがあります。
新しいLINUX_OOM_ADJ
コンパイルオプションにより子プロセスに対するkillerを再度有効にすることができます。
world
、install-world
およびinstallcheck-world
というMakefile
のターゲットを追加しました。(Andrew Dunstan)
これらは既存のall
、install
、installcheck
と似ていますが、HTML文書の構築、contrib
の構築及び試験、サーバサイド言語とecpgの試験も行います。
データおよび文書のインストール場所の制御をPGXS Makefileに追加しました。(Mark Cave-Ayland)
1つのHTMLファイルもしくは1つのテキストファイルとしてPostgreSQL文書を構築するMakefileのルールを追加しました。(Peter Eisentraut、Bruce Momjian)
64ビットWindowsでのコンパイルと64ビットモードでの実行サポートを追加しました。(Tsutomu Yamada、Magnus Hagander)
これによりWindows上で大容量の共有メモリをとることができます。
Visual Studio 2008を使用してサーバを構築することをサポートします。(Magnus Hagander)
配布用のtarballに含まれるtarアーカイブファイルとしてではなく、前もって構築された文書をサブディレクトリツリーに配備します。(Peter Eisentraut)
例えば、前もって構築されたHTML文書はdoc/src/sgml/html
に配備されます。
マニュアルページも同様にまとめられます。
サーバのレクサを再入可能にしました。(Tom Lane)
PL/pgSQLによるレクサの使用において必要でした。
メモリ割り当て速度を改良しました。(Tom Lane、Greg Stark)
ユーザ定義の制約トリガがpg_trigger
同様にpg_constraint
内に項目を持つようになりました。(Tom Lane)
この変更のため、pg_constraint
.pgconstrname
が冗長になりましたので、削除されました。
制約の強制用のインデックスの使用をより良く提供するためにpg_constraint
.conindid
およびpg_trigger
.tgconstrindid
システムカタログ列を追加しました。(Tom Lane)
一つのオペレーティングシステムのシグナルを使用して、複数条件でバックエンドと通信できるようにしました。(Fujii Masao)
多くのシグナル条件にあるプラットフォーム固有の制約を持たずに、新しい機能を追加できるようになります。
ソースコード試験の適用範囲を改良し、contrib
、PL/Python、PL/Perlを含むようになりました。(Peter Eisentraut、Andrew Dunstan)
システムテーブルの起動処理用のフラットファイルの使用を削除しました。(Tom Lane、Alvaro Herrera)
これは多くのロールとデータベースを使用する場合の性能を改良し、一部の失敗条件を取り除きます。
「bootstrapped」カタログ用のpg_attribute
の初期内容を自動的に生成します。(John Naylor)
これはこれらのカタログの変更を大きく簡略化します。
execMain.c
の外部にINSERT
/UPDATE
/DELETE
操作処理を分けました。(Marko Tiikkaja)
更新が別のModifyTableノードで実行されるようになりました。 この変更は今後の改良のための基盤として必要とされます。
psqlのSQLヘルプテキストの翻訳機能を簡易化しました。(Peter Eisentraut)
配布用tarball内のすべてファイルパスが100文字未満になるように一部のファイル名を短くしました。(Tom Lane)
一部の伸長プログラムで長いファイル名に関する問題があります。
新しいERRCODE_INVALID_PASSWORD
SQLSTATE
エラーコードを追加しました。(Bruce Momjian)
作者の許可を得て、わずかに残っていた個人的なソースコード内の著作権注記を適切に削除しました。(Bruce Momjian)
個人的な著作権注記は無意味になりましたが、コミュニティはそれに対する問い合わせに時折回答しなければなりませんでした。
PostgreSQLを永続性を持たせないモードで実行させる場合の性能向上に関する節を文書に追加しました。(Bruce Momjian)
依存性検査を正しく動作させ、不要な再構築を防ぐように、HTML文書構築用のMakefile
ルールを再構成しました。(Peter Eisentraut)
マニュアルページを作成する際にDocbook2XではなくDocBook XSLを使用します。(Peter Eisentraut)
これはマニュアルページの構築に必要となるツール群を変更します。
PL/Perlのコード構成を改良しました。(Tim Bunce)
PL/Perlにおけるエラー文脈報告を改良しました。(Alexey Klyukin)
これらの要求が配布用のtarballから構築する場合には適用されないことに注意してください。 構築するために以下のプログラムが使用されたファイルがtarballには含まれているためです。
configureを構築する場合にAutoconf 2.63が必要です。(Peter Eisentraut)
CVSから取り出したソースから構築する場合にFlex 2.5.31以降が必要です。(Tom Lane)
CVSから取り出したソースから構築するためにはPerlバージョン5.8以降が必要です。(John Naylor、Andrew Dunstan)
Bonjourに関してより近代的なAPIを使用します。(Tom Lane)
BonjourのサポートはOS X 10.3以降を必要とするようになりました。 より古いAPIはAppleにより廃止されました。
SuperHアーキテクチャ用のスピンロックサポートが追加されました。(Nobuhiro Iwamatsu)
GCC以外のコンパイラがインライン関数をサポートする場合にそれを使用できるようにしました。(Kurt Harriman)
64ビット整数のデータ型が動作しないプラットフォームのサポートを削除しました。(Tom Lane)
プラットフォームを跨る一貫性を高めるためにLDFLAGS
の使用を再構成しました。(Tom Lane)
LDFLAGS
は実行形式ファイルと共有ライブラリの2つをリンクする場合に使用されるようになりました。
実行形式ファイルをリンクする場合のLDFLAGS_EX
と共有ライブラリをリンクする場合のLDFLAGS_SL
を追加しました。
バックエンドヘッダファイルを安全にC++でインクルードできるようにしました。(Kurt Harriman、Peter Eisentraut)
これらの変更はバックエンドのコードにおいてこれまでC++の使用を困難にしていたキーワードの競合を除去しました。
しかしまだバックエンド関数でC++を使用する場合には多少複雑さが残っています。
適切なところでextern "C" { }
がまだ必要です。
またメモリ管理とエラー処理はまだ解決が困難です。
C関数を集約として呼び出されるかどうかの確認に使用されるAggCheckCallContext()
を追加しました。(Hitoshi Harada)
キャッシュキーの最大数をコードに直接書き込むことを防ぐためにSearchSysCache()
と関連する関数の呼び出し規約を変更しました。(Robert Haas)
現時点では既存の呼び出しもまだ動作しますが、新しい形式に変更しなければ9.1以降で動作しなくなることが想定されます。
第4引数で非NULLを提供するためにはfastgetattr()
およびheap_getattr()
バックエンドマクロの呼び出しが必要です。(Robert Haas)
独自の型解析関数は、渡されるデータの型を決定するためにVacAttrStats
.attr
に依存してはいけません。
これは、背後にある列のデータ型と異なる格納方式のインデックス列上の統計情報を収集できるように変更されました。 解析すべき実際のデータ型を通知する新しいフィールドが存在します。
ColumnRefノードとParamRefノードを処理するためのパーサフックを追加しました。(Tom Lane)
ロード可能なモジュールがユーティリティコマンドを制御できるようにProcessUtilityフックを追加しました。(Itagaki Takahiro)
その場での更新をサポートするcontrib/pg_upgrade
を追加しました。(Bruce Momjian)
これによりPostgreSQLの新しいメジャーリリースに更新する時にデータベースのダンプ/リストア処理の必要性がなくなり、停止時間が桁違いに少なくなります。 これはPostgreSQL 8.3および8.4から9.0への更新をサポートします。
バイナリ更新中にrelfilenodes
リレーションの値の保護サポートを追加しました。(Bruce Momjian)
バイナリ更新中にpg_type
とpg_enum
のOIDの保護サポートを追加しました。(Bruce Momjian)
テーブル空間内のデータファイルをそのPostgreSQLバージョンに特化したサブディレクトリに移します。(Bruce Momjian)
これはバイナリ更新を簡単にします。
contrib/pgbench
にマルチスレッドオプション(-j
)を追加しました。(Itagaki Takahiro)
これにより複数のCPUを使用したpgbench試験ができ、pgbench自体が試験のボトルネックとなる危険が軽減します。
contrib/pgbench
に\shell
および\setshell
メタコマンドを追加しました。(Michael Paquier)
contrib/dict_xsyn
に機能を追加しました。(Sergey Karpov)
新しいオプションはmatchorig
、matchsynonyms
、keepsynonyms
です。
全文検索辞書contrib/unaccent
を追加しました。(Teodor Sigaev)
このフィルタ処理辞書は文字から発音記号を取り除きます。 複数言語に対する全文検索がより簡単になります。
contrib/dblink
にdblink_get_notify()
を追加しました。(Marcus Kempe)
これによりdblinkにおいて非同期通知を行うことができます。
contrib/dblink
の削除された列の取り扱いを改良しました。(Tom Lane)
これはdblink_build_sql_insert()
と関連する関数に影響します。
これらの関数は物理的な列番号ではなく論理的な列番号に従って列を番号付けするようになりました。
contrib/hstore
のデータ長に関する制限を大きく増加しました。
また、hstore
列に対するGROUP BY
およびDISTINCT
操作ができるようにB-treeおよびハッシュ機能を追加しました。(Andrew Gierth)
新しい関数や演算子も追加されました。
これらの改良によりhstore
はPostgreSQLに組み込まれた、すべての機能を持つキー/バリューストアになりました。
パスワード強度に関するサイト固有のポリシーをサポートするcontrib/passwordcheck
を追加しました。(Laurenz Albe)
このモジュールのソースコードはサイト独自のパスワードポリシーに合わせるように変更しなければなりません。
contrib/pg_archivecleanup
ツールを追加しました。(Simon Riggs)
これは、不要になったアーカイブファイルを削除するためのarchive_cleanup_command
サーバパラメータで使用されるために設計されました。
contrib/auto_explain
の出力に問い合わせテキストを追加しました。(Andrew Dunstan)
contrib/pg_stat_statements
にバッファアクセスカウンタを追加しました。(Itagaki Takahiro)
/proc/self/oom_adj
を使用してLinux out-of-memory(OOM) killerを無効にできるようにcontrib/start-scripts/linux
を更新しました。(Alex Hunsaker, Tom Lane)