概要このリリースの主な変更点を以下に示します。共有バッファキャッシュへの同時アクセスの改良(Tom)共有バッファキャッシュへのアクセスが、特に、マルチCPUシステムにおいて深刻なスケーラビリティ問題であることは分かっていました。本リリースでは、バッファマネージャ内で行われていたロックの方法を見直し、ロックの競合を軽減し、スケーラビリティを向上しました。sweep"置換ポリシーを使用するように変更されました。インデックススキャンが中間でメモリ内ビットマップを使用することができるようになりました。過去のリリースでは、テーブル検索の実行において単一インデックスのみを使用することができました。9を持つ問い合わせで、col1とcol2に対する複数列インデックスが存在しない場合、col1に対するインデックスとcol2に対するインデックスがあれば、両方のインデックスを検索し、結果をメモリ内で組み合わせ、col1とcol2に関する両方の制約に一致する行のみをヒープから取り出すことができるようになります。これは、問い合わせが構造化されておらず、すべての起こり得るアクセス条件に一致するインデックスを前もって作成できないような状況では、非常に有用です。必要なランダムアクセスの総数を減少させるため、ビットマップスキャンは単一のインデックスの場合でも有用です。ビットマップインデックススキャンはテーブル全体で多くの割合を占める部分を取り出す際に効率的です。この場合、通常のインデックススキャンでは非効率的です。Tom)二相コミットを使用して、トランザクションを複数のコンピュータで"準備"することができます。すべてのコンピュータでトランザクションの準備を(失敗することなく)行った後、すべてのトランザクションをコミットすることができます。準備した後でマシンがクラッシュしたとしても、マシンの再起動後に準備したトランザクションをコミットすることができます。PREPAREDという新しい構文があります。新しいpg_prepared_xactsシステムビューも追加されました。Frost)ロールとは、ユーザとグループを組み合わせたものです。ユーザのようにロールはログイン機能を持つことができますし、グループのようにロールは他のロールをメンバとして持つこともできます。基本的にロールは、ユーザとグループの区別を取り除きました。ロールは以下のことを行うことができます。ログイン機能を有す(省略可能)オブジェクトを所有するデータベースオブジェクトに対するアクセス権限を保持する属している他のロールの権限を継承するユーザがあるロールにログインした後、そのユーザはログインロールの能力の他、継承したロールの能力も持つことになります。ROLEを使用して、属している他のロールに変わることもできます。この機能は、標準SQLのロールの概念を汎用化したものです。この変更により、pg_shadowとpg_groupは、新しいロール機能の付いたカタログpg_authidとpg_auth_membersに置き換わりました。古いテーブルは、新しいロールテーブルに対する読み取りのみのビューとして再定義されています。1に書き換える方法しかありませんでした。インデックスが自動的に使用されるようになりました。/contrib/pg_autovacuumを主サーバに移動しました。(Alvaro)autovacuumをサーバに統合することで、データベースサーバと同期して自動的にautovacuumが起動、停止できるようになりました。postgresql.confでautovacuumの設定を行うことができるようになりました。SHAREを使用した共有行レベルロックの追加(Alvaro)PostgreSQLのMVCCロックによりSELECTは書き込みによってブロックされることはありません。そのため、通常の操作では共有行レベルロックは不要ですが、共有行ロックを必要とするアプリケーションでは共有ロックは有用です。これにより参照性合成検査で発生するロック要求が減少します。共有オブジェクト、特にロールへの依存性を追加(Alvaro)依存性機構の拡張により、データベースオブジェクトを所有するロールが削除されることを防ぎます。これまでは、所有者の削除により"親のいない"オブジェクトができてしまう可能性がありました。これは復旧させることができましたが、厄介で好まれないものでした。テーブルパーティションによる性能向上(Simon)新しいconstraint_exclusion設定パラメータは、子テーブルに一致する行が存在しないことを制約が示している場合、子テーブルの検索を防ぎます。これにより、テーブルパーティションの基本的な種類を実現できます。子テーブルが別々のキー範囲を格納し、これを適切なCHECK制約で強制している場合、オブティマイザは、この制約により子テーブル内に一致することがないことが保証されている時にその子テーブルへのアクセスを飛ばします。全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ、リストアが必要です。8.0リリースでは、8.1でintervalに対するto_char()を削除するとアナウンスしましたが、より優れたAPIの提案がありませんでしたので、to_char(interval)は強化され、サーバに残りました。以下の非互換性に注意してください。add_missing_fromのデフォルトがfalseになりました(Neil)FROM参照を持たない問い合わせでテーブルが使用された場合、デフォルトでエラーとなるようになりました。過去の動作を使用することができますが、そのためにはこのパラメータを'true'にしなければなりません。ダンプに暗黙的なFROM構文を使用して作成したビューやルールがある場合、既存のダンプファイルをロードするために、add_missing_fromを真に設定しなければならないかもしれません。これに悩まされるのは一回だけのはずです。8.1は、こうしたビューやルールを標準の明示的なFROM構文に変換するためです。したがって、今後のダンプではこの問題は起こりません。float4/float8/oidに長さが0の文字列('')が入力された場合、ゼロとして扱わずエラーとなるようになりました(Neil)この変更により、現行の整数に対する長さが0の文字列の扱いと矛盾がなくなりました。この変更の時期については8.0でアナウンスしていました。OIDSを指定しない限り、ユーザが作成したテーブルはOID列を持たなくなります。すべてのPostgreSQLリリースでOIDは存在していましたが、4バイト長しかなく、インストールされたデータベース全体で共有アクセスされていることから、OIDの利用は制限されてきました。一意に行を識別するには、シーケンスまたはSERIAL型を使用することを勧めます。6.4からサポートされています。E''構文が追加されました。そのため、普通の文字列でバックスラッシュ文字を扱うことができます。(Bruce)現在のPostgreSQLは文字列リテラル内のバックスラッシュを、特別なエスケープシーケンスの始まりとして扱います。これで簡単に特別な値を埋め込むことができますが、非標準であり、他のデータベースからのアプリケーションの移植を困難にしています。このため、PostgreSQLプロジェクトでは、文字列内のバックスラッシュが特別な意味を持たないようにすることを計画しています。後方互換性と、特別なバックスラッシュ処理を使用したいユーザのために、新しい文字列構文を作成しました。この新しい文字列構文は、例えばE'hi\n'のように、E、直後に単一引用符、そして文字列を始めるという形です。このリリースでは文字列内のバックスラッシュの扱いに変更はありませんが、今後のリリースに向けたアプリケーションの移行を補助するために、以下の設定パラメータが追加されました。standard_conforming_strings。このリリースで普通の文字列内のバックスラッシュをそのまま扱うかどうかを指定します。escape_string_warning。普通の文字列(非E)内でバックスラッシュが存在した場合に警告する。standard_conforming_stringsの値は読み取りのみです。アプリケーションでは、この値を読み取ることで、どのようにバックスラッシュが解釈されるかが分かります。(また、このパラメータが存在するかどうかで、E''文字列構文がサポートされているかどうかが分かります。今後のリリースでは、standard_conforming_stringsは真になる予定です。非E文字列でのバックスラッシュは文字そのものとして扱われます。この変更に備えて、バックスラッシュの特別処理が必要な場所にE''を使用し、かつ、E''を使用するように返還しなければならない文字列を更に検出するためにescape_string_warningを有効にしてください。文字列内に単一引用符そのものを埋め込む場合には、PostgreSQLがサポートするバックスラッシュ+単一引用符(\')という構文ではなく、2つの単一引用符('')を使用してください。後者は標準に準拠しており、また、E''文字列構文を使用する必要がありません。バックスラッシュを特別に扱わない、$$文字列構文も使用することができます。DATABASEがデータベース内のすべてのインデックスの再作成を行うようになりました。DATABASEはシステムテーブルのみのインデックスを再作成しました。この新しい動作の方がより直感的です。SYSTEMコマンドが、システムテーブルのみのインデックス再作成という以前の機能を提供します。読みとりのみのラージオブジェクト記述子がMVCCスナップショットセマンティックスに従うようになりました。その記述子から読みとられるデータが、lo_open()を呼び出した問い合わせで使用するトランザクションスナップショットの時点のラージオブジェクトの状態"スナップショット"を反映するようになりました。常に最新のコミットされたデータを返すという以前の動作に戻すには、lo_open()のモードフラグにINV_WRITEを付与して下さい。シーケンス関数の引数に対して、適切な依存性を追加しました。(Tom)以前のリリースでは、nextval()、currval()、setval()に渡されるシーケンス名は、単なるテキスト文字列として保持されていました。DEFAULT句で使用中のシーケンスの名称変更や削除により、DEFAULT句が無効となりました。このリリースでは、すべて新しく作成した、内部用OIDを引数として持つシーケンス関数を保持します。これにより、シーケンス名の変更を追跡できるようになり、また、不適切なシーケンスの削除を防ぐために依存情報も追加されました。これにより、スキーマ名称の変更や検索パスの変更から、こうしたDEFAULT句を保護できるようになりました。アプリケーションの中には、以前の実行時にシーケンス名を検索する動作に依存しているものがあるかもしれません。これは、nextval('myseq'::text)のように、明示的に引数をtextにキャストすることで実現することができます。8.1より前のデータベースダンプを8.1にロードした場合、古いテキストを基とした表現が使用されますので、OIDを引数として保持させる機能は持てません。テキスト版のDEFAULT句を持つデータベースを更新することができます。以下の問い合わせをfixseq.sqlなどという名前のファイルに保存してください。$$val\(\('[^']*'::text\)::regclass$$;次に、調整が必要であることが分かったデータベースに対してこの問い合わせを実行してください。以下ではdb1というデータベースに対して実行しています。TABLEコマンドが表示されます。このコマンドが問題ないことを確認した後に、以下を実行してデータベースを更新してください。db1この手続きを更新すべきデータベースそれぞれに対して繰り返し実行しなければなりません。psqlにおいて、引用符で括られていない\{digit}+という並びを8進数として扱うようになりました。(Bruce)以前のリリースでは、\{digit}+という並びは10進数として扱われ、\0{digit}+のみが8進数として扱われました。この変更は一貫性のために行われました。%および^演算子の接頭辞と接尾辞の文法積を削除しました。(%)の使用を複雑にしていました。多角形用の&<と&>をボックス型の"over"演算子と矛盾がないようにしました。LANGUAGEは、pg_pltemplateの情報によって指定された引数を無視することができます。(Tom)新しいpg_pltemplateシステムカタログが、手続き言語の好みの定義(検証関数をもつかどうかなど)についての情報を保持するために定義されました。LANGUAGEは言語名以外のパラメータをすべて無視し、カタログの情報を使用します。古いダンプファイルからロードされる古い言語定義に伴う問題が増大したため、この方式が取られました。nameとしてダンプします。これがより将来を見込んだ表現になることを期待しています。pg_cancel_backend(int)がintegerではなくbooleanを返すようになりました。(Neil)UTF-8のデータを8.1.Xにロードする場合に問題が起きる可能性があります。以前のバージョンでは無効なUTF-8のバイト列をデータベースに投入することができましたが、今回のリリースでは正しく有効なUTF-8列のみを受付けるようになったことが原因です。dumpfile.sqlを実行することがあります。-cオプションにより無効な文字列が削除されます。この2つのファイルの違いを見ることで、無効な列を表示することができます。iconvは入力ファイル全体をメモリに読み込みますので、この処理のためにダンプを複数の小さなファイルに分割する必要があるかもしれません。その他の変更点PostgreSQL8.1と以前のメジャーリリースとの間でなされた、その他の変更点について詳細を以下に示します。性能向上GiSTとR-treeインデックスの性能を向上しました。(Neil)ハッシュ結合の自動サイズ変更を含む、オプティマイザの改良を行いました。(Tom)様々な所で内部用のAPIを見直しました。WALレコードのCRCを64ビットから32ビットに変更しました。(Tom)64ビットのCRCを計算するコストが過大で、信頼性に関する長所は無視できるものであると考えました。WALページに巨大な空のギャップを書き出さないように変更しました。(Tom)SMPマシン、特にOpteronマシンにおけるスピンロック動作を改良しました。(Tom)連続していないインデックス列を複数列に対するインデックスで試用できるようにしました。10といった問い合わせで使用することができます。INTOに対するWALロギングを飛ばします。AS実行中のクラッシュにより復旧中にテーブルが削除されてしまいますので、そのテーブルをロードするためにWALに記録する意味がありません。(しかし、WALアーカイブが有効な場合はロギングを行います。)GiSTインデックスへの同時アクセスを可能にしました。Oleg)full_page_writes設定パラメータを追加し、WALへページ全体を書き出すかどうか制御できるようになりました。(Bruce)破損したデータベースから部分的なディスク書き出しを防ぐために、チェックポイントの後に変更されたディスクページを最初に書き出す時に、PostgreSQLは各データベースディスクページ全体のコピーをWALに書き出します。このオプションにより、この機能を無効にすることができ、より高速になります。部分的なページ書き出しが起こることがない、バッテリでバックアップされたディスクキャッシュを持つ場合、これは安全です。wal_sync_methodでO_SYNCを使用している場合、利用できるのであればO_DIRECTを使用します。Takahiro)O_DIRECTによりディスクへの書き出しがカーネルキャッシュを介さずに行われます。そのため、WALへの書き出しが高速になり、性能が向上します。FROMの性能を向上しました。Goldshuv)COPY入力を一文字ずつではなくより巨大なまとまり内に読み込むことで実現しました。COUNT()、SUM、AVG()、STDDEV()、VARIANCE()を改良しました。サーバの変更トランザクションID(XID)周回問題を防止しました。(Tom)トランザクションカウンタが周回点に近づいた時にサーバは警告を発します。カウンタが周回点に近づき過ぎている場合、サーバは問い合わせの受付を停止します。これにより、必要なバキューム処理の実行を行う前にデータが損失されることは確実になくなります。OIDカウンタが周回した後に生じる、既存のシステムオブジェクトとオブジェクトID(OID)が競合する問題を修正しました。VACUUM時にmax_fsm_relationsとmax_fsm_pagesを増大させる必要がある場合の警告を追加しました。temp_buffers設定パラメータを追加し、一時テーブルアクセス用のローカルバッファのサイズをユーザが決定できるようになりました。pg_stat_activityにセッションの開始時刻とクライアントIPアドレスを追加しました。(Magnus)ビットマップスキャンのためにpg_statビューを調整しました。(Tom)一部のフィールドの意味が少し変わりました。pg_locksビューを改良しました。(Tom)クライアント側におけるPREPAREおよびEXECUTEのログを記録するようにしました。(Simon)Kerberos名とユーザ名に関する大文字小文字の区別をpostgresql.confで指定できるようにしました。(Magnus)krb_server_hostname設定パラメータを追加し、サーバプリンシパルの一部としてサーバのホスト名を指定できるようになりました。Kover)設定されていない場合、keytab内の一致するサービスプリンシパルが使用されます。これは本リリースにおける新しいKerberosの検索動作です。log_line_prefixオプションにミリ秒(%m)とリモートホスト(%h)を追加しました。L.)GiSTインデックスに対するWALロギングを追加しました。Oleg)GiSTインデックスはクラッシュに対してもポイントインタイムリカバリに対しても安全になりました。pg_stop_backup()を実行した時に古い*.backupファイルを削除するようにしました。(Bruce)これにより、多くの*.backupファイルがpg_xlogに残らないようになります。TCP/IPキープアライブ時間について待機、間隔、個数を制御する設定パラメータを追加しました。Jowett)これらの値を変更することで、クライアント接続の喪失を素早く検知できるようになります。ユーザ毎およびデータベース毎の接続上限を追加しました。DATABASEを使用して、特定ユーザが同時に接続できる、もしくは特定のデータベースへ同時に接続できる、最大セッション数に制限をかけることができるようになりました。この制限をゼロにすると、ユーザからの接続またはデータベースへの接続が無効になります。64ビットマシンにおいて、2ギガバイト以上の共有メモリとバックエンド単位の作業メモリを使用できるようになりました。Suzuki)新しいpg_pltemplateによりダンプファイル内の廃止された手続き言語定義を上書きできるようになりました。一時ビューを追加しました。BYを持たないHAVINGを、単一グループを返すように修正しました。(Tom)これまでこうした状況では、HAVING句をWHERE句と同様に扱っていました。これは仕様に従っていませんでした。DELETEにテーブルを追加指定できるようにUSING句を追加しました。Neil)以前のリリースでは、DELETE文内で結合に使用するテーブルを追加指定する明確な方法はありませんでした。UPDATEには、すでにこの目的のためのFROMがあります。バックエンドおよびecpg文字列における\x16進数エスケープのサポートを追加しました。(Bruce)これは、標準Cの\xエスケープ構文そのものです。8進数エスケープはサポート済みです。SYMMETRIC問い合わせ構文を追加しました。Stehule)この機能によりBETWEEN比較で、1番目の値が2番目より小さいことを必要としなくなりました。ASYMMETRICはすでにサポート済みです。UPDATE/SHAREのオプションにNOWAITを追加しました。UPDATE/SHAREが即座に行ロックを獲得できなかった時、すぐに問い合わせをキャンセルすることができます。共有オブジェクトの依存関係の追跡(Alvaro)PostgreSQLでは、グローバルテーブル(ユーザ、データベース、テーブル空間)の情報を複数のデータベースから参照することができます。今回の変更でグローバルテーブルに関する依存性情報が追加されました。従って、例えば、ユーザの所有権をデータベースに跨って確認できますので、他のデータベースで何かを所有しているユーザを削除できないようにすることができます。データベースに局所的なオブジェクトに関する依存関係の追跡はすでに存在します。OWNERコマンドを実行できるようになりました。Frost)以前のリリースでは、スーパーユーザのみがオブジェクトの所有権を変更できました。今では、コマンドを実行したユーザがオブジェクトを所有し、かつ、新しい所有者として作成できる(つまり、そのユーザが新しい所有者のロールのメンバであり、そのロールが新規にオブジェクトを作成する時に必要なCREATE権限を持つ場合)場合、所有権を移すことができます。SCHEMA機能を追加しました。Helmle)これによりオブジェクトを異なるスキーマに移すことができるようになります。TRIGGERを追加しました。単一のTRUNCATEコマンドで複数のテーブルの消去ができるようになりました。(Alvaro)参照整合性検査のため、参照整合性制約の一部となるテーブルを消去することはできません。この新しい機能を使用することで、参照整合性制約に含まれる両テーブルが単一のTRUNCATEコマンドで消去される場合、TRUNCATEを使用してこうしたテーブルを消去できるようになりました。CSVモードにおける復帰コード、改行コードの処理が適切になりました。TOにおける復帰コードと改行コードは一貫性のある方法で処理されていませんでした。(これはTODOリストに記載されていました。HEADERを追加しました。(Andrew)これにより、データファイルの先頭行に列名を記載するという一般的なCSVの使用方法を扱うことができます。FROMでは先頭行は無視されます。ANALYZEの表示を秒以下の精度にしました。ANALYZEの表示にトリガ期間を追加しました。(Tom)以前のリリースではトリガの実行時間は総実行時間に含まれていました。各トリガで費やされる時間がどのくらいかがわかるようになりました。COPYにて、\x16進数エスケープのサポートを追加しました。Ten)以前のリリースでは8進数エスケープのみをサポートしていました。ALLが変数の説明を含むようにしました。はまだ変数の値のみを表示し、説明を表示しません。initdbがpostgresという新しい標準データベースを作成するようになりました。このためユーティリティが標準データベースを検索する時にtemplate1ではなくpostgresを使用するように変更されました。(Dave)以前のリリースでは、createuserなどのユーティリティのデフォルト接続用、および、新規データベースのテンプレート用として、template1が使用されていました。DATABASEの失敗の原因となることがありました。この変更により、デフォルトの接続データベースがpostgresになりました。DATABASE時にだれかがtemplate1を使用している可能性がかなり減少しました。/contrib/reindexdbをサーバへ移動し、新しくreindexdbコマンドラインユーティリティを作成しました。配列型に対するMAX()およびMIN()集約を追加しました。Iijima)CC、YY、またはこの両方のフィールドが使用されている場合に合理的な動作を行うようにto_date()およびto_timestamp()を修正しました。年指定の長さがYY以下の場合、CCを直前の世紀であると解釈します。md5(bytea)を追加しました。Menon-Sen)md5(text)はすでに存在していました。numericのサポートを追加しました。関数はすでに存在していましたが、対応する演算子がありませんでした。計算処理中に適切に商を除去するようにNUMERICの剰余を修正しました。以前のリリースでは、巨大な値に対する剰余が商の丸めにより負の値を返すことがありました。lastval()関数を追加しました。Björklund)lastval()はcurrval()を簡単にしたものです。これは、現在のセッションで実行されたもっとも最近のnextval()またはsetval()に基づいて自動的に適切なシーケンス名を決定します。PRECISION)を追加しました。TIMEZONEに変換します。pg_postmaster_start_time()関数を追加しました。ZONEで完全なゾーン名を使用できるようになりました。以前は省略形のみが使用できました。ZONEでサポートされていました。現在では、サポート済みのタイムゾーン名すべてを使用することができます。'Europe/London';上の問い合わせでは、タイムゾーンは指定した日付に影響する夏時間規則に従って調整されます。GREATEST()およびLEAST()可変長引数関数を追加しました。Stehule)これらの関数は可変数の引数を取り、引数の中で最大もしくは最小の値を返します。pg_column_size()を追加しました。Kirkwood)これは列の格納サイズを返します。圧縮が使用されている場合もあります。regexp_replace()を追加しました。Ogawa)これによりsedのように正規表現による置換を行うことができます。省略可能なフラグ引数により、全領域の選択(全置換)や大文字小文字の区別モードを指定することができます。intervalの除算、乗算を修正しました。days'といった不揃いの結果を返すことがありました。timestamp、time、interval出力における端数処理を修正しました。(Tom)上位部分を増加させずに秒部分が60と表示される問題を修正したものです。INTERVALに別途日フィールドを追加し、1日という間隔と24時間という間隔を区別できるようになりました。Glaesemann)夏時間による時間調整を含む日にちは24時間ではなく、よく23時間や25時間となります。この変更により、"何日間"という時間間隔と"何時間"という時間間隔の間に概念的な違いが生じます。dayを加えると、その間に夏時間による時間調整があったとしても、同じローカル時間における次の日になるようになりました。hoursを加えると、時間調整があると異なるローカル時間となります。DSTの例を以下に示します。01:00:00-04'justify_days()およびjustify_hours()を追加しました。Glaesemann)これらの関数はそれぞれ、日数を適切な月数と日数に、時間数を適切な日数と時間数に調整します。/contrib/dbsizeをバックエンドに移し、一部の関数の名前を変更しました。Pflug)pg_tablespace_size()pg_database_size()pg_relation_size()pg_total_relation_size()pg_size_pretty()pg_total_relation_size()にはインデックスとTOASTテーブルが含まれます。クラスタディレクトリへの読み取りのみのファイルアクセス用の関数を追加しました。Pflug)pg_stat_file()pg_read_file()pg_ls_dir()設定ファイルを強制的に再読み込みするpg_reload_conf()を追加しました。Pflug)サーバログファイルを強制的にローテートするpg_rotate_logfile()を追加しました。Pflug)TOASTテーブルを含めるようにpg_stat_*ビューを変更しました。符号化方式およびロケールの変更より一貫性を高め、かつ、国際的な標準に従うように一部の符号化方式の名前を変更しました。UTF8になりました。ALTはWIN866になりました。WINはWIN1251になりました。TCVNはWIN1258になりました。以前の名前もまだ使用できます。WIN1252符号化方式のサポートを追加しました。Volkmann)4バイトのUTF8文字のサポートを追加しました。Hansen)これまでは1バイト、2バイトおよび3バイトのUTF8文字がサポートされていました。これは特に一部の中国語文字セットをサポートするために重要です。EUC_JP、SJIS間の直接変換を可能とし、性能を向上しました。Ogawa)WindowsにおいてUTF8符号化方式が動作できるようになりました。(Magnus)これはUTF8をWindows独自のUTF16実装に対応付けすることでなされました。RENAMEを修正しました。FUNCTIONで変更できるようにしました。(Neil)関数引数の最大数を100まで増加しました。(Tom)SQL関数およびPL/PgSQL関数でOUTおよびINOUTパラメータを使用できるようにしました。(Tom)OUTは、関数の戻り値をあらわす別の方法です。RETURNの代わりに使用して、OUTまたはINOUTで宣言されたパラメータに割り当てて、値を返します。これにより、特に複数の値を返さなければならない場合、記述がより簡単になる場合があります。(今後のリリースでこの機能は他のサーバサイド言語にも拡張される予定です)。言語ハンドラ関数をpg_catalogスキーマに移動しました。これによりpublicスキーマの削除が簡単にできるようになりました。SPI_getnspname()をSPIに追加しました。PL/PgSQLサーバサイド言語の変更PL/PgSQL関数のメモリ管理を全面的に見直しました。(Neil)各関数の解析ツリーが異なるメモリコンテキストに保存されるようになりました。これにより、不要になった時にメモリの回収が簡単にできるようになりました。FUNCTION時に関数の構文を検査します。(Neil)以前は、構文エラーのほとんどが関数を実行した時にのみ報告されていました。SHOWなどのSELECT以外の問い合わせを開くことができるようになりました。(Tom)関数でRETURN文を実行する必要がなくなりました。(Tom)これはOUTおよびINOUT機能の新規追加に伴う副産物です。関数の戻り値を提供する必要がない場合RETURNを省略することができます。PL/PgSQLのEXECUTE文における省略可能なINTO句サポートを追加しました。ASがROW_COUNTを設定するようにしました。(Tom)現在の例外に関するSQLSTATEとエラーメッセージを返すSQLSTATEとSQLERRMを定義しました。Neil)これらの変数は、例外ブロック内でのみ定義されます。RAISE文のパラメータを式とすることが可能になりました。Neil)ループのCONTINUE文を追加しました。Neil)ブロックラベルとループラベルを追加しました。大規模な結果セットを効率的に返すことが可能になりました。Menon-Sen)これにより関数で、結果セット全体をメモリ内に構築することなくreturn_next()が使用できるようになりました。一度に一行という形で、問い合わせ結果の取り出しが可能になりました。Menon-Sen)これにより関数で、結果セット全体をメモリ内に保存することなくspi_query()とspi_fetchrow()が使用できるようになりました。して扱うようになりました。Kamholz)PL/Perlで検証関数を追加しました。(Andrew)これにより、構文エラーを実行時ではなく定義時に報告できるようになりました。関数が配列型を返す場合にPL/PerlがPerlの配列を返すことができるようになりました。(Andrew)これは基本的にはPostgreSQL配列をPerl配列に対応付けします。Perlの非致命的警告でNOTICEメッセージを生成できるようになりました。(Andrew)Perlのstrictモードを有効にできるようになりました。ON_ERROR_ROLLBACKを追加しました。Mullane)これは、基本的に、すべての文を副トランザクション内で行うことで実装しています。psql変数内で\x16進数文字列のサポートを追加しました。(Bruce)8進数エスケープはすでにサポートされていました。-ms出力書式のサポートを追加しました。Leigh)履歴ファイルの格納場所をHISTFILEで制御可能にしました。Seltenreich)これによりデータベースごとに履歴ファイルの格納設定が可能になります。tablenameの結果に影響しないようにしました。(Neil)セッションのログを記録するための-Lオプションをpsqlに追加しました。Sunley)オペレーティングシステムの中には簡単にコマンドライン操作をログ記録する機能がないものがありましたので、このオプションが追加されました。\dがインデックスのテーブル空間を表示できるようにしました。Zhou)psqlのヘルプ(\h)が適切なヘルプ情報について最善の推測を行うようになりました。Mullane)これによりユーザは単に構文エラーとなった問い合わせの前に\hを付けるだけで、サポートしている構文のヘルプ情報を得ることができるようになりました。これまでは、\hを使用する前にコマンド名以外の問い合わせテキストを削除しなければなりませんでした。numericlocaleを追加しました。100.000,0として出力されます。起動時のバナーでサーバのバージョン番号とpsqlのバージョン番号が異なる場合に両方とも表示するようにしました。(Bruce)また、サーバとpsqlとの間でメジャーリリース番号が異なる場合に警告を発します。pg_dumpの変更pg_restoreに-nおよび--schemaスイッチを追加しました。Berg)これにより指定したスキーマのオブジェクトのみをリストアすることができます。テキストモードでもpg_dumpがラージオブジェクトをダンプできるようになりました。(Tom)この変更により、ラージオブジェクトが常にダンプで切るようになりました。以遠の-bスイッチは何も行いません。pg_dumpが一貫性を持ったラージオブジェクトのスナップショットをダンプできるようになりました。(Tom)ラージオブジェクトのコメントをダンプします。Hagander)これにより、サーバの符号化方式と異なる符号化方式でデータベースをダンプできるようになりました。これは、異なる符号化方式のマシンでダンプを転送する時有用です。手続き言語のpg_pltemplateに依存します。(Tom)手続き言語用の呼び出しハンドラがpg_catalogスキーマ内に存在する場合、pg_dumpはそのハンドラをダンプしません。nameを使用してその言語をダンプします。libpqの変更パスワードファイルのファイル名を指定するPGPASSFILE環境変数を追加しました。(Andrew)lo_create()を追加しました。これはlo_creat()と同じですが、ラージオブジェクトのOIDを指定することができます。(Tom)libpqがmalloc()失敗に関するエラーを一貫性を持ってクライアントアプリケーションに返すようにしました。場所を変更したインストレーションに対して構築をサポートするようにpgxsを修正しました。Intelコンパイラを使用するItaniumプロセッサをサポートするスピンロックを追加しました。5サポートを追加しました。(Magnus)中国語版FAQを追加しました。(laser@pgsqldb.com)OS/Xの機能名称変更に合わせ、RendezvousをBonjourに名前を変更しました。(Bruce)Darwinにおけるfsync_writethroughのサポートを追加しました。Campbell)サーバ、オプティマイザ、ロックシステム内の情報の渡し方を合理化しました。(Tom)pg_configがMSVCを使用してコンパイルできるようになりました。DBD::Pgの構築が必要です。V4のサポートをやめました。セキュリティ上の欠陥があり、保守もされていません。コードを整理しました。(EnterpriseDBを使用してカバレッジに関する静的解析を行いました。)postgresql.confのドキュメント上のデフォルトを、true/falseではなくon/offに変更しました。(Bruce)pg_configを改良し、より多くの構築時の値を報告できるようにしました。(Tom)Windowsにおいてスレッドセーフなlibpqを構築できるようにしました。Page)WindowsにおいてIPv6接続が利用できるようになりました。(Andrew)I/Oサブシステムの信頼性に関するサーバ管理用文書を追加しました。(Bruce)秘匿可能な宣言をgist.hからgist_private.hに移しました。API(GiSTインデックス実装者向け)とGiST自体を実装するために使用する秘匿可能な宣言が混在していました。後者がgist_private.hという別のファイルに移りました。ほとんどのGiSTインデックス実装には影響がないはずです。GiSTメモリ管理を再作成しました。(Neil)GiSTのメソッドが常に短命のメモリコンテキスト内で呼び出されるようになりました。そのため、palloc()で割り当てられたメモリは自動的に回収されます。これにより、GiSTインデックス実装ではpfree()を使用して割り当てられたメモリを解放する必要がなくなりました。contribモジュールを追加しました。Kirkwood)これはデバッグや性能の調整を目的としたもので、バッファキャッシュの内容を表示します。古くなりましたので/contrib/arrayが削除されました。(Tom)/contrib/loモジュールを整理しました。(Tom)/contrib/findoidjoinsを/src/toolsに移動しました。演算子を削除しました。これらの演算子が有用ではないからです。/contrib/btree_gistを改良しました。Richter)/contrib/pgbenchを改良しました。Tatsuo)固定のコマンド群だけではなく、ユーザが用意したSQLコマンドスクリプトで試験を行なう機能が追加されました。/contrib/pgcryptoを改良しました。Kreen)OpenPGP対称キーと公開キー暗号の実装。RSAおよびElgamal公開キーアルゴリズムの両方をサポートします。