E.19. リリース8.1

リリース日: 2005-11-08

E.19.1. 概要

このリリースの主な変更点を以下に示します。

共有バッファキャッシュへの同時アクセスの改良(Tom)

共有バッファキャッシュへのアクセスが、特に、マルチCPUシステムにおいて深刻なスケーラビリティ問題であることは分かっていました。 本リリースでは、バッファマネージャ内で行われていたロックの方法を見直し、ロックの競合を軽減し、スケーラビリティを向上しました。 また、バッファマネージャは"clock sweep"置換ポリシーを使用するように変更されました。

インデックススキャンが中間でメモリ内ビットマップを使用することができるようになりました。

過去のリリースでは、テーブル検索の実行において単一インデックスのみを使用することができました。 この機能により、WHERE tab.col1 = 4 and tab.col2 = 9を持つ問い合わせで、col1col2に対する複数列インデックスが存在しない場合、col1に対するインデックスとcol2に対するインデックスがあれば、両方のインデックスを検索し、結果をメモリ内で組み合わせ、col1col2に関する両方の制約に一致する行のみをヒープから取り出すことができるようになります。 これは、問い合わせが構造化されておらず、すべての起こり得るアクセス条件に一致するインデックスを前もって作成できないような状況では、非常に有用です。 必要なランダムアクセスの総数を減少させるため、ビットマップスキャンは単一のインデックスの場合でも有用です。 ビットマップインデックススキャンはテーブル全体で多くの割合を占める部分を取り出す際に効率的です。 この場合、通常のインデックススキャンでは非効率的です。

二相コミットの追加(Heikki Linnakangas, Alvaro, Tom)

二相コミットを使用して、トランザクションを複数のコンピュータで"準備"することができます。 すべてのコンピュータでトランザクションの準備を(失敗することなく)行った後、すべてのトランザクションをコミットすることができます。 準備した後でマシンがクラッシュしたとしても、マシンの再起動後に準備したトランザクションをコミットすることができます。 PREPARE TRANSACTIONおよびCOMMIT/ROLLBACK PREPAREDという新しい構文があります。 また、新しいpg_prepared_xactsシステムビューも追加されました。

ユーザとグループを置き換える、新しいロールシステムの作成(Stephen Frost)

ロールとは、ユーザとグループを組み合わせたものです。 ユーザのようにロールはログイン機能を持つことができますし、グループのようにロールは他のロールをメンバとして持つこともできます。 基本的にロールは、ユーザとグループの区別を取り除きました。 例えば、ロールは以下のことを行うことができます。

  • ログイン機能を有す(省略可能)

  • オブジェクトを所有する

  • データベースオブジェクトに対するアクセス権限を保持する

  • 属している他のロールの権限を継承する

ユーザがあるロールにログインした後、そのユーザはログインロールの能力の他、継承したロールの能力も持つことになります。 また、SET ROLEを使用して、属している他のロールに変わることもできます。 この機能は、標準SQLのロールの概念を汎用化したものです。 またこの変更により、pg_shadowpg_groupは、新しいロール機能の付いたカタログpg_authidpg_auth_membersに置き換わりました。 古いテーブルは、新しいロールテーブルに対する読み取りのみのビューとして再定義されています。

MIN()MAX()におけるインデックスの自動使用 (Tom)

過去のリリースでは、MIN()またはMAX()でインデックスを使用する方法は、問い合わせをSELECT col FROM tab ORDER BY col LIMIT 1に書き換える方法しかありませんでした。 インデックスが自動的に使用されるようになりました。

/contrib/pg_autovacuumを主サーバに移動しました。(Alvaro)

autovacuumをサーバに統合することで、データベースサーバと同期して自動的にautovacuumが起動、停止できるようになりました。 また、postgresql.confでautovacuumの設定を行うことができるようになりました。

SELECT ... FOR SHAREを使用した共有行レベルロックの追加(Alvaro)

PostgreSQLのMVCCロックによりSELECTは書き込みによってブロックされることはありません。 そのため、通常の操作では共有行レベルロックは不要ですが、共有行ロックを必要とするアプリケーションでは共有ロックは有用です。 特に、これにより参照性合成検査で発生するロック要求が減少します。

共有オブジェクト、特にロールへの依存性を追加(Alvaro)

依存性機構の拡張により、データベースオブジェクトを所有するロールが削除されることを防ぎます。 これまでは、所有者の削除により"親のいない"オブジェクトができてしまう可能性がありました。 これは復旧させることができましたが、厄介で好まれないものでした。

テーブルパーティションによる性能向上(Simon)

新しいconstraint_exclusion設定パラメータは、子テーブルに一致する行が存在しないことを制約が示している場合、子テーブルの検索を防ぎます。

これにより、テーブルパーティションの基本的な種類を実現できます。 子テーブルが別々のキー範囲を格納し、これを適切なCHECK制約で強制している場合、オブティマイザは、この制約により子テーブル内に一致することがないことが保証されている時にその子テーブルへのアクセスを飛ばします。

E.19.2. バージョン8.1への移行

全ての以前のリリースからデータの移行を行うためには、pg_dumpを使用したダンプ、リストアが必要です。

8.0リリースでは、8.1でintervalに対するto_char()を削除するとアナウンスしましたが、より優れたAPIの提案がありませんでしたので、to_char(interval)は強化され、サーバに残りました。

以下の非互換性に注意してください。

E.19.3. その他の変更点

PostgreSQL8.1と以前のメジャーリリースとの間でなされた、その他の変更点について詳細を以下に示します。

E.19.3.1. 性能向上

  • GiSTとR-treeインデックスの性能を向上しました。(Neil)

  • ハッシュ結合の自動サイズ変更を含む、オプティマイザの改良を行いました。 (Tom)

  • 様々な所で内部用のAPIを見直しました。

  • WALレコードのCRCを64ビットから32ビットに変更しました。(Tom)

    64ビットのCRCを計算するコストが過大で、信頼性に関する長所は無視できるものであると考えました。

  • WALページに巨大な空のギャップを書き出さないように変更しました。(Tom)

  • SMPマシン、特にOpteronマシンにおけるスピンロック動作を改良しました。(Tom)

  • 連続していないインデックス列を複数列に対するインデックスで試用できるようにしました。(Tom)

    例えば、これによりa,b,c列に対するインデックスをWHERE a = 4 and c = 10といった問い合わせで使用することができます。

  • CREATE TABLE AS/SELECT INTOに対するWALロギングを飛ばします。(Simon)

    CREATE TABLE AS実行中のクラッシュにより復旧中にテーブルが削除されてしまいますので、そのテーブルをロードするためにWALに記録する意味がありません。 (しかし、WALアーカイブが有効な場合はロギングを行います。)

  • GiSTインデックスへの同時アクセスを可能にしました。(Teodor, Oleg)

  • full_page_writes設定パラメータを追加し、WALへページ全体を書き出すかどうか制御できるようになりました。(Bruce)

    破損したデータベースから部分的なディスク書き出しを防ぐために、チェックポイントの後に変更されたディスクページを最初に書き出す時に、PostgreSQLは各データベースディスクページ全体のコピーをWALに書き出します。 このオプションにより、この機能を無効にすることができ、より高速になります。 部分的なページ書き出しが起こることがない、バッテリでバックアップされたディスクキャッシュを持つ場合、これは安全です。

  • wal_sync_methodO_SYNCを使用している場合、利用できるのであればO_DIRECTを使用します。 (Itagaki Takahiro)

    O_DIRECTによりディスクへの書き出しがカーネルキャッシュを介さずに行われます。 そのため、WALへの書き出しが高速になり、性能が向上します。

  • COPY FROMの性能を向上しました。(Alon Goldshuv)

    COPY入力を一文字ずつではなくより巨大なまとまり内に読み込むことで実現しました。

  • COUNT()SUMAVG()STDDEV()VARIANCE()を改良しました。(Neil, Tom)

E.19.3.2. サーバの変更

  • トランザクションID(XID)周回問題を防止しました。(Tom)

    トランザクションカウンタが周回点に近づいた時にサーバは警告を発します。 カウンタが周回点に近づき過ぎている場合、サーバは問い合わせの受付を停止します。 これにより、必要なバキューム処理の実行を行う前にデータが損失されることは確実になくなります。

  • OIDカウンタが周回した後に生じる、既存のシステムオブジェクトとオブジェクトID(OID)が競合する問題を修正しました。

  • VACUUM時にmax_fsm_relationsmax_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設定パラメータを追加し、サーバプリンシパルの一部としてサーバのホスト名を指定できるようになりました。(Todd Kover)

    設定されていない場合、keytab内の一致するサービスプリンシパルが使用されます。 これは本リリースにおける新しいKerberosの検索動作です。

  • log_line_prefixオプションにミリ秒(%m)とリモートホスト(%h)を追加しました。(Ed L.)

  • GiSTインデックスに対するWALロギングを追加しました。(Teodor, Oleg)

    GiSTインデックスはクラッシュに対してもポイントインタイムリカバリに対しても安全になりました。

  • pg_stop_backup()を実行した時に古い*.backupファイルを削除するようにしました。(Bruce)

    これにより、多くの*.backupファイルがpg_xlogに残らないようになります。

  • TCP/IPキープアライブ時間について待機、間隔、個数を制御する設定パラメータを追加しました。(Oliver Jowett)

    これらの値を変更することで、クライアント接続の喪失を素早く検知できるようになります。

  • ユーザ毎およびデータベース毎の接続上限を追加しました。(Petr Jelinek)

    ALTER USERおよびALTER DATABASEを使用して、特定ユーザが同時に接続できる、もしくは特定のデータベースへ同時に接続できる、最大セッション数に制限をかけることができるようになりました。 この制限をゼロにすると、ユーザからの接続またはデータベースへの接続が無効になります。

  • 64ビットマシンにおいて、2ギガバイト以上の共有メモリとバックエンド単位の作業メモリを使用できるようになりました。(Koichi Suzuki)

  • 新しいpg_pltemplateによりダンプファイル内の廃止された手続き言語定義を上書きできるようになりました。(Tom)

E.19.3.3. 問い合わせの変更

  • 一時ビューを追加しました。(Koju Iijima, Neil)

  • 集約関数やGROUP BYを持たないHAVINGを、単一グループを返すように修正しました。(Tom)

    これまでこうした状況では、HAVING句をWHERE句と同様に扱っていました。 これは仕様に従っていませんでした。

  • DELETEにテーブルを追加指定できるようにUSING句を追加しました。(Euler Taveira de Oliveira, Neil)

    以前のリリースでは、DELETE文内で結合に使用するテーブルを追加指定する明確な方法はありませんでした。 UPDATEには、すでにこの目的のためのFROMがあります。

  • バックエンドおよびecpg文字列における\x16進数エスケープのサポートを追加しました。(Bruce)

    これは、標準Cの\xエスケープ構文そのものです。 8進数エスケープはサポート済みです。

  • BETWEEN SYMMETRIC問い合わせ構文を追加しました。(Pavel Stehule)

    この機能によりBETWEEN比較で、1番目の値が2番目より小さいことを必要としなくなりました。 例えば、2 BETWEEN [ASYMMETRIC] 3 AND 1は偽を返しますが、2 BETWEEN SYMMETRIC 3 AND 1は真を返します。 BETWEEN ASYMMETRICはすでにサポート済みです。

  • SELECT ... FOR UPDATE/SHAREのオプションにNOWAITを追加しました。(Hans-Juergen Schoenig)

    statement_timeout設定パラメータにより、一定以上の時間がかかる問い合わせをキャンセルすることができますが、このNOWAITオプションにより、SELECT ... FOR UPDATE/SHAREが即座に行ロックを獲得できなかった時、すぐに問い合わせをキャンセルすることができます。

E.19.3.4. オブジェクト操作の変更

  • 共有オブジェクトの依存関係の追跡(Alvaro)

    PostgreSQLでは、グローバルテーブル(ユーザ、データベース、テーブル空間)の情報を複数のデータベースから参照することができます。 今回の変更でグローバルテーブルに関する依存性情報が追加されました。 従って、例えば、ユーザの所有権をデータベースに跨って確認できますので、他のデータベースで何かを所有しているユーザを削除できないようにすることができます。 データベースに局所的なオブジェクトに関する依存関係の追跡はすでに存在します。

  • オブジェクト所有者が制限付きのALTER OWNERコマンドを実行できるようになりました。(Stephen Frost)

    以前のリリースでは、スーパーユーザのみがオブジェクトの所有権を変更できました。 今では、コマンドを実行したユーザがオブジェクトを所有し、かつ、新しい所有者として作成できる(つまり、そのユーザが新しい所有者のロールのメンバであり、そのロールが新規にオブジェクトを作成する時に必要なCREATE権限を持つ場合)場合、所有権を移すことができます。

  • 一部のオブジェクト型(テーブル、関数、型)に対するALTER object SET SCHEMA機能を追加しました。(Bernd Helmle)

    これによりオブジェクトを異なるスキーマに移すことができるようになります。

  • トリガを無効にするALTER TABLE ENABLE/DISABLE TRIGGERを追加しました。(Satoshi Nagayasu)

E.19.3.5. ユーティリティコマンドの変更

  • 単一のTRUNCATEコマンドで複数のテーブルの消去ができるようになりました。(Alvaro)

    参照整合性検査のため、参照整合性制約の一部となるテーブルを消去することはできません。 この新しい機能を使用することで、参照整合性制約に含まれる両テーブルが単一のTRUNCATEコマンドで消去される場合、TRUNCATEを使用してこうしたテーブルを消去できるようになりました。

  • COPY CSVモードにおける復帰コード、改行コードの処理が適切になりました。(Andrew)

    8.0リリースでは、CSV COPY TOにおける復帰コードと改行コードは一貫性のある方法で処理されていませんでした。 (これはTODOリストに記載されていました。)

  • COPYにて、先頭行にヘッダ行を記載できるようにCOPY WITH CSV HEADERを追加しました。(Andrew)

    これにより、データファイルの先頭行に列名を記載するという一般的なCSVの使用方法を扱うことができます。 COPY TOでは先頭行には列名が記載され、 COPY FROMでは先頭行は無視されます。

  • Windowsにおいて、EXPLAIN ANALYZEの表示を秒以下の精度にしました。 (Magnus)

  • EXPLAIN ANALYZEの表示にトリガ期間を追加しました。 (Tom)

    以前のリリースではトリガの実行時間は総実行時間に含まれていました。 各トリガで費やされる時間がどのくらいかがわかるようになりました。

  • COPYにて、\x16進数エスケープのサポートを追加しました。 (Sergey Ten)

    以前のリリースでは8進数エスケープのみをサポートしていました。

  • SHOW ALLが変数の説明を含むようにしました。 (Matthias Schmidt)

    SHOW varname はまだ変数の値のみを表示し、説明を表示しません。

  • initdbpostgresという新しい標準データベースを作成するようになりました。 このためユーティリティが標準データベースを検索する時にtemplate1ではなくpostgresを使用するように変更されました。(Dave)

    以前のリリースでは、createuserなどのユーティリティのデフォルト接続用、および、新規データベースのテンプレート用として、template1が使用されていました。 テンプレートデータベースにだれかが接続しているために新しいデータベースを作成することができず、CREATE DATABASEの失敗の原因となることがありました。 この変更により、デフォルトの接続データベースがpostgresになりました。 つまり、CREATE DATABASE時にだれかがtemplate1を使用している可能性がかなり減少しました。

  • /contrib/reindexdbをサーバへ移動し、新しくreindexdbコマンドラインユーティリティを作成しました。(Euler Taveira de Oliveira)

E.19.3.6. データ型および関数の変更

  • 配列型に対するMAX()およびMIN()集約を追加しました。(Koju Iijima)

  • CCYY、またはこの両方のフィールドが使用されている場合に合理的な動作を行うようにto_date()およびto_timestamp()を修正しました。(Karel Zak)

    CC が書式指定にあり、YYY以上の長さが年指定にあると、CC を無視します。 年指定の長さがYY以下の場合、CCを直前の世紀であると解釈します。

  • md5(bytea)を追加しました。 (Abhijit Menon-Sen)

    md5(text)はすでに存在していました。

  • power(numeric, numeric)を基にしたnumeric ^ numericのサポートを追加しました。

    関数はすでに存在していましたが、対応する演算子がありませんでした。

  • 計算処理中に適切に商を除去するようにNUMERICの剰余を修正しました。

    以前のリリースでは、巨大な値に対する剰余が商の丸めにより負の値を返すことがありました。

  • lastval()関数を追加しました。(Dennis Björklund)

    lastval()currval()を簡単にしたものです。 これは、現在のセッションで実行されたもっとも最近のnextval()またはsetval()に基づいて自動的に適切なシーケンス名を決定します。

  • to_timestamp(DOUBLE PRECISION)を追加しました。(Michael Glaesemann)

    1970年からのUnix秒をTIMESTAMP WITH TIMEZONEに変換します。

  • pg_postmaster_start_time()関数を追加しました。(Euler Taveira de Oliveira, Matthias Schmidt)

  • AT TIME ZONEで完全なゾーン名を使用できるようになりました。 以前は省略形のみが使用できました。(Magnus)

    以前は、定義済みのタイムゾーン名の一覧のみがAT TIME ZONEでサポートされていました。 現在では、サポート済みのタイムゾーン名すべてを使用することができます。 以下に例を示します。

             SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London';
            

    上の問い合わせでは、タイムゾーンは指定した日付に影響する夏時間規則に従って調整されます。

  • GREATEST()およびLEAST()可変長引数関数を追加しました。(Pavel Stehule)

    これらの関数は可変数の引数を取り、引数の中で最大もしくは最小の値を返します。

  • pg_column_size()を追加しました。 (Mark Kirkwood)

    これは列の格納サイズを返します。圧縮が使用されている場合もあります。

  • regexp_replace()を追加しました。 (Atsushi Ogawa)

    これによりsedのように正規表現による置換を行うことができます。 省略可能なフラグ引数により、全領域の選択(全置換)や大文字小文字の区別モードを指定することができます。

  • intervalの除算、乗算を修正しました。(Bruce)

    以前のバージョンでは、 '4 months'::interval / 5'1 mon -6 days'といった不揃いの結果を返すことがありました。

  • timestamp、time、interval出力における端数処理を修正しました。(Tom)

    上位部分を増加させずに秒部分が60と表示される問題を修正したものです。

  • INTERVALに別途日フィールドを追加し、1日という間隔と24時間という間隔を区別できるようになりました。(Michael Glaesemann)

    夏時間による時間調整を含む日にちは24時間ではなく、よく23時間や25時間となります。 この変更により、"何日間"という時間間隔と"何時間"という時間間隔の間に概念的な違いが生じます。 timestampに1 dayを加えると、その間に夏時間による時間調整があったとしても、同じローカル時間における次の日になるようになりました。 一方で24 hoursを加えると、時間調整があると異なるローカル時間となります。 US DSTの例を以下に示します。

             '2005-04-03 00:00:00-05' + '1 day' = '2005-04-04 00:00:00-04'
             '2005-04-03 00:00:00-05' + '24 hours' = '2005-04-04 01:00:00-04'
            

  • justify_days()およびjustify_hours()を追加しました。 (Michael Glaesemann)

    これらの関数はそれぞれ、日数を適切な月数と日数に、時間数を適切な日数と時間数に調整します。

  • /contrib/dbsizeをバックエンドに移し、一部の関数の名前を変更しました。 (Dave Page, Andreas Pflug)

    • pg_tablespace_size()

    • pg_database_size()

    • pg_relation_size()

    • pg_total_relation_size()

    • pg_size_pretty()

    pg_total_relation_size()にはインデックスとTOASTテーブルが含まれます。

  • クラスタディレクトリへの読み取りのみのファイルアクセス用の関数を追加しました。(Dave Page, Andreas Pflug)

    • pg_stat_file()

    • pg_read_file()

    • pg_ls_dir()

  • 設定ファイルを強制的に再読み込みするpg_reload_conf()を追加しました。(Dave Page, Andreas Pflug)

  • サーバログファイルを強制的にローテートするpg_rotate_logfile()を追加しました。(Dave Page, Andreas Pflug)

  • TOASTテーブルを含めるようにpg_stat_*ビューを変更しました。(Tom)

E.19.3.7. 符号化方式およびロケールの変更

  • より一貫性を高め、かつ、国際的な標準に従うように一部の符号化方式の名前を変更しました。

    • UNICODEUTF8になりました。

    • ALTWIN866になりました。

    • WINWIN1251になりました。

    • TCVNWIN1258になりました。

    以前の名前もまだ使用できます。

  • WIN1252符号化方式のサポートを追加しました。(Roland Volkmann)

  • 4バイトのUTF8文字のサポートを追加しました。(John Hansen)

    これまでは1バイト、2バイトおよび3バイトのUTF8文字がサポートされていました。 これは特に一部の中国語文字セットをサポートするために重要です。

  • EUC_JPSJIS間の直接変換を可能とし、性能を向上しました。(Atsushi Ogawa)

  • WindowsにおいてUTF8符号化方式が動作できるようになりました。(Magnus)

    これはUTF8をWindows独自のUTF16実装に対応付けすることでなされました。

E.19.3.8. サーバサイド言語の一般的な変更

  • ALTER LANGUAGE RENAMEを修正しました。(Sergey Yatskevich)

  • 厳密性、揮発性などの関数特性をALTER FUNCTIONで変更できるようにしました。(Neil)

  • 関数引数の最大数を100まで増加しました。(Tom)

  • SQL関数およびPL/PgSQL関数でOUTおよびINOUTパラメータを使用できるようにしました。(Tom)

    OUTは、関数の戻り値をあらわす別の方法です。 RETURNの代わりに使用して、OUTまたはINOUTで宣言されたパラメータに割り当てて、値を返します。 これにより、特に複数の値を返さなければならない場合、記述がより簡単になる場合があります。 以前のリリースでも関数から複数の値を返すことは可能でしたが、これによりその手続きが非常に簡単になりました (今後のリリースでこの機能は他のサーバサイド言語にも拡張される予定です)。

  • 言語ハンドラ関数をpg_catalogスキーマに移動しました。

    これによりpublicスキーマの削除が簡単にできるようになりました。

  • SPI_getnspname()をSPIに追加しました。(Neil)

E.19.3.9. PL/PgSQLサーバサイド言語の変更

  • PL/PgSQL関数のメモリ管理を全面的に見直しました。(Neil)

    各関数の解析ツリーが異なるメモリコンテキストに保存されるようになりました。 これにより、不要になった時にメモリの回収が簡単にできるようになりました。

  • 実行時ではなく、CREATE FUNCTION時に関数の構文を検査します。(Neil)

    以前は、構文エラーのほとんどが関数を実行した時にのみ報告されていました。

  • OPENにより、EXPLAINSHOWなどのSELECT以外の問い合わせを開くことができるようになりました。(Tom)

  • 関数でRETURN文を実行する必要がなくなりました。(Tom)

    これはOUTおよびINOUT機能の新規追加に伴う副産物です。 関数の戻り値を提供する必要がない場合RETURNを省略することができます。

  • PL/PgSQLのEXECUTE文における省略可能なINTO句サポートを追加しました。(Pavel Stehule, Neil)

  • CREATE TABLE ASROW_COUNTを設定するようにしました。(Tom)

  • 現在の例外に関するSQLSTATEとエラーメッセージを返すSQLSTATESQLERRMを定義しました。(Pavel Stehule, Neil)

    これらの変数は、例外ブロック内でのみ定義されます。

  • RAISE文のパラメータを式とすることが可能になりました。 (Pavel Stehule, Neil)

  • ループのCONTINUE文を追加しました。(Pavel Stehule, Neil)

  • ブロックラベルとループラベルを追加しました。(Pavel Stehule)

E.19.3.10. PL/Perlサーバサイド言語の変更

  • 大規模な結果セットを効率的に返すことが可能になりました。(Abhijit Menon-Sen)

    これにより関数で、結果セット全体をメモリ内に構築することなくreturn_next()が使用できるようになりました。

  • 一度に一行という形で、問い合わせ結果の取り出しが可能になりました。(Abhijit Menon-Sen)

    これにより関数で、結果セット全体をメモリ内に保存することなくspi_query()spi_fetchrow()が使用できるようになりました。

  • サーバの符号化方式がUTF8の場合、PL/Perlは文字列を強制的にUTF8 として扱うようになりました。(David Kamholz)

  • PL/Perlで検証関数を追加しました。(Andrew)

    これにより、構文エラーを実行時ではなく定義時に報告できるようになりました。

  • 関数が配列型を返す場合にPL/PerlがPerlの配列を返すことができるようになりました。(Andrew)

    これは基本的にはPostgreSQL配列をPerl配列に対応付けします。

  • Perlの非致命的警告でNOTICEメッセージを生成できるようになりました。(Andrew)

  • Perlのstrictモードを有効にできるようになりました。(Andrew)

E.19.3.11. psqlの変更

  • トランザクション内の文がトランザクションの残りに影響することなくエラーになることができるように、\set ON_ERROR_ROLLBACKを追加しました。(Greg Sabino Mullane)

    これは、基本的に、すべての文を副トランザクション内で行うことで実装しています。

  • psql変数内で\x16進数文字列のサポートを追加しました。(Bruce)

    8進数エスケープはすでにサポートされていました。

  • troff -ms出力書式のサポートを追加しました。(Roger Leigh)

  • 履歴ファイルの格納場所をHISTFILEで制御可能にしました。 (Andreas Seltenreich)

    これによりデータベースごとに履歴ファイルの格納設定が可能になります。

  • \x (拡張モード)が\d tablenameの結果に影響しないようにしました。(Neil)

  • セッションのログを記録するための-Lオプションをpsqlに追加しました。 (Lorne Sunley)

    オペレーティングシステムの中には簡単にコマンドライン操作をログ記録する機能がないものがありましたので、このオプションが追加されました。

  • \dがインデックスのテーブル空間を表示できるようにしました。(Qingqing Zhou)

  • psqlのヘルプ(\h)が適切なヘルプ情報について最善の推測を行うようになりました。 (Greg Sabino Mullane)

    これによりユーザは単に構文エラーとなった問い合わせの前に\hを付けるだけで、サポートしている構文のヘルプ情報を得ることができるようになりました。 これまでは、\hを使用する前にコマンド名以外の問い合わせテキストを削除しなければなりませんでした。

  • ロケールを考慮した書式で数値を出力できるように\pset numericlocaleを追加しました。(Eugen Nedelcu)

    例えば、Cロケールでは100000100,000.0として、Europeanロケールでは 100.000,0として出力されます。

  • 起動時のバナーでサーバのバージョン番号とpsqlのバージョン番号が異なる場合に両方とも表示するようにしました。(Bruce)

    また、サーバとpsqlとの間でメジャーリリース番号が異なる場合に警告を発します。

E.19.3.12. pg_dumpの変更

  • pg_restore-nおよび--schemaスイッチを追加しました。 (Richard van den Berg)

    これにより指定したスキーマのオブジェクトのみをリストアすることができます。

  • テキストモードでもpg_dumpがラージオブジェクトをダンプできるようになりました。(Tom)

    この変更により、ラージオブジェクトが常にダンプで切るようになりました。 以遠の-bスイッチは何も行いません。

  • pg_dumpが一貫性を持ったラージオブジェクトのスナップショットをダンプできるようになりました。(Tom)

  • ラージオブジェクトのコメントをダンプします。(Tom)

  • pg_dump--encoding を追加しました。 (Magnus Hagander)

    これにょり、サーバの符号化方式と異なる符号化方式でデータベースをダンプできるようになりました。 これは、異なる符号化方式のマシンでダンプを転送する時有用です。

  • 手続き言語のpg_pltemplateに依存します。(Tom)

    手続き言語用の呼び出しハンドラがpg_catalogスキーマ内に存在する場合、pg_dumpはそのハンドラをダンプしません。 代わりに、ロード時に言語の生成パラメータを提供するpg_pltemplateカタログに依存した、単なるCREATE LANGUAGE nameを使用してその言語をダンプします。

E.19.3.13. libpqの変更

  • パスワードファイルのファイル名を指定するPGPASSFILE環境変数を追加しました。(Andrew)

  • lo_create()を追加しました。 これはlo_creat()と同じですが、ラージオブジェクトのOIDを指定することができます。(Tom)

  • libpqmalloc()失敗に関するエラーを一貫性を持ってクライアントアプリケーションに返すようにしました。 (Neil)

E.19.3.14. ソースコードの変更

  • 場所を変更したインストレーションに対して構築をサポートするようにpgxsを修正しました。

  • Intelコンパイラを使用するItaniumプロセッサをサポートするスピンロックを追加しました。 (Vikram Kalsi)

  • Windows用のKerberos 5サポートを追加しました。(Magnus)

  • 中国語版FAQを追加しました。(laser@pgsqldb.com)

  • OS/Xの機能名称変更に合わせ、RendezvousをBonjourに名前を変更しました。(Bruce)

  • Darwinにおけるfsync_writethroughのサポートを追加しました。(Chris Campbell)

  • サーバ、オプティマイザ、ロックシステム内の情報の渡し方を合理化しました。 (Tom)

  • pg_configがMSVCを使用してコンパイルできるようになりました。(Andrew)

    これには、MSVCを使用した DBD::Pgの構築が必要です。

  • Kerberos V4のサポートをやめました。(Magnus)

    Kerberos 4 にはセキュリティ上の欠陥があり、保守もされていません。

  • コードを整理しました。(EnterpriseDBを使用してカバレッジに関する静的解析を行いました。)

  • postgresql.confのドキュメント上のデフォルトを、true/falseではなくon/offに変更しました。(Bruce)

  • pg_configを改良し、より多くの構築時の値を報告できるようにしました。(Tom)

  • Windowsにおいてスレッドセーフなlibpqを構築できるようにしました。(Dave Page)

  • WindowsにおいてIPv6接続が利用できるようになりました。(Andrew)

  • I/Oサブシステムの信頼性に関するサーバ管理用文書を追加しました。(Bruce)

  • 秘匿可能な宣言をgist.hからgist_private.hに移しました。(Neil)

    以前のリリースでは、gist.hには公開GiST API(GiSTインデックス実装者向け)とGiST自体を実装するために使用する秘匿可能な宣言が混在していました。 後者がgist_private.hという別のファイルに移りました。 ほとんどのGiSTインデックス実装には影響がないはずです。

  • GiSTメモリ管理を再作成しました。(Neil)

    GiSTのメソッドが常に短命のメモリコンテキスト内で呼び出されるようになりました。 そのため、palloc()で割り当てられたメモリは自動的に回収されます。 これにより、GiSTインデックス実装ではpfree()を使用して割り当てられたメモリを解放する必要がなくなりました。

E.19.3.15. Contribの変更

  • /contrib/pg_buffercache contribモジュールを追加しました。(Mark Kirkwood)

    これはデバッグや性能の調整を目的としたもので、バッファキャッシュの内容を表示します。

  • 古くなりましたので/contrib/arrayが削除されました。(Tom)

  • /contrib/loモジュールを整理しました。(Tom)

  • /contrib/findoidjoins/src/toolsに移動しました。(Tom)

  • /contrib/cubeから<<>>&<&> 演算子を削除しました。

    これらの演算子が有用ではないからです。

  • /contrib/btree_gistを改良しました。(Janko Richter)

  • /contrib/pgbenchを改良しました。 (Tomoaki Sato, Tatsuo)

    固定のコマンド群だけではなく、ユーザが用意したSQLコマンドスクリプトで試験を行なう機能が追加されました。

  • /contrib/pgcryptoを改良しました。(Marko Kreen)

    • OpenPGP対称キーと公開キー暗号の実装。

      RSAおよびElgamal公開キーアルゴリズムの両方をサポートします。

    • 単体での構築。SHA256/384/512ハッシュ、Fortuna PRNGを含みます。

    • OpenSSLの構築。3DESのサポート。OpenSSL < 0.9.7での内部AESの利用。

    • configureの結果を使用した構築パラメータ(OpenSSL、zlib)の取得。

      Makefileを編集する必要がまったくなくなりました。

    • libmhashおよびlibmcryptサポートの削除。