長年の開発の結果PostgreSQLは多くの領域においてその機能が完全なものになりました。)に関しては的を絞った手法を取り、また最近の標準SQLで定義された機能を追加しています。改良された主な点を以下に示します。新しいcontribモジュール:pg_stat_statements、auto_explain、citext、btree_gin上記項目は以下の節で詳細に説明します。バージョン8.4への移行すべての過去のリリースからデータを移行する場合、pg_dumpを使用したダンプ/リストアが必要です。既知の非互換性を以下に示します。一般デフォルトでは64ビット整数型の日付時間型を使用します。Conway)これまでは、configureの--enable-integer-datetimesオプションでこれを選択していました。過去の動作を維持するためには--disable-integer-datetimes付きで構築してください。ipccleanユーティリティコマンドを削除しました。(Bruce)このユーティリティは一部のプラットフォームでしか動作しませんでした。ユーザは代わりに使用するオペレーティングシステムのツールを使用すべきです。サーバの設定ログファイルのサイズを小さくするためlog_min_messagesのデフォルト設定をwarningに変更しました(これまではnoticeでした)。(Tom)max_prepared_transactionsのデフォルト設定をゼロに変更しました(これまでは5でした)。(Tom)LOGメッセージレベルでdebug_print_parse、debug_print_rewrittenおよびdebug_print_planの出力が行われるようにしました。これまではDEBUG1レベルでした。(Tom)debug_pretty_printのデフォルトをonにしました。(Tom)explain_pretty_printパラメータを削除しました(必要がなくなりました)。(Tom)他のログ処理用のオプションと同様に、スーパーユーザのみがlog_temp_filesを設定できるようにしました。Riggs)log_filenameに%エスケープが存在しない場合、エポックタイムスタンプが自動的につかないようにしました。Haas)外部のログローテーションツールで使用できるようにログファイル名を固定化したいユーザが一部にいましたので、この変更がなされました。recovery.confからlog_restartpointsを削除しました。代わりにlog_checkpointsを使用してください。(Simon)krb_realmおよびkrb_server_hostnameを削除しました。これらはpg_hba.conf内で設定されるようになりました。(Magnus)また、後述のようにpg_hba.confには大きな変更点があります。問い合わせTRUNCATEおよびLOCKが指定したテーブルの子テーブルにも適用されるよう変更しました。(Peter)これらのコマンドは子テーブルの処理を抑制できるようにONLYオプションを受け付けるようになりました。これまでの動作が必要な場合このオプションを使用しなければなりません。DISTINCTおよびUNION/INTERSECT/EXCEPTはソートされた出力を常に生成しないようになりました。(Tom)これまでは、こうした種類の問い合わせは常に、ソート・一意性処理(つまりソート後隣接する重複を除去)により重複行を取り除きました。これがハッシュ処理により実装できるようになり、その結果ソートされた出力が生成されなくなりました。BY句を付与することです。短期的な回避方法として、enable_hashaggを無効にすることで過去の動作に戻すことができます。これは性能を大きく劣化させる修正方法です。ONではハッシュ処理を使用しませんので、この動作には変更ありません。子テーブルは親テーブルのCHECK制約を強制的に継承します。Tom)これまではこうした制約を子テーブルで削除することができ、その結果、親テーブルの走査時に制約に反する行が現れることがありました。これは非一貫性、かつ標準SQLに反するものと考えられました。負のLIMITまたは負のOFFSET値を、ゼロとして扱うことなく、許さなくなりました。TABLEを許さなくなりました。(Tom)ロックは即座に解放されますので、こうした操作は無意味です。シーケンスが追加のstart_value列を持つようになりました。RESTARTをサポートします。関数および演算子numeric型の0の累乗がエラーとならずに、0を返すようになりました。numeric型の0の0乗もエラーとならずに、1を返すようになりました。(Bruce)これは、従来のfloat8型における動作と一致します。浮動小数点における単項のマイナスがマイナスゼロを生成できるようになりました。(Tom)変更後の動作はIEEE標準との互換性がより高いものです。エスケープ文字がLIKEパターンの最後の文字であった場合(つまりエスケープすべきものが存在しない場合)、エラーになります。(Tom)これまでは、こうしたエスケープ文字は警告なく無視されました。このためアプリケーションのロジックエラーを隠してしまう可能性がありました。これまでLIKEインデックス比較に使用されていた演算子~=~および~<>~を削除しました。(Tom)パターンインデックスは通常の等価演算子を使用するようになりました。xpath()がその引数を変更することなくlibxmlに渡すようになりました。(Andrew)これは、XML引数が整形済みのXML文書でなければならないことを意味します。これまでのコードではXML断片も許可するようにもくろんでいましたが、うまく動作しませんでした。xmlelement()が要素値と同様に属性値を整形するようになりました(Peter)これまでは、属性値は通常のSQL出力の動作に従って成形されていました。これはXMLの規約に時として合致しません。libxmlを使用する関数向けのメモリ管理を作成し直しました。(Tom)この変更により、PL/Perlや他の追加コードにおけるlibxmlを使用した場合とのいくつかの互換性に関する問題が避けられるはずです。ハッシュ関数用により高速なアルゴリズムを採用しました。Marshall)組み込みのハッシュ関数の多くで、リトルエンディアンマシンとビッグエンディアンマシンとで異なる結果になるようになりました。時間に関する関数および演算子DateStyleがinterval型の出力書式を制御しないようになりました。代わりとなる新しいIntervalStyle変数が存在します。Mayer)timestampおよびintervalの出力における秒の小数部の扱いに関する一貫性を向上しました。Mayer)これにより、小数部の桁が以前と異なる表示になったり、切り捨てではなく四捨五入になったりする可能性があります。to_char()の翻訳された月名、日名がLC_MESSAGESではなくLC_TIMEに依存するようになりました。Oliveira)to_date()およびto_timestamp()が無効な入力に対してより一貫したエラー報告を行うようにしました。Jurd)これまでのバージョンでは、書式文字列に一致しない入力を無視したり、警告なく誤解釈したりすることがよくありました。した状況でエラーとなるようになりました。午前/午後(AM/PM)および紀元(BC/AD)の書式指定に関して大文字小文字の厳密な違いを必要としないようにto_timestamp()を修正しました。Jurd)例えばadという入力値はAD書式文字列に一致するようになりました。8.4とこれまでのメジャーリリースとの間の変更点についての詳細を以下に示します。性能オプティマイザの統計情報計算を改良しました。Tom)特に全文検索演算子に関する推定が大きく改良されました。DISTINCTおよびUNION/INTERSECT/EXCEPTが可能になりました。(Tom)これは、こうした種類の問い合わせが自動的にソートされた出力を生成しなくなったことを意味します。半結合および反結合に関して明確な概念を作成しました。...)句に関するこれまでのとってつけたような扱いを形式化しました。EXISTS句にも拡張しました。EXISTS問い合わせの計画作成が非常に改善されるはずです。一般的には、論理的には同一であるINとEXISTS句が、同程度の性能を持つようになりました。これまではよくINの方が勝っていました。外部結語が背後にある副問い合わせの最適化を改良しました。(Tom)これまでは、副問い合わせまたはビューが外部結合のNULLを持ち得る側にそれが現れる場合や厳密でない式(例えば定数)がその結果リストに含まれる場合、非常によく最適化することができませんでした。Boyer-Moore-Horspool検索を使用することで、text_position()と関連する関数の性能を改良しました。Rowley)これは特に長い検索パターンで有用です。要求があった時にのみファイルに書き込むことにより、統計情報集計ファイルの書き込みによるI/O負荷が低減しました。Pihlak)一括挿入の性能を改良しました。Simon)default_statistics_targetのデフォルト値を10から100に増やしました。Tom)また最大値も1000から10000に増やしました。ALLを含む問い合わせにおいて、デフォルトでconstraint_exclusion検査を行います。(Tom)constraint_exclusionの新しい設定partitionがこの動作を指定するために追加されました。ビットマップインデックス走査においてI/Oの先読みが可能になりました。Stark)先読み量はeffective_io_concurrencyにより制御されます。この機能はカーネルがposix_fadvise()サポートを有する場合のみ利用可能です。FROM句内の単純な集合を返すSQL関数をインライン化しました。Rowell)外側のリレーション内で特に一般的な値が結合キー値となる特別な状況を考慮することにより、複数バッチのハッシュ結合の性能を向上しました。tlist"を抑制することにより複数バッチのハッシュ結合における一時データ量を軽減しました。CONCURRENTLY中のトランザクション内待機状態セッションを待機しないようにしました。(Simon)共有キャッシュの無効化の性能を向上しました。設定pg_settingsが有効な値を表示できるようにするために、多くのpostgresql.conf設定が列挙型の値に変換されます。(Magnus)プランナが取り出すものと仮定するカーソル行数を制御するためのcursor_tuple_fractionパラメータを追加しました。Hell)postgresql.confにおけるカスタム変数クラスの名前にアンダースコアが使用できるようになりました。認証とセキュリティ(安全ではない)crypt認証方式サポートを削除しました。7.2クライアントライブラリで廃止されていました。pg_ident.conf内の正規表現をサポートします。(Magnus)Kerberos/GSSAPIパラメータがpostmasterを再起動させることなく変更できるようになりました。(Magnus)サーバ証明書ファイル内のSSL証明書チェインをサポートします。Gierth)完全な証明書チェインを含めることにより、クライアントは、商用CAを使用する場合によくある、ローカルに保持した中間CAの証明書をすべてに持たせることなく証明書を検証できるようになります。db_user_namespaceを有効にし、MD5認証を組み合わせて使用した場合に、適切なエラーメッセージを報告するようになりました。pg_hba.confすべての認証オプションがname=value構文を使用するように変更しました。(Magnus)これによりldap、pam、ident認証方式において互換性がない変更がなされました。これらの方式を持つpg_hba.confはすべて新しい書式を使う形に書き換えなければなりません。sameuserオプションを削除しました。代わりにこれをユーザマップの指定がない場合のデフォルトの動作としました。(Magnus)すべての外部認証方式においてユーザマップパラメータを許可します。(Magnus)これまではユーザマップはident認証でのみサポートされていました。クライアント証明要求を制御するためのclientcertオプションを追加しました。(Magnus)これまではサーバのデータディレクトリ内のルート証明書の有無により制御されていました。SSL証明書経由のユーザ認証を可能にするcert認証方式を追加しました。(Magnus)これまでのSSL証明書はクライアントが証明書へのアクセスを持つかどうか検証するのみで、ユーザの認証は行いませんでした。krb5、gssapi、sspiのレルムおよびkrb5のホスト設定がpg_hba.conf内で指定できるようになりました。(Magnus)これらはpostgresql.conf内の設定を上書きします。krb5、gssapi、sspi方式向けのinclude_realmパラメータを追加しました。(Magnus)これにより異なるレルムからの同一ユーザがユーザマップを使用する別のデータベースユーザとして認証できるようになります。即座にエラーを報告するために、ロード時にpg_hba.confを完全に解析します。(Magnus)これまでは、ファイル内のほとんどのエラーは、クライアントが接続しようとするまで検知されませんでした。このためエラーのあるファイルによりシステムを使用できないようにしてしまいます。新しい動作では、エラーが再読み込み時に検知されると、おかしなファイルは拒絶され、postmasterは過去の値を用いて継続します。pg_hba.conf内の最初のエラーを検知した後中断するのではなく、すべての解析エラーを表示します。Deckelmann)SolarisにおいてUnixドメインソケット経由でのident認証をサポートします。継続的なアーカイブ処理チェックポイントをできる限り早い終了を強制するためのオプションをpg_start_backup()に提供します。(Tom)デフォルトの動作では過度なI/O消費を抑えますが、同時実行の問い合わせ活動がなければ意味がありません。変更されたWALファイルがアーカイブされるまでpg_stop_backup()を待機させます。(Simon)これはpg_stop_backup()完了時にバックアップが有効になったことを保証します。アーカイブが有効な場合、すべてのトランザクションを即座にアーカイブすることができるように、シャットダウン時に最終WALセグメントをローテートします。Heikki)継続的なアーカイブ処理のベースバックアップが実行している間、"smart"シャットダウンを遅延します。Albe)"fast"シャットダウンが要求された場合は継続的なアーカイブ処理のベースバックアップをキャンセルします。Albe)recovery.confの論理型の変数がpostgresql.confの論理型変数と同じ範囲の文字列を取ることができるようになりました。監視PostgreSQL設定ファイルが最後に読み込まれた日時を報告するpg_conf_load_time()を追加しました。Gensure)安全にバックエンドを停止させるpg_terminate_backend()を追加しました(SIGTERMシグナルも動作します)。Bruce)常に単一バックエンドに対してSIGTERMを行うことは可能でしたが、これまでは未サポートとされていました。この状況を試験したところいくつか不具合があり、それらを修正しました。ユーザ定義関数呼び出し数と実行時間を追跡する機能を追加しました。Pihlak)関数統計情報は新しいシステムビューpg_stat_user_functionsに出力されます。追跡は新しいパラメータtrack_functionsにより制御されます。pg_stat_activity内の最大問い合わせ文字列サイズの指定がtrack_activity_query_sizeパラメータでできるようになりました。Lee)性能改善を目的として、syslogに送信する最大行数を増やしました。(Tom)読み取りのみの設定変数segment_size、wal_block_size、wal_segment_sizeを追加しました。Helmle)デッドロックの報告時に、サーバログにデッドロックに関わるすべての問い合わせテキストを記録します。Takahiro)特定のプロセスIDに関する情報を返すpg_stat_get_activity(pid)関数を追加しました。(Magnus)サーバの統計情報ファイルの場所をstats_temp_directory経由で指定できるようにしました。(Magnus)これにより統計情報ファイルをRAM上のディレクトリに格納させて、I/O要求を低減させることができます。再起動に渡って保持できるように、起動時または終了時にファイルは通常の場所($PGDATA/global/)にコピーされます。問い合わせWINDOW関数のサポートを追加しました。Harada)WITH句(CTE)のサポートを追加しました。RECURSIVEが含まれます。Tom)TABLEコマンドを追加しました。tablenameの標準SQLにおける省略形です。SELECT(またはRETURNING)の列出力ラベルを指定する時ASを省略可能にしました。Saito)これは列ラベルがPostgreSQLキーワードではない場合のみ動作します。その他の場合はASはまだ必要です。SELECT結果リスト内において集合を返す関数を、タプルストアを介して結果を返す関数であったとしてもサポートします。(Tom)具体的には、これはPL/pgSQLや他のPL言語で作成された関数をこの方法で呼び出すことができるようになったことを意味します。集約問い合わせやグループ化問い合わせの出力において集合を返す関数をサポートします。UPDATE/SHAREが継承ツリー上に動作できるようになりました。(Tom)SQL/MED用の基盤を追加しました。Peter)リモートまたは外部SQL/MED機能はまだありません。この変更は、dblinkやplproxyのようなモジュール向けの接続情報の管理のための標準化と陳腐化されないシステムを提供します。クラスが変更された時にキャッシュされた計画を無効化します。Tom)これは、DDLの変更にその場で応答するシステム機能を改良します。複合型の比較を可能とし、かつ、匿名複合型の配列を可能としました。1.0)])のような式が可能になります。これは特に再帰問い合わせで有用です。Uniode文字列リテラルと、たとえばU&'d\0061t\+000061'といったコードポイントを使用した識別子指定のサポートを追加しました。(Peter)文字列リテラルおよびCOPYデータ内の\000を拒絶します。(Tom)これまでは、これは受け付けられましたが、文字列定数の終端という作用がありました。エラー位置を報告するパーサ機能を改良しました。(Tom)エラー位置がデータ型の不一致などの多くの意味的なエラーに対して報告されるようになりました。これまでは位置づけすることができませんでした。TRUNCATEトリガをサポートします。IDENTITYオプションを追加しました。WITHで変更できます。tab1が成功するようになりました。(Bruce)独立したTRUNCATE権限を追加しました。VERBOSEが計画ノード毎に出力列を表示するようにしました。VERBOSEでは問い合わせ計画の内部表現を出力しました。(この動作はdebug_print_planを介して利用できるようになりました。)EXPLAINが個々のテーブルの副計画と初期計画とを識別するようにしました。(Tom)EXPLAINがdebug_print_planを順守するようにしました。ASに対するEXPLAINが可能です。LIMIT/OFFSETLIMITおよびOFFSET内の副問い合わせが可能です。(Tom)LIMIT/OFFSET機能に標準SQL構文を追加しました。列レベル権限のサポートを追加しました。Kohei)CASCADEの必要性を軽減させるために複数オブジェクトのDROP操作を再作成しました。BがCASCADEオプションを必要としないようになりました。オブジェクトの依存関係を削除を開始する前にロックを確実に取得することにより、同時実行のDROPコマンドに関する各種問題を修正しました。(Tom)DROPコマンド中の依存関係の報告を改良しました。DATA句を追加しました。Tom)ユーザ定義のI/O変換キャストのサポートを追加しました。AGGREGATEがinternal遷移データ型を使用できるようにしました。TYPEにLIKE句を追加しました。(Tom)これにより既存の型と同じ内部表現を使用するデータ型の作成が簡易になりました。ユーザ定義の基本型に対する型カテゴリと"好ましい"状態指定を可能としました。(Tom)これにより、ユーザ定義型の強制動作についてより多くの制御が可能になります。VIEWがビューの最後に列を追加できるようにしました。RENAMEを追加しました。(パラメータなし)を追加しました。TABLEの構文を変更しました。(Tom)この変更により以下の新しい構文を使用することができます。TABLEと記述する必要があり、混乱を招きました。TYPE構文サポートを追加しました。(Peter)これはすでにサポートされていた機能に関する標準SQLの構文です。OIDSがテーブルを書き換えるようにしました。OIDSを追加しました。DATABASEが失敗した場合の報告を改良しました。(Tom)LC_COLLATEおよびLC_CTYPEをデータベース単位の設定にしました。Heikki)これはこれまでデータベース単位の設定であった照合順を符号化方式に似せました。(LC_COLLATE)、文字クラス(LC_CTYPE)が一致するかどうかの検査を改良しました。Tom)新しいデータベースの符号化方式とロケール設定がtemplate0からコピーした場合のみ変更できることに特に注意してください。これは設定が一致しないデータを複製する可能性を防止します。TABLESPACEを追加しました。ユーティリティ操作CLUSTERコマンドとclusterdbにVERBOSEオプションを追加しました。Cox)待機中のトリガイベントの記録に必要なメモリを減らしました。インデックスハッシュインデックスの構築速度とアクセス速度を大幅に改良しました。Bhargava)これによりハッシュインデックスがB-Treeインデックスより高速になる場合もあり得ます。ハッシュインデックスはまだクラッシュに対して安全ではありません。ハッシュインデックスがインデックス対象の列の完全な値ではなく、ハッシュコードのみを保管するようにしました。Meng)これによりインデックス対象の列が長い場合ハッシュインデックスのサイズが大きく減少し、性能が向上しました。GINインデックスにおける高速更新オプションを実装しました。Oleg)このオプションは大きく更新速度を向上しますが、検索速度に小さな影響が現れます。xxx_pattern_opsインデックスがLIKEだけではなく、単純な等価演算子でも使用できるようになりました。全文検索GIN重みづけ検索を全文検索インデックスに対して行う際、@@@を使用する必要性をなくしました。Teodor)通常の@@テキスト検索演算子を代わりに使用することができます。@@テキスト検索操作用のオプティマイザの選択性関数を追加しました。Urbanski)全文検索において前方一致が可能になりました。Bartunov)複数列に対するGINインデックスをサポートします。Sigaev)ネパール語とヒンディーアルファベットのサポートを改良しました。VACUUM独立したリレーション単位の"フォーク"ファイル内で空き領域を追跡します。(Heikki)VACUUMで見つかった空き領域は、固定長の共有メモリ領域ではなく*_fsmファイルに記録されるようになりました。max_fsm_pagesとmax_fsm_relations設定は削除され、空き領域管理の管理作業を大きく簡易化しました。バキューム処理を必要としないページを追跡する可視性マップを追加しました。(Heikki)これにより、テーブルのごく一部のみがバキューム処理を必要とする場合に、VACUUMがテーブルすべてを走査することを防ぐことができます。可視性マップはリレーション単位の"フォーク"ファイル内に保管されます。VACUUMが可視性マップを無視し、そしてタプルを凍結するためにテーブル全体に対して行われなければならないタイミングを制御するvacuum_freeze_table_ageパラメータを追加しました。(Heikki)トランザクションスナップショットをより入念に追跡します。(Alvaro)これは、長期のトランザクションが存在する領域を回収する、VACUUM能力を向上します。TABLE内でTOASTパラメータを指定する機能を追加しました。Oliveira)自動バキュームオプションはシステムテーブル内に保管するために使用されます。vacuumdbに--freezeオプションを追加しました。CaseSensitiveオプションを追加しました。(Simon)NUMERIC除算の精度を改良しました。(Tom)int2にint8を使用した基本算術演算子を追加しました。(Tom)これは、一部の状況における明示的なキャストの必要性を除去します。UUIDの入力にて4桁ごとに省略可能なハイフンが受け付けられるようになりました。Haas)論理データ型の入力としてon/offを可能としました。Takahiro)numeric型の入力文字列においてNaNの前後の空白を許可します。BCや000、0000という年を拒絶します。BCとして解釈されました。00という年はまだ2000年であると仮定されます。)デフォルトの既知の時間帯省略形リストにSGT(シンガポール時間)を含めました。(Tom)date型の値としてinfinityおよび-infinityをサポートします。(Tom)intervalリテラルの解析をより標準に近づけました。YEARは想定通りになりました。標準SQLに従うために、intervalの秒の端数に関する精度をsecondキーワードの後に指定できるようにしました。(Tom)これまでは、この精度はintervalキーワードの後に指定する必要がありました。(後方互換性のためこの構文はまだサポートされますが、廃止予定です。データ型の定義は標準の書式を使用して出力されるようになりました。interval構文をサポートします。'P1Y2M3DT4H5M6.7S'がサポートされるようになりました。interval値の出力方法を制御するIntervalStyleパラメータを追加しました。Mayer)有効な値は、postgres、postgres_verbose、sql_standard、iso_8601です。この設定はまた、一部のフィールドのみが正または負の指定を持つ場合の、負のintervalの取り扱い方法を制御します。timestampおよびinterval出力における秒の端数の取扱いの一貫性を改良しました。配列ARRAY[...]::integer[]などARRAY[]式に適用されるキャストの扱いを改良しました。Jurd)これまでのPostgreSQLは、その後に続くキャストを参照することなく、ARRAY[]式のデータ型を決定しようと試みました。これは多くの場合、特にARRAY[]式が空またはNULLなどの曖昧な項目しか含まないような場合で不要に失敗することがあり得ました。配列要素が必要とする型を決定する時にキャストが考慮されるようになりました。標準SQLに一致させるため、ARRAY次元のSQL構文を省略可能にしました。(Peter)配列次元数を返すarray_ndims()を追加しました。array_length()を追加しました。Eisentraut)すべての集約した値を単一の配列として返すarray_agg()集約関数を追加しました。Peter)配列を個々の行値に変換するunnest()を追加しました。(Tom)これはarray_agg()の反対です。初期値を持つ配列を作成するarray_fill()を追加しました。Stehule)配列の添え字範囲を簡単に生成するgenerate_subscripts()を追加しました。大規模値の格納(TOAST)値に対するTOAST圧縮は32バイト程度とみなします(これまでは256バイト)。Stark)TOAST圧縮を使用する前に空き領域が最低25%必要です。(これまでは小規模値では20%、大規模値ではその規模程度が必要でした。)(Greg)TOAST可能なフィールドが大規模フィールドと小規模フィールドとが混在する行に対して、大規模値を優先して行外に押し出し、小規模な値を不要に圧縮することを防ぐことができるように、TOASTの発見的処理過程を改良しました。関数setseed()が-1から1までの値(0から1ではありません)を受け付けられることを文書化し、そしてその有効範囲を強制するようにしました。oid)サーバサイド関数を追加しました。(Tatsuo)quote_nullable()を追加しました。この動作はquote_literal()と似ていますが、引数NULLに対して文字列NULLを返します。Jurd)複数のテキスト断片を抽出できるように全文検索headline()関数を改良しました。Sinha)データの変更がない更新に対するオーバーヘッドを防止するためのsuppress_redundant_updates_trigger()トリガ関数を追加しました。numeric)を追加しました。(Tom)generate_series()のtimestamp版とtimestamptz版を追加しました。問い合わせを知る必要がある関数による使用を目的としたcurrent_query()を実装しました。Doran)パーサのキーワードのリストを返すpg_get_keywords()を追加しました。Page)関数定義を見るためのpg_get_functiondef()を追加しました。Menon-Sen)変数を含まない式のデパース時にpg_get_expr()2番目の引数をゼロにすることができます。pg_relation_size()がregclassを使用するように変更しました。(Heikki)pg_relation_size(data_type_name)は動作しなくなりました。pg_settingsの出力にboot_val列とreset_val列を追加しました。Smith)設定ファイル内の変数集合のために、pg_settingsの出力にソースファイル名と行番号列を追加しました。Alvaro)セキュリティ上の理由により、これらの列はスーパーユーザのみが参照することができます。SCHEMAのサポートを追加しました。(Peter)これらは既存の機能に対して標準SQL構文を提供します。任意の値のデータ型を返すpg_typeof()を追加しました。Jurd)version()は、サーバが32ビットバイナリか64ビットバイナリかについての情報を返すようにしました。(Bruce)情報スキーマの列is_insertable_intoとis_updatableが一貫性を持つ動作をするよう修正しました。(Peter)情報スキーマのdatetime_precision列の動作を改良しました。(Peter)これらの列はdate列ではゼロを、time、timestamp、精度宣言がないintervalでは6(デフォルト精度)を表示するようになりました。これまではNULLを表示していました。残りの集合を返す組み込み関数がOUTパラメータを使用するように変換しました。Casanova)これにより次の関数を列リストの指定を行わずに呼び出すことができるようになります。pg_show_all_settings()、pg_lock_status()、pg_prepared_xact()、pg_prepared_statement()、pg_cursor()pg_*_is_visible()およびhas_*_privilege()関数が無効なOIDに対して、エラーとならずにNULLを返すようにしました。(Tom)1度の呼び出しで複数の権限の論理和を調査できるようにhas_*_privilege()関数を拡張しました。Tom)has_column_privilege()およびhas_any_column_privilege()関数を追加しました。関数(引数の数が変動する関数)をサポートします。Stehule)終端までの引数のみを省略可能とすることができます。これらはすべて同じデータ型でなければなりません。関数引数のデフォルト値をサポートします。TABLE句を追加しました。RETURNING句の出力を返すことができます。USINGをサポートします。Stehule)FORループを使用するカーソルの結果全体を繰り返すことが可能になりました。EXECUTEをサポートします。Stehule)RAISEコマンドを改良しました。Stehule)DETAILおよびHINTフィールドをサポートします。SQLSTATEエラーコードの指定をサポートします。例外名パラメータをサポートします。そこで起こったエラーを再発行できるように例外ブロックにおいてパラメータ無しのRAISEを可能としました。EXCEPTIONリスト内でSQLSTATEコードの指定を可能としました。Stehule)これは独自のSQLSTATEコードを扱う際に有用です。CASE文をサポートします。ROW_COUNT変数を設定するようにしました。ROW_COUNT変数を設定するようにしました。Gierth)ラベル無しのEXITが常にもっとも内側のループを抜けるようにしました。(Tom)これまでは、他のループよりも入れ子に最も近いBEGINブロックが存在すると、そのブロックが代わりに終了します。新しい動作はOracle(TM)と一致するもので、かつ、これまで文書で説明していたものです。文字列リテラルと入れ子状ブロックのコメントの処理が主SQLパーサの処理と一致するようにしました。(Tom)具体的には、RAISE内の書式文字列が、standard_conforming_stringsに従うようになることを含め、他の文字列リテラルと同じように動作するようになりました。この変更は、standard_conforming_stringsが有効な場合に有効なコマンドが失敗するといった他の問題も修正します。入れ子状の例外ブロックの深さが異なる場所で、同一関数が呼び出された時のメモリリークを防止します。restartがコマンドライン引数を保持するよう修正しました。(Bruce)-W/--passwordオプションを持つすべてのユーティリティにおいて、パスワードプロンプト表示を防止する-w/--no-passwordオプションを追加しました。(Peter)createdb、createuser、dropdb、dropuserの-q(メッセージ無し)オプションを削除しました。8.3から効果がないものでした。psql起動時の冗長なバナーを除去しました。helpを勧めるだけのものになりました。Drake)helpが一般的なバックスラッシュコマンドを表示するようにしました。wrappedモードを追加しました。Nesbitt)\pset内でonおよびoffだけでなく、サポートされるすべての論理型の値の綴りが利用できるようにしました。(Bruce)これまでは、"off"以外の文字列は警告なくtrueを意味するものと解釈されていました。psqlは認識できない綴りについて警告を出すようになりました(ただしまだtrueと解釈されます)。幅が広い出力の際にページャを使用します。(Bruce)一文字のバックスラッシュコマンドと最初の引数との間に空白を要求します。Helmle)これにより歴史的なあいまいさの根源がなくなりました。スキーマ修飾および引用符付きの識別子に対するタブ補間サポートを改良しました。Mullane)\timingに省略可能なon/off引数を追加しました。Fetter)複数行に渡ってアクセス制御権限を表示します。Scherbaum)\lがデータベースアクセス権限を表示するようにしました。Gilligan)権限がある場合\l+がデータベース容量を表示するようにしました。Gilligan)関数定義を編集するための\efコマンドを追加しました。\d*コマンドS修飾子が指定された場合のみ、パターン引数を持たない\d*コマンドがシステムオブジェクトを表示するようにしました。Bruce)これまでの動作では\dの亜種の間での一貫性がありませんでした。ほとんどの場合ユーザオブジェクトのみを参照する簡単な方法がありませんでした。現行バージョンのサーバだけではなく、古めの(7.4までの)バージョンのPostgreSQLサーバで\d*コマンドが動作するように改良しました。Lelarge)\dが対象テーブルを参照する外部キー制約を表示するようにしました。D'Souza)シーケンスに対する\dがその列値を表示するようにしました。Oliveira)\d+の表示に列の格納種類や関連するその他のオプションを追加しました。Oliveira)\dt+出力にリレーション容量を表示します。Guedes)\dT+においてenum型で取り得る値を表示します。Fetter)キャスト内に存在するデータ型に一致するワイルドカードパターンを、\dCが受け付けることを可能としました。(Tom)\dfの出力に関数種類列を追加しました。選択した種類の関数のみを列挙するオプションを追加しました。Fetter)\dfがcstring型を取る、または、返す関数を隠さないようにしました。(Tom)これまでは、そのほとんどが興味を引くとは思われないデータ型のI/O関数であったため、こうした関数は隠れていました。デフォルトのシステム関数の隠ぺいに関する新しいポリシーではこの欠点を不要にします。pg_dumpダンプをテーブル空間の構造が異なるクラスタにリストアできるように、pg_dump/pg_dumpall/pg_restoreに--no-tablespacesオプションを追加しました。Roy)pg_dumpとpg_dumpallから-dおよび-Dオプションを削除しました。(Tom)これらのオプションは、他のPostgreSQLクライアントアプリケーションにおけるデータベース名を選択するためのオプションと、あまりに頻繁に混乱されていました。この機能はまだ利用可能ですが、長めのオプション名--insertsまたは--column-insertsと記述する必要があります。pg_dumpとpg_dumpallから-iおよび--ignore-versionオプションを削除しました。(Tom)このオプションを使用してもエラーにはなりませんが、何も効果はありません。安全のためバージョン検査が必須となりましたので、このオプションは削除されました。ダンプまたはリストア中のstatement_timeoutを無効にしました。Drake)pg_dump/pg_dumpallに--lock-wait-timeoutオプションを追加しました。Gould)これにより、指定期間中に共有ロックを獲得できなかった場合に、ダンプが失敗できるようになりました。--data-onlyの出力順序を変更します。(Tom)これにより、外部キーがすでに存在する時にデータロードができるようになりました。巡回参照により安全な順序付けができない場合、NOTICEが発行されます。pg_dump、pg_dumpall、pg_restoreが指定したロールを使用することができるようになりました。Laszlo)pg_restoreがリストアするために複数の同時接続を使用できるようになりました。(Andrew)同時接続数は--jobsオプションにより制御されます。これは独自書式のアーカイブでのみサポートされます。libpq新しいlo_import_with_oid()関数を使用して、ラージオブジェクトのインポートの際にOIDを指定できるようになりました。(Tatsuo)"イベント"サポートを追加しました。Moncure)これは、PGconnおよびPGresultオブジェクトに関連付けされた非公開データを管理するためのコールバックを登録する機能を追加したものです。複数のエラーメッセージを複数行のエラー報告として返すことができるようにエラー処理を改良しました。(Magnus)PQexecParams()と関連する関数が、空の問い合わせに対してPGRES_EMPTY_QUERYを返すようにしました。(Tom)これまではPGRES_COMMAND_OKを返していました。WindowsにおけるWSACleanup()のオーバーヘッドを防止する方法を文書化しました。Chernow)デフォルトのデータベースユーザ名を決定する際にKerberosチケットに依存しません。(Magnus)これまでは、Kerberos機能を有効に構築したlibpqでは、Kerberos認証を使用しない接続であったとしても、利用可能なKerberosチケットのプリンシパル名をデフォルトのデータベースユーザ名として使用しました。これは一貫性がなく混乱を招くものと思われます。デフォルトのユーザ名はKerberosの有無に関係なく同じ方法で決定されるようになりました。Kerberos認証を使用する場合、データベースユーザ名はチケットと一致しなければならないことに注意してください。SSL(セキュアソケットレイア)サポートSSL接続の証明書検証を修正しました。(Magnus)libpqは、SSL接続を確立する際に、証明書とサーバ名の検証をサポートするようになりました。検証においてルート証明書が利用できない場合、SSL接続は失敗します。sslmodeパラメータは証明書検証を有効にするため、および、その検査レベルを設定するために使用されます。デフォルトではまだまったく検証を行わず、クライアント上でルート証明書を必要とすることなくSSLを有効にしたサーバと接続することができます。ワイルドカードサーバ証明書をサポートします。(Magnus)証明書のCNが*で始まる場合、ホスト名との比較を行う際にワイルドカードとして扱われ、複数のサーバで同じ証明書を使用できるようになります。クライアント証明書ファイルの位置を指定できるようになりました。Magnus)OpenSSL/libcryptoの初期化について多くを制御できるようにPQinitOpenSSL関数を追加しました。Chernow)データベース接続が開いたままの場合、libpqがOpenSSLコールバックの登録を取り消すようにしました。Smith)これはlibpqライブラリをアンロードするアプリケーションで必要とされます。しないと無効なOpenSSLコールバックが残ってしまいます。ecpg翻訳メッセージのサポートを追加しました。Oliveira)ecpgパーサが自動的にサーバパーサから生成されるようになりました。(Michael)これまではecpgパーサは手作業で保守されていました。サーバプログラミングインタフェース(SPI)行外のパラメータを持つ、一回しか使用されない計画をサポートするようになりました。(Tom)SPI_execute()に新しい戻り値コードSPI_OK_REWRITTENを追加しました。(Heikki)これは、コマンドが別の種類のコマンドに書き換えられた時に使用されます。executor/spi.hから不要なインクルードを削除しました。(Tom)これらをインクルードするためにspi.hに依存している場合、SPIを使用するモジュールにいくつか#include行の追加が必要となる場合があります。2.61を使用するように更新しました。bisonが必要です。(Peter)実質ここ数年で、これは必要とされていましたが、他のパーサツールをサポートしようという要望がなくなりました。--htmldirオプションを追加しました。(Peter)サーバ内部でfloat4を値渡しします。Boszormenyi)過去の動作を使用するために--disable-float4-byvalオプションをconfigureに追加しました。この変更により、旧スタイル(バージョン0)の呼び出し規約を使用し、float4値を渡したり返したりする外部C関数は動作しなくなります。このため、こうした関数があり、それを変更したくない場合は、このconfigureオプションが必要になるでしょう。64ビットプラットフォーム上では、サーバ内部でfloat8、int8、これらに関連するデータ型を値渡しします。Boszormenyi)過去の動作を使用するために--disable-float8-byvalオプションをconfigureに追加しました。上記のとおり、この変更は旧スタイルの外部C関数の動作に影響を与えます。--with-segsize、--with-blocksize、--with-wal-blocksize、--with-wal-segsizeオプションをconfigureに追加しました。Tom)これまではpg_config_manual.hを編集して変更するしかなかった、複数の定数を簡単に構築時に制御することができるようになります。2.5でスレッド版の構築ができるようになりました。(Bruce)Solaris上でシステムのgetopt_long()を使用します。Tom)これにより、Solarisユーザが期待するものに、より矛盾がないオプション処理ができるようになりました。Studioコンパイラのサポートを追加しました。Stroffek)バックエンドのgettextドメインにメジャーバージョン番号を追加しました。ライブラリのgettextドメインにsonameメジャーバージョン番号を追加しました。(Peter)これは複数のバージョンの並行インストレーションを簡易化します。gcovを使用したコードカバレッジ試験のサポートを追加しました。Caisse)MingwおよびCygwinにおけるout-of-tree構築が可能です。Evans)ソースのクロスコンパイルを行うプラットフォームとしてのMingwの使用を修正しました。ソースコード64ビットの時間帯データファイルをサポートします。(Heikki)これは、2038年以降の夏時間(DST)計算のサポートを追加します。プラットフォームのtime_tデータ型の使用を廃止しました。(Tom)一部のプラットフォームでは64ビットのtime_tに移行されましたが、一部はまだです。Windowsではまだどうするか決められていません。time_tと同じ意味を持つpg_time_t定義は(プラットフォームが64ビット整数型を持たない限り)常に64ビットです。すべてのモジュールのAPIとディスク上のデータ書式においてこの型を使用します。クロスコンパイル時の時間帯データベース処理における不具合を修正しました。Evans)複数ではなく単一処理でバックエンドのオブジェクトファイルをリンクします。(Peter)複数形のより良い翻訳を可能にするためにgettextサポートを改良しました。(Peter)PL言語にメッセージ翻訳サポートを追加しました。Peter)より多くのDTraceプローブを追加しました。LeopardやSolaris以外のプラットフォーム上のDTraceサポートを有効にしました。Lor)C文字列とtextデータの間の変換を、この目的のために共通化された関数を提供することで、簡易化および標準化しました。Tom)フロントエンドプログラムがpostgres.hをインクルードすることなくインクルードすることができるように、include/catalog/ヘッダファイルを整理しました。Kotala)nameをcharと同じ整列とし、インデックス内のname項目のゼロ埋めを抑制します。(Tom)動的にロードされたコードがexit()を実行した場合の復旧を改良しました。(Tom)プラグインにエグゼキュータを監視させるためのフックを追加しました。Takahiro)プランナの統計情報検索動作を上書きできるようにするフックを追加しました。Riggs)独自の共有メモリ要求のためにshmem_startup_hook()を追加しました。(Tom)インデックスアクセスメソッドamgetmultiのエントリポイントをamgetbitmapに置き換えました。実行時の演算子損失の決定をサポートするためにamgettupleのAPIを拡張しました。Teodor)GINおよびGiST演算子クラスconsistent関数のAPIも同様に拡張しました。GINインデックスにおいて部分一致検索のサポートを追加しました。Bartunov)pg_classのreltriggers列を論理値型のrelhastriggersに置き換えました。(Simon)またpg_classの使用されない、relukeys、relfkeys、relrefs列を削除しました。一時テーブルの識別を簡単にするためにpg_classにrelistemp列を追加しました。(Tom)プラットフォーム向けのFAQを主文書に移しました。(Peter)パーサ入力ファイルが競合状態で構築されることを防ぎます。(Peter)KOI8U(ウクライナ語)符号化方式のサポートを追加しました。(Peter)日本語翻訳メッセージを追加しました。Group)これは別のプロジェクトとして保守されたものを使用しました。MSVC構築システムにおけるLC_MESSAGESを設定した場合の問題を修正しました。Contrib指定期間を超える問い合わせに対して自動的にEXPLAINを行うcontrib/auto_explainを追加しました。Tom)GINインデックスがより多くのデータ型を扱うことを可能にするcontrib/btree_ginを追加しました。Teodor)大文字小文字を区別しない、マルチバイトに対応したテキストデータ型を提供するcontrib/citextを追加しました。Wheeler)サーバ全体で文の実行統計情報を追跡するcontrib/pg_stat_statementsを追加しました。Takahiro)contrib/pgbenchに期間オプションと問い合わせモードオプションを追加しました。Takahiro)contrib/pgbenchが、単なるaccounts、branches、history、tellersではなく、pgbench_accounts、pgbench_branches、pgbench_history、pgbench_tellersという名前のテーブルを使用するようにしました。(Tom)これはpgbenchの実行により、実データが偶然破壊されてしまう危険性を低減させるためのものです。20億ページを超えるテーブルとインデックスを扱うようにcontrib/pgstattupleを修正しました。Kasahara)contrib/fuzzystrmatchにおいて、ユーザが挿入・削除・置換のコストを指定できる、レーベンシュタイン文字列距離関数を追加しました。Yazici)contrib/ltreeがマルチバイト符号化方式をサポートするようにしました。(laser)contrib/dblinkがSQL/MEDカタログに格納された接続情報を使用できるようにしました。Conway)リモートサーバからのエラーに対するcontrib/dblinkの報告を改良しました。Conway)ローカルなデータベース符号化方式と一致させるためにcontrib/dblinkがclient_encodingを設定するようにしました。Conway)これにより、異なる符号化方式を使用するリモートサーバとの通信時の符号化方式に関する問題を防ぎます。偶発的にサーバの.pgpassファイルが使用されることなく、contrib/dblinkがユーザが提供したパスワードを確実に使用するようにしました。Conway)これは小規模なセキュリティの向上です。contrib/pageinspectにfsm_page_contents()を追加しました。(Heikki)空き領域マップファイル(*_fsm)をサポートするようにget_raw_page()を変更しました。contrib/pg_freespacemapも更新しました。contrib/pg_trgmにマルチバイト符号化方式のサポートを追加しました。(Teodor)新しいarray_agg()およびunnest()関数を使用するようにcontrib/intaggを作成し直しました。(Tom)contrib/pg_standbyがフェイルオーバ前にすべての利用可能なWALを復旧するようにしました。Heikki)この作業を安全にするために、recovery.conf内で新しいrecovery_end_commandオプションを設定して、フェイルオーバ後のトリガファイルを整理する必要があります。pg_standbyは自身でトリガファイルを削除しないようになりました。contrib/pg_standbyの-lオプションを無効にしました。シンボリックリンクの使用が安全ではないためです。リリース8.3.15。