他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

E.51. リリース9.3

リリース日: 2013-09-09

E.51.1. 概要

PostgreSQL 9.3の主な機能強化には以下のものがあります。

上記の項目については、以下でより詳細に説明します。

E.51.2. バージョン9.3への移行

以前のリリースからデータを移行したい時は、どのリリースについても、pg_dumpallを利用したダンプとリストア、 あるいはpg_upgradeの利用が必要です。

バージョン9.3には、以前のバージョンとの互換性に影響する多くの変更点が含まれています。 以下の非互換性に注意してください。

E.51.2.1. サーバの設定

  • replication_timeoutの名前をwal_sender_timeoutに変更しました。

    この設定はWAL送信のタイムアウトを設定します。

  • 他のセッションを遅延させる可能性があるため、commit_delayの設定に、スーパーユーザー権限が必要になります。 (Simon Riggs)

  • メモリ上のソートに全てのメモリ割り当てを行うことを許します。(Jeff Janes)

    work_memを以前の振る舞いに基づいて設定しているユーザーは、設定を再検討する必要があります。

E.51.2.2. その他

  • 更新もしくは削除されようとしたタプルがすでにBEFOREトリガで更新もしくは削除されていた場合、エラーを投げます。(Kevin Grittner)

    以前は、元々意図していた更新は何も発することなくスキップされていました。 意図していた更新によって、トリガが他の場所へデータを伝播した可能性があるため、結果として、論理的に一貫性がない状態になっていました。 本バージョンでは、一貫性のない結果がコミットされることがないようにエラーを投げます。 もしこの変更がアプリケーションに影響を及ぼす場合、最適な解法は恐らくデータの伝播動作をAFTERトリガで実行することです。

    このエラーは、クエリがそのクエリ自身によって、後で変更された行を変更するvolatile関数を呼び出す場合に投げられます。 このような例は同様に、以前は何も発することなく更新をスキップしていました。

  • 複数列に対するON UPDATE SET NULL/SET DEFAULTにおける外部キーの動作を変更し、UPDATE文で更新されるものだけではなく、全ての制約つきの列に影響するようにしました。(Tom Lane)

    以前は、UPDATE文で変更された参照列に該当する列のみ設定されていました。これはSQL-92版で要求されていたものですが、より新しい版のSQL標準では、この新しい動作が明記されています。

  • search_pathが変わった場合、キャッシュされた計画が再計画されるようになりました。 (Tom Lane)

    新しいsearch_pathとともにクエリが再実行された場合、以前は、現在のセッションで、すでに作成されているキャッシュされた計画は再計画されず、驚くべき動作になっていました。

  • to_number()が、3桁毎の区切り文字として使用されるピリオドを適切に扱えるように修正しました。(Tom Lane)

    以前は、ロケールでそれが小数点ではないと示されても、ロケール固有の小数点を指定するD書式コードが使われても、ピリオドは小数点だと認識されていました。FM書式が使用された場合も、誤った結果に終わっていました。

  • 集合以外を返すSTRICT関数の引数に集合を返す関数があるとき、適切にNULLを返すように修正しました。 (Tom Lane)

    strict関数にわたったNULL値は、出力行が完全に隠されるのではなく、NULLという結果に終わるべきです。

  • 4GBごとに最後の16MBをスキップするのではなく、WALを継続的に格納します。(Heikki Linnakangas)

    以前は、ファイル名がFFで終わるWALファイルは使われませんでした。もし、このスキップを考慮したWALバックアップやリストアのスクリプトを使っていた場合、それらを直す必要があります。

  • pg_constraint.confmatchtypeにおいて、(FULLでも、PARTIALでもない場合の)外部キーの一致型として、simpleを示すsを格納します。(Tom Lane)

    以前は、unspecifiedを示すuで表されていました。

E.51.3. 変更点

以下に、PostgreSQL 9.3とそれ以前のメジャーリリースとの違いに関する詳細な説明をします。

E.51.3.1. サーバ

E.51.3.1.1. ロック
  • キーではない行の更新が外部キー制約によりブロックされることを防ぎます。(Álvaro Herrera, Noah Misch, Andres Freund, Alexander Shulgin, Marti Raudsepp, Alexander Shulgin)

    この変更は同時実行性を改善し、外部キー制約を持つテーブルを更新する際に、デッドロックに陥る可能性を減らします。外部キーで参照される列を変更しないUPDATEは、その行に対して新しいロックモードであるNO KEY UPDATEを使い、外部キー検査は新しいロックモードであるKEY SHAREを使います。このKEY SHAREは、NO KEY UPDATEと競合しません。そのため、外部キーが変更されない場合、ブロックされることはありません。

  • セッションがロックを獲得するまで待機する時間を制限できるようにするために、設定変数lock_timeoutを追加しました。 (Zoltán Böszörményi)

E.51.3.1.2. インデックス
  • 範囲型に対するSP-GiSTのサポートを追加しました。(Alexander Korotkov)

  • ログをとらないGiSTインデックスを使用できます。(Jeevan Chalke)

  • 同程度に有用な複数の選択肢があった場合、どのページが下がるのかランダムで決まるようにしたことで、GiSTインデックスを挿入する性能が向上します。(Heikki Linnakangas)

  • ハッシュインデックス操作の同時実効性を改善しました。(Robert Haas)

E.51.3.1.3. オプティマイザ
  • 範囲型について、上限と下限、および範囲の長さの度数分布を収集し、利用するようにしました。(Alexander Korotkov)

  • インデックスアクセスに対してのオプティマイザのコスト見積もりを改善しました。 (Tom Lane)

  • ハッシュ集約を使用したDISTINCTについて、オプティマイザによるハッシュテーブルサイズの見積もりを改善しました。 (Tom Lane)

  • 操作を行わないResult計画ノード、Limit計画ノードを抑制します。(Kyotaro Horiguchi, Amit Kapila, Tom Lane)

  • オプティマイザが総コスト全体のみを気にするとき、安価な起動コストを基にしたプランを持ち続けることをやめることにより、オプティマイザのオーバーヘッドを削減しました。(Tom Lane)

E.51.3.1.4. 一般的なパフォーマンス
  • あとでタプルを凍結状態にするオーバヘッドを避けるため、COPY FREEZEオプションを追加しました。

  • NUMERICの計算における性能を向上しました。

  • commit_delayを待機するセッションの同期性能を向上しました。(Peter Geoghegan)

    これはcommit_delayの便利さを大いに改善します。

  • 一時テーブルにアクセスしないトランザクションにおいて、一時テーブルを空にすることをやめることにより、CREATE TEMPORARY TABLE ... ON COMMIT DELETE ROWSオプションの性能を向上しました。(Heikki Linnakangas)

  • Vacuumが無効になったタプルを削除した後に、可視性を再検査するようにしました。(Pavan Deolasee)

    これは、ページがすべて可視とマークされる機会を増加させます。

  • リソース所有者ごとのロックのキャッシュを追加しました。(Jeff Janes)

    これはたくさんのロックを含む複数の文から成るトランザクションでSQL文が完了した際のロックの内部処理を高速にします。これは特にpg_dumpに有効です。

  • 新しいリレーションを作るトランザクションのコミット時に、すべてのリレーションキャッシュをスキャンすることをやめました。 (Jeff Janes)

    これはpg_restoreの実行のような、連続する小さなトランザクションで多くのテーブルを作成するセッションを高速化します。

  • 多くのリレーションを削除するトランザクションの性能を向上しました。(Tomas Vondra)

E.51.3.1.5. 監視
  • データページのチェックサムを確認し、破損があった場合に報告を行うオプション機能を追加しました。(Simon Riggs, Jeff Davis, Greg Smith, Ants Aasma)

    チェックサムオプションは、initdb実行時に設定できます。

  • 統計情報コレクタのデータファイルをグローバルで持つものとデータベース単位でもつファイルに分割しました。(Tomas Vondra)

    これは、統計情報追跡に必要なI/Oを削減します。

  • システム時刻が後戻りしても、適切に操作できるように統計情報コレクタを修正しました。 (Tom Lane)

    以前は、記録した最新の時刻に達するまで、統計情報コレクタが停止していました。

  • postmasterが標準エラーへのログ出力を終了する前に、標準エラーに有益なメッセージを出力します。(Tom Lane)

    この修正は、postmaster起動時にのみ標準エラーへログ出力する一般的な設定において、どこにログが出力されるのか探す手間を減らすでしょう。

E.51.3.1.6. 認証
  • 意図しない失敗のデバッグを容易にするため、認証が失敗した際、それに対応するpg_hba.confの行を出力します。(Magnus Hagander)

  • LDAPのエラー報告とドキュメントを改善しました。(Peter Eisentraut)

  • RFC 4516に従って、URLにおけるLDAP認証のパラメータを指定するサポートを追加しました。(Peter Eisentraut)

  • ALLではなく、DEFAULTで始まるようにssl_ciphersのパラメータを変更し、安全ではない暗号を削除しました。(Magnus Hagander)

    これにより、より適切なSSL暗号の集合がもたらされます。

  • 接続するたびにではなく、一度のみ、pg_ident.confを解析し、ロードするようにしました。(Amit Kapila)

    これは、pg_hba.confの処理と同様です。

E.51.3.1.7. サーバの設定
  • System Vの共有メモリの要件を大幅に減少させました。(Robert Haas)

    Unix系のシステムにおいて、大部分のPostgreSQLの共有メモリには現在、mmap()が使われています。 これによって多くのユーザは、共有メモリのカーネルパラメータを調整する必要がなくなります。

  • postmasterが複数のUnixドメインソケットを監視できるようにしました。(Honza Horák)

    設定パラメータunix_socket_directoryは、ディレクトリの一覧を受け入れるunix_socket_directoriesに置き換えられました。

  • 設定ファイルのディレクトリを指定できるようにしました。(Magnus Hagander, Greg Smith, Selena Deckelmann)

    そのようなディレクトリは、サーバ設定ファイル内のinclude_dirで指定されます。

  • initdbの設定値shared_buffersの上限を128MBに増加しました。

    これは、initdb実行時にpostgresql.confに設定される上限値です。以前は、32MBが上限値でした。

  • external PID fileがあれば、postmaster終了時に削除します。(Peter Eisentraut)

E.51.3.2. レプリケーションとリカバリ

  • ストリーミングレプリケーションのスタンバイのタイムラインスイッチへの追従が可能になりました。(Heikki Linnakangas)

    ストリーミングレプリケーションのスタンバイサーバに、新しくマスタに昇格したスレーブからWALデータを受信することを可能にします。以前、その他のスレーブは新しいマスタとのレプリケーションを始めるために再同期が必要でした。

  • SQL関数pg_is_in_backup()pg_backup_start_time()を追加しまし>た。(Gilles Darold)

    これらの関数は、ベースバックアップ作成のステータスを報告します。

  • synchronous_commitをオフにした場合のログシッピングの性能を向上しました。(Andres Freund)

  • ストリーミングレプリケーションのスレーブのプライマリへのとても速い昇格が可能になりました。(Simon Riggs, Kyotaro Horiguchi)

  • 最後のチェックポイントの再実行位置をpg_controldataの出力に追加しました。(Fujii Masao)

    この情報は、どのWALファイルがリストアに必要か決定するのに役立ちます。

  • pg_receivexlogのようなツールが異なるアーキテクチャのコンピュータで実行できるようにしました。(Heikki Linnakangas)

    WALファイルは依然としてプライマリと同じアーキテクチャのサーバでしか再生できません。しかし、ストリーミングレプリケーションのプロトコルはマシンに非依存になったため、異なるアーキテクチャのマシンへWALファイルを転送し、格納することができます。

  • pg_basebackup--write-recovery-confオプションにより、最小のrecovery.confを出力できるようにしました。(Zoltán Böszörményi, Magnus Hagander)

    これにより、スタンバイサーバのセットアップが簡易になります。

  • pg_receivexlogpg_basebackup--xlog-methodが、タイムラインの切替を扱えるようになりました。(Heikki Linnakangas)

  • WAL受信のタイムアウトを制御できるようにwal_receiver_timeoutパラメータを追加しました。(Amit Kapila)

    これにより、より速く、接続が失敗したことを検知できます。

  • レコード用のヘッダがページを跨がって分割できるように、WALレコードの形式を変更しました。(Heikki Linnakangas)

    新しい形式は多少小さくなり、書き込みが効率的になります。

E.51.3.3. 問い合わせ

  • FROM句の副問い合わせや関数呼び出しで使用できるSQL標準LATERALオプションを実装しました。 (Tom Lane)

    この機能はFROM句の副問い合わせや関数で、FROM句に書いてある他のテーブルの列を参照できます。LATERALキーワードは、関数のオプションです。

  • COPYpsql\copyで、外部プログラムをパイプで渡すことができる機能を追加しました。(Etsuro Fujita)

  • ルールにおける複数行のVALUES句が、OLD/NEWを参照できるようにしました。(Tom Lane)

E.51.3.4. オブジェクトの操作

  • イベントトリガをサポートしました。(Dimitri Fontaine, Robert Haas, Álvaro Herrera)

    これにより、イベントで有効な言語で書かれたサーバサイドの関数が、DDL実行時に呼び出せるようになります。

  • 外部データラッパが外部テーブルの書き込み(挿入/更新/削除)が可能になりました。(KaiGai Kohei)

  • CREATE SCHEMA ... IF NOT EXISTS句を追加しました。(Fabrízio de Royes Mello)

  • REASSIGN OWNEDが共有オブジェクトの所有権も変更できるようになりました。(Álvaro Herrera)

  • 与えられた初期値の文字列が遷移データ型として適切な入力値ではない場合に、CREATE AGGREGATEが警告を発するようにしました。(Tom Lane)

  • CREATE TABLEにより、内部的にインデックスやシーケンスが作成されたことに関するメッセージを取り消しました。(Robert Haas)

    これらのメッセージは、本バージョンから、DEBUG1であらわれるようになったので、デフォルト設定では表示されません。

  • テーブル名で存在しないスキーマが指定されたとき、DROP TABLE IF EXISTSが成功するようにしました。(Bruce Momjian)

    以前は、スキーマが存在しない場合、エラーが投げられていました。

  • クライアントに、制約違反の詳細を別のフィールドとして提供するようになりました。(Pavel Stehule)

    これにより、クライアントがテーブル、列、データ型、制約名のエラー詳細を取得できるようになります。以前は、こういった情報はエラー文字列から抽出するしかありませんでした。クライアントライブラリは、これらのフィールドへのアクセスが必要になります。

E.51.3.4.1. ALTER
  • ALTER TYPE ... ADD VALUEIF NOT EXISTSオプションをサポートしました。(Andrew Dunstan)

    これは列挙型に値を追加するときに有用です。

  • 全ユーザに対する設定ができるように、ALTER ROLE ALL SETを追加しました。(Peter Eisentraut)

    これにより、全データベースの全ユーザに対する設定ができるようになります。ALTER DATABASE SETでは、すでに単一のデータベースの全ユーザに対する設定が出来ます。postgresql.confでも同様のことが効果があります。

  • ALTER RULE ... RENAMEのサポートを追加しました。(Ali Dar)

E.51.3.4.2. VIEW
  • マテリアライズドビューを追加しました。 (Kevin Grittner)

    アクセスごとに、元になっているテーブルが読み込まれる通常のビューとは違い、作成時やリフレッシュ時にマテリアライズドビューは物理的なテーブルを作成します。マテリアライズドビューにアクセスすると、その物理的なテーブルから読み込みを行います。マテリアライズドビューの差分リフレッシュや、自動的に元となっているテーブルへアクセスする機能はまだありません。

  • 単純なビューを自動更新可能にしました。(Dean Rasheed)

    元となっている一つのテーブルが持ついくつかのもしくは全ての列を参照するシンプルなビューは、デフォルトで更新可能になりました。より複雑なビューはINSTEAD OFトリガ、もしくは、INSTEADルールを使用して、更新ができるように作成できます。

  • CREATE RECURSIVE VIEWを追加しました。(Peter Eisentraut)

    これは内部的に、CREATE VIEW ... WITH RECURSIVE ...に変換されます。

  • 参照されているテーブル名の変更、列名の変更、列の追加、削除が起きたときに使用されるビューやルールのコードを改善しました。(Tom Lane)

    テーブル名と列名の変更により、ルールやビューの文字列に新しい名前を用いるだけの場合、結果があいまいになることがありました。 この変更では、ルールで生まれるコードが作成したテーブルや列の別名を必要に応じて挿入することで、元の意味を保存します。

E.51.3.5. データ型

  • ラージオブジェクトの最大格納サイズを、2GBから4TBへと増加しました。 (Nozomi Anzai, Yugo Nagata)

    この変更には、サーバ、libpqクライアントともに、64ビットでアクセス可能な関数も含まれています。

  • America/Chicagoのようなタイムゾーン名を示す文字列が、ISO形式のtimestamptzを入力値とするTフィールドで使用できるようにしました。(Bruce Momjian)

E.51.3.5.1. JSON
  • JSONの値から要素を抽出できる演算子と関数を追加しました。(Andrew Dunstan)

  • JSONの値が、レコードに変換されるようになりました。(Andrew Dunstan)

  • スカラ、レコード、hstoreの値をJSONに変換できる関数を追加しました。(Andrew Dunstan)

E.51.3.6. 関数

  • array_remove()array_replace()を追加しました。(Marco Nenciarini, Gabriele Bartolini)

  • concat()format()が、適切にVARIADICと付けられた引数を展開できるようになりました。(Pavel Stehule)

  • フィールドの幅と左右の整列を決めるオプションを提供できるように、format()を改善しました。(Pavel Stehule)

  • to_char()to_date()to_timestamp()が、紀元前(BC)の値を正しく扱えるようにしました。(Bruce Momjian)

    以前は、IYYY-IW-DY形式のように、誤っているか、紀元後(AD)とは一貫性のないふるまいとなっていました。

  • to_date()to_timestamp()が、ISOとグレゴリオ暦が混ざった場合に、正しい値を返せるようにしました。(Bruce Momjian)

  • pg_get_viewdef()が、SELECT対象のリスト項目やFROM句の項目の後に続いて、デフォルトで新しい行から始めるようにしました。(Marko Tiikkaja)

    これにより、たとえば、pg_dumpの出力結果などに表示される行の長さが短くなります。

  • map_sql_value_to_xml_value()が、基本型が出力されるのと同じ方法で、ドメイン型の値を出力できるように修正しました。(Pavel Stehule)

    booleanなどいくつかの組み込み型には特別な出力形式のルールがあります。これらのルールは、本バージョンからドメイン型にも適用されます。

E.51.3.7. サーバサイド言語

E.51.3.7.1. PL/pgSQLサーバサイド言語
  • PL/pgSQLが、複合型の式をRETURNに使えるようにしました。(Asif Rehman)

    以前のバージョンでは、複合型の式を返す関数では、RETURNはその型の変数を参照することしかできませんでした。

  • PL/pgSQLが、別のフィールドとして制約違反の詳細にアクセスできるようになりました。(Pavel Stehule)

  • PL/pgSQLがCOPYによって処理された行数にアクセスできるようになりました。(Pavel Stehule)

    PL/pgSQLの関数内で実行されたCOPYは、本バージョンよりGET DIAGNOSTICS x = ROW_COUNTで取得される値を更新します。

  • 予約されていないキーワードが識別子としてPL/pgSQL内のどこでも使用できるようになりました。(Tom Lane)

    たとえ名目上、予約されていない場合でも、PL/pgSQL文法内のある場所で、識別子として使用されるためには、キーワードに引用符を使用しなければなりませんでした。

E.51.3.7.2. PL/Python Server-Side Language
  • PL/Pythonに結果オブジェクト文字列ハンドラを追加しました。(Peter Eisentraut)

    これはplpy.debug(rv)に有用なものを出力させます。

  • PL/PythonにOIDを適切なPythonのnumeric型に変換させるようにしました。(Peter Eisentraut)

  • (PL/PythonのRAISEなどで、)明示的に出力されたSPIエラーを、内部的なSPIエラーと同様に扱えるようになりました。 (Oskari SaarenmaaとJan Urbanski)

E.51.3.8. サーバプログラミングインタフェース (SPI)

  • サブトランザクションがアボートしている間、SPIタプルテーブルのリークを防ぎます。(Tom Lane)

    失敗したサブトランザクションの終わりに、コアSPIコードがそのサブトランザクションで作成したSPIタプルテーブルを解放するようになります。これにより、SPIが使っているコードに、エラーリカバリコードの中で、タプルテーブルを追跡し、手動で解放させる必要がなくなります。こういった失敗は、PL/SQLやおそらく他のSPIクライアントでもトランザクション有効期間のメモリリークの問題を数多く発生させる原因となっていました。SPI_freetuptable()は、複数の解法要求から守られており、手動で解放するように注意していた既存のコードがこの変更で使用できなくなることはありません。

  • SPI関数が、COPYによって処理された行数にアクセスできるようになりました。(Pavel Stehule)

E.51.3.9. クライアントアプリケーション

  • サーバが接続を受け付ける準備ができているか確認できるコマンドラインユーティリティ、pg_isreadyを追加しました。(Phil Sorber)

  • pg_restoreclusterdbreindexdbvacuumdbが、複数の--tableオプションを受け付けるようになりました。

    これはpg_dump--tableオプションと同様の動きをします。

  • pg_dumpallpg_basebackuppg_receivexlogに、接続文字列を指定できる--dbnameオプションを追加しました。(Amit Kapila)

  • 接続情報を返却するlibpq関数、PQconninfo()を追加しました。(Zoltán Böszörményi, Magnus Hagander)

E.51.3.9.1. psql
  • psqlのタブ補完とパターンサーチがより効率的になるように関数コスト設定が調整されました。(Tom Lane)

  • psqlのタブ補完のカバー範囲を改良しました。(Jeff Janes, Dean Rasheed, Peter Eisentraut, Magnus Hagander)

  • psql--single-transactionモードが、標準入力からの読み込みに対応するようになりました。(Fabien Coelho, Robert Haas)

    以前は、ファイルからの読み込み時のみ、このオプションが有効でした。

  • 古いサーバへの接続時のpsqlの警告をとりやめました。(Peter Eisentraut)

    psqlよりも新しいメジャーバージョンへの接続時には、警告があがります。

E.51.3.9.1.1. メタコマンド
  • SQLコマンドを繰り返し実行できるpsqlのコマンド\watchを追加しました。(Will Leinweber)

  • psql変数内にクエリ結果を格納するpsqlのコマンド\gsetを追加しました。(Pavel Stehule)

  • psql\conninfoコマンドで、SSL情報を取得できるようになりました。(Alastair Turner)

  • psql\df+コマンドの出力にSecurity列を追加しました。(Jon Erdman)

  • psql\lコマンドでデータベース名のパターンを指定できるようにしました。(Peter Eisentraut)

  • psqlで、アクティブな接続がないときに、\connectコマンドがデフォルトを使えないようにしました。(Bruce Momjian)

    サーバがクラッシュした場合などがこれに該当します。

  • psql\g fileで実行されたSQLコマンドが失敗した後に、状態を適切に初期化するようになりました。(Tom Lane)

    以前は、SQLコマンドからの出力が期待していない形で、同じファイルに出力し続けていました。

E.51.3.9.1.2. 出力
  • psqllatex-longtable出力形式を追加しました。(Bruce Momjian)

    これの形式は、複数ページにまたがるテーブルを扱えます。

  • border=3出力モードをpsqllatex形式に加えました。(Bruce Momjian)

  • psqlのタプルのみ表示モードおよび拡張表示モードのとき、0行の取得結果に対して、(No rows)を出力しなくなりました。(Peter Eisentraut)

  • psqlの位置揃え無しで、拡張表示モードのとき、0行の取得結果に対して、空行を出力しなくなりました。(Peter Eisentraut)

E.51.3.9.2. pg_dump
  • 並行してテーブルをダンプできるpg_dump--jobsオプションを追加しました。(Joachim Wieland)

  • pg_dumpが関数をより予測可能な順番で出力するようにしました。(Joel Jacobson)

  • pg_dumpによって、出力されるtarファイルがPOSIXに準拠されるように修正しました。(Brian Weaver, Tom Lane)

  • 他のクライアントコマンドとの一貫性を保つために、--dbnameオプションをpg_dumpに追加しました。(Heikki Linnakangas)

    データベース名はすでに、フラグ無しで最後に書くことによって指定できました。

E.51.3.9.3. initdb
  • initdbが新しくデータディレクトリを作成するときにfsyncを行うようになりました。(Jeff Davis)

    これによりinitdb直後にシステムがクラッシュした場合でもデータ整合性が保証されます。これは--nosyncオプションを使うことにより、無効化できます。

  • initdbに、データディレクトリを永続的なストレージに同期する--sync-onlyオプションを追加しました。(Bruce Momjian)

    これはpg_upgradeで使われています。

  • initdbで作成するデータディレクトリが、ファイルシステムのマウントポイントの最上位に配置することに対して、警告を発するようにしました。(Bruce Momjian)

E.51.3.10. ソースコード

  • バックグラウンドワーカープロセスプラグインを使用できる基盤を追加しました。(Álvaro Herrera)

  • 一元化されたタイムアウトAPIを作成しました。(Zoltán Böszörményi)

  • libpgcommonを作成し、pg_malloc()と他の関数をそこに移動させました。(Álvaro Herrera, Andres Freund)

    これにより、libpgportには移植性関連のコードのみが使われることになります。

  • より大きい構造体に埋め込まれたリストをサポートします。(Andres Freund)

  • SIGALRMを含むすべてのシグナルに対して、SA_RESTARTを使います。(Tom Lane)

  • errcontext()メッセージが翻訳されたときに、正しいテキストドメインが使われることを保証するようになりました。(Heikki Linnakangas)

  • クライアント側のメモリアロケーション関数の名前を標準化しました。(Tom Lane)

  • コンパイル時定数の状態が合わない場合、コンパイルに失敗する静的アサーションをサポートします。(Andres Freund, Tom Lane)

  • クライアント側のコードにAssert()をサポートします。(Andrew Dunstan)

  • ereport()elog()が結果を返さないことを、Cコンパイラに伝えるようになりました。(Peter Eisentraut, Andres Freund, Tom Lane, Heikki Linnakangas)

  • リグレッションテストの出力比較ユーティリティに、PG_REGRESS_DIFF_OPTS経由でオプションをわたせるようにしました。(Peter Eisentraut)

  • CREATE INDEX CONCURRENTLYに対する隔離性テストを追加しました。 (Abhijit Menon-Sen)

  • よりよいint16/int32を代わりに使用するため、int2/int4に対するtypedefを削除しました。(Peter Eisentraut)

  • MacのOS X上でのinstall-stripを修正しました。(Peter Eisentraut)

  • configureフラグの--disable-sharedオプションがサポートされなくなったため、削除しました。(Bruce Momjian)

  • pgindentが、Perlで書き直されました。(Andrew Dunstan)

  • PostgreSQLのperltidy設定に合わせるPerl形式を設定するEmacsのマクロを提供します。(Peter Eisentraut)

  • バックエンドの文法が変わったときに、キーワード一覧をチェックできるようツールを実行します。(Tom Lane)

  • UESCAPEの解析方法を変更し、字句解析テーブルのサイズが大幅に小さくなりました。 (Heikki Linnakangas)

  • flexbisonmakeルールが一元化されました。(Peter Eisentraut)

    これはpgxsの作者に有益です。

  • 内部の多くのバックエンド関数がvoidではなく、オブジェクトのOIDを返すように変更しました。(Dimitri Fontaine)

    これはイベントトリガに有益です。

  • トランザクションのコールバックのために、pre-commit、pre-prepare、pre-subcommitというイベントを開発しました。(Tom Lane)

    トランザクションのコールバックを使用するロード可能なモジュールは、これらの新しいイベントを扱えるように変更する必要があるかもしれません。

  • データベースオブジェクトのマシンが読める説明を生成するpg_identify_object()を追加しました。 (Álvaro Herrera)

  • サーバフック、post-ALTER-objectを追加しました。(KaiGai Kohei)

  • 汎用バイナリヒープが実装しました。これは、マージ、アペンド操作に使用されます。 (Abhijit Menon-Sen)

  • src/timezone/dataのファイルの更新時に、時間帯省略形の変更の検知を助けるツールを提供します。(Tom Lane)

  • libpqecpgライブラリにpkg-configをサポートします。(Peter Eisentraut)

  • src/tool/backendディレクトリを削除しました。その内容は、PostgreSQLのwikiにあります。(Bruce Momjian)

  • WALの読み込みを分割し、独立した機能としました。(Heikki Linnakangas, Andres Freund)

  • WALの位置(XLogRecPtr)を表現するのに、32bit整数ペアでなく、64bit整数を使います。(Heikki Linnakangas)

    WAL形式を読む必要のあるツールは、概ね、修正する必要があるでしょう。

  • PL/Pythonがプラットフォーム固有のインクルードディレクトリをサポートするようになりました。(Peter Eisentraut)

  • Mac OS X上のPL/Pythonが、カスタムバージョンのPythonでビルド出来るようになりました。(Peter Eisentraut)

E.51.3.11. 追加モジュール

  • 他のPostgresサーバにアクセスできるPostgres外部データラッパをcontribモジュールに追加しました。(Shigeru Hanada)

    この外部データラッパは書き込みもサポートします。

  • pg_xlogdumpをcontribモジュールに追加しました。(Andres Freund)

  • pg_trgmの正規表現検索にてインデックスが使えるようになりました。(Alexander Korotkov)

  • pg_trgmのマルチバイト文字の取り扱いを改善しました。(Tom Lane)

    wcstombs()、もしくは、towlower()ライブラリ関数を持っていないプラットフォーム上では、非ASCIIデータに対するpg_trgmのインデックス内容に互換性のない変化が起きる可能性があります。 このような場合、それらのインデックスにREINDEXを行うことにより、正しい検索結果が得られます。

  • GINインデックスの挿入保留リストのサイズを報告するpgstattuple関数を追加しました。(Fujii Masao)

  • oid2namepgbenchvacuumloが、fallback_application_nameを設定します。

  • pg_test_timingの出力を改善しました。(Bruce Momjian)

  • pg_test_fsyncの出力を改善しました。(Peter Geoghegan)

  • 固有のオプション検証関数をもつdblink専用の外部データラッパを作成しました。

    dblinkの接続先を定義するためにこの外部データラッパを使う場合、固定的な接続オプションリストを使うのでなく、どのような接続オプションがサポートされているかlibpqライブラリを確認します。

E.51.3.11.1. pg_upgrade
  • pg_upgradeによるダンプとリストアを並列に行えるようにしました。(Bruce Momjian, Andrew Dunstan)

    これにより、テーブルスペースごとのデータファイルの並列コピー、リンクと同様に、データベースの並列スキーマダンプ、リストアが可能になります。--jobsオプションで並列レベルを指定して下さい。

  • pg_upgradeが、カレントディレクトリに Unix-domainソケットを作るようになりました。 (Bruce Momjian, Tom Lane)

    これにより、アップグレード中に誤って接続されてしまう可能性が少なくなります。

  • pg_upgrade--checkモードが適切にデフォルトではないソケットディレクトリを検知するようになりました。 (Bruce Momjian, Tom Lane)

  • 多くのテーブルを持つデータベースに対するpg_upgradeの性能を向上しました。(Bruce Momjian)

  • 実行されたコマンドを表示することでpg_upgradeのログを改善しました。(Álvaro Herrera)

  • コピーやリンク中のpg_upgradeのステータス表示を改善しました。 (Bruce Momjian)

E.51.3.11.2. pgbench
  • pgbench--foreign-keysオプションを追加しました。 (Jeff Janes)

    外部キーの性能試験で使用できるように、pgbenchで作成される通常のテーブルに外部キー制約を追加しました。

  • pgbenchが性能統計を集計し、--aggregate-intervalで設定した秒数ごとに集計結果を作成できるようにしました。 (Tomas Vondra)

  • ログに書き込まれるトランザクションの割合を制御できるpgbench--sampling-rateオプションを追加しました。(Tomas Vondra)

  • pgbenchの初期化モードで出力されるステータスメッセージを削減し、改良しました。 (Robert Haas, Peter Eisentraut)

  • pgbenchに5秒ごとに1行出力する-qオプションを追加しました。 (Tomas Vondra)

  • 初期化中にpgbenchの経過時間と残りの推定時間を出力します。(Tomas Vondra)

  • 要求されたスケールファクタが20000を超える場合には、関連するカラムがintegerからbigintに変わり、pgbenchがより大きいスケールファクタを使用できるようにしました。 (Greg Smith)

E.51.3.12. 文書

  • EPUB書式の文書が生成できるようになりました。(Peter Eisentraut)

  • FreeBSDのカーネルの設定文書を更新しました。(Brad Davis)

  • WINDOW関数の文書を改善しました。(Bruce Momjian, Florian Pflug)

  • macOSでドキュメントツールをセットアップする手順を追加しました。(Peter Eisentraut)

  • commit_delayの文書を改善しました。