他のバージョンの文書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.5. リリース9.5

リリース日

2016-01-07

E.5.1. 概要

PostgreSQL9.5の主な強化点には以下のものがあります。

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

E.5.2. バージョン9.5への移行

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

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

  • SQL標準に適合するように演算子の優先順位を調整しました。 (Tom Lane)

    <=>=<>の優先順位が、 <, >=と同じに下げられました。 IS検査(例: x IS NULL)の優先順位がこれら6つの比較演算子のすぐ下まで下げられました。 また、NOTで始まる複数キーワード演算子はその基底演算子と同じ優先順位を持つようになります(例えば、NOT BETWEENBETWEENと同じ優先順位となります)。 NOTは左辺要素を尊重するけれどもその基底演算子は右辺要素を尊重するといったように、これまで一貫性に欠けた優先順位になっていました。 新たな設定パラメータoperator_precedence_warningで本優先順位変更で異なった解析結果になる問い合わせについての警告を有効にできます。

  • pg_ctlのデフォルトシャットダウンモードをsmartからfastに変更しました。 (Bruce Momjian)

    停止時のデフォルトの振る舞いが、既存のデータベースセッションが終了するのを待つのでなく、強制的にセッションを中断するようになることを意味します。

  • PL/pgSQLの代入でのデータ型変換に、テキストから、あるいは、テキストへの変換ではなく、代入キャストの動作を用います。 (Tom Lane)

    この変更により、boolean型から文字列への変換で、tfではなく、truefalseが生じます。 他の型変換はおそらくこれまでより多くの場合で成功するようになります。 例えば、数値3.9をinteger変数に代入すると、これからはエラーになるのでなく4が代入されます。 当該の変換元と変換先の型について代入級キャストが定義されていないときには、PL/pgSQLは従来のI/Oによる変換で代替します。

  • サーバむけコマンドラインオプションでバックスラッシュで文字をエスケープできるようにしました。 (Andres Freund)

    これまでは、オプション文字列中の空白文字が常にオプション区切になっていて、オプション内容に空白文字を含める方法がありませんでした。 オプション内容にバックスラッシュ(\)を含めるにはこれからは\\と書く必要があります。

  • GSSAPIのinclude_realmパラメータのデフォルト値を1に変更しました。 そのため、デフォルトではGSSおよびSSPIのプリンシパル名からレルムは取り除かれません。 (Stephen Frost)

  • 設定パラメータcheckpoint_segmentsmin_wal_sizemax_wal_sizeで置き換えました。 (Heikki Linnakangas)

    これまでcheckpoint_segmentsを調整していたのであれば、以下の式でおおよそ同等の設定が得られます。

    max_wal_size = (3 * checkpoint_segments) * 16MB

    max_wal_sizeのデフォルト設定は、以前のcheckpoint_segmentsのデフォルト値よりもずっと大きいことに注意してください。そのため、これらを調整することはもはや不要になるかもしれません。

  • LinuxのOOM killerを、 コンパイル時のオプションLINUX_OOM_SCORE_ADJLINUX_OOM_ADJに代えて、 環境変数PG_OOM_ADJUST_FILEPG_OOM_ADJUST_VALUEで制御します。 (Gurjeet Singh)

  • 以前のリリースで非推奨とされていたサーバ設定パラメータssl_renegotiation_limitを廃止しました。 (Andres Freund)

    理論上はSSL再ネゴシエーションは良い考えですが、実際には差引マイナスと考えられるほど多くのバグを引き起こしており、さらに、関連する標準の将来バージョンから除去されることになっています。 そのため、私たちはPostgreSQLから本機能のサポートを外しました。 パラメータssl_renegotiation_limitは未だ在りますが、0(無効)以外には設定できませんし、ドキュメントにも記載されません。

  • 既に非推奨かつ使用不能となっていたサーバ設定パラメータautocommitを除きました。 (Tom Lane)

  • 不用であったため、システムカタログpg_authidのフィールドrolcatupdateを除きました。 (Adam Brightwell)

  • システムビューpg_stat_replicationのフィールドsentは、有効な値を持たないときゼロでなくNULLとしました。 (Magnus Hagander)

  • jsonおよびjsonbの配列抽出演算子で、JSON配列を後ろから数える、負の添え字を可能にしました。 (Peter Geoghegan, Andrew Dunstan)

    これまでは、これらの演算子は負の添え字にNULLを返しました。

E.5.3. 変更点

前回のメジャーリリースからのPostgreSQL 9.5 の変更点の詳細説明を以下に示します。

E.5.3.1. サーバ

E.5.3.1.1. インデックス
  • ブロック範囲インデックス(Block Range Indexes, BRIN)を追加しました。 (Álvaro Herrera)

    BRINインデックスは、ヒープブロック範囲の(最大値、最小値のような)摘要データのみを格納します。そのため、非常にサイズが小さく、更新コストも軽微です。それでいて、データが自然にクラスタ化されているなら、かなりの検索速度向上も実現します。

  • GiSTインデックスを使った、外接矩形でインデックス付けされるオブジェクト(polygon や circle)の距離によるフィルタを正確に行う問い合わせを可能にしました。 (Alexander Korotkov, Heikki Linnakangas)

    これまで、このようなインデックスを利用するには、副問い合わせで多数の行を外接矩形の距離で並び替えて、さらにその結果をより正確な距離計算でフィルタする必要がありました。

  • GiSTインデックスでインデックスオンリースキャンを可能にしました。 (Anastasia Lubennikova, Heikki Linnakangas, Andreas Karlsson)

  • GINの待機リストのサイズを制御する設定パラメータgin_pending_list_limitを追加しました。 (Fujii Masao)

    本パラメータはインデックスごとにインデックスのストレージパラメータとして設定することも可能です。これまで待機リストサイズはwork_memで制御されていましたが、適切なwork_mem値が待機リストサイズむけには大きすぎることがよくあり、扱いにくいものとなっていました。

  • hashインデックスはクラッシュ時に安全でないため、それを作るときに警告を出します。 (Bruce Momjian)

E.5.3.1.2. 性能全般
  • 短縮キーにより、varchar型、text型、numeric型フィールドのソート速度を改善しました。 (Peter Geoghegan, Andrew Gierth, Robert Haas)

  • ソートをインラインで実行できるように基盤を拡張しました。 SQLから呼び出しできない比較関数がCREATE INDEXREINDEXCLUSTERに適用されます。 (Peter Geoghegan)

  • ハッシュ結合の性能を改善しました。 (Tomas Vondra, Robert Haas)

  • 共有バッファの置き換えにおける同時実行性を改善しました。 (Robert Haas, Amit Kapila, Andres Freund)

  • インデックススキャン中のページロックとピンの数を減らしました。 (Kevin Grittner)

    主な恩恵はインデックスのバキュームがあまりブロックされなくなることです。

  • バックエンド毎のバッファピンの追跡でメモリ利用効率を改善しました。 (Andres Freund)

  • ロックのスケーラビリティを改善しました。 (Andres Freund)

    これは特に複数のCPUソケットをもつシステムで動作させるときのスケーラビリティ問題を解決します。

  • オプティマイザが左結合された副問い合わせの不要な参照を取り除けるようにしました。 (David Rowley)

  • 適切な場所においては、問い合わせの制約をウィンドウ関数を伴う副問い合わせにプッシュダウンできるようにしました。 (David Rowley)

  • LEAKPROOFでない関数を、その関数がビューの出力列を受け取らないなら、セキュリティバリアビューにプッシュダウンできるようにしました。 (Dean Rasheed)

  • プランナが、WHERE句に照合する関数の呼び出しがあったとき、真偽値を返す関数の式インデックスから得た統計情報を使うようにしました。 (Tom Lane)

  • ANALYZEで列のデータ型が等価関数を持たなくても基本的な統計(null比率、列の平均長)の計算をするようにしました。 (Oleksandr Shulgin)

  • CRC(巡回冗長検査)計算を高速化し、また、CRC-32Cに切り替えました。 (Abhijit Menon-Sen, Heikki Linnakangas)

  • ビットマップインデックススキャンの性能を改善しました。 (Teodor Sigaev, Tom Lane)

  • 不要なメモリコピーを避けることでCREATE INDEXを高速化しました。 (Robert Haas)

  • バッファマッピングのパーティション数を増やしました。 (Amit Kapila, Andres Freund, Robert Haas)

    これは並列性の高い負荷に対して性能を改善します。

E.5.3.1.3. 監視
  • 新たなストレージパラメータlog_min_autovacuum_durationによるテーブル単位での自動バキュームのログ制御を追加しました。 (Michael Paquier)

  • 新たな設定パラメータcluster_nameを追加しました。 (Thomas Munro)

    通常postgresql.confに設定されるこの文字列によりクライアントはクラスタを識別できます。 この名称は全サーバプロセスのプロセスタイトルにも出て、同じクラスタに属するプロセス群を識別するのを容易にします。

  • スーパーユーザ以外がlog_disconnectionsを接続当初に変更することを防ぎました。 (Fujii Masao)

E.5.3.1.4. SSL
  • SSLサーバ証明書でサブジェクト別名があるなら、それを確認します。 (Alexey Klyukin)

    サブジェクト別名があるなら証明書のCommon Nameにむけた確認を代替します。

  • SSL接続情報を報告するシステムビューpg_stat_sslを追加しました。 (Magnus Hagander)

  • 実装に独立な方法でSSL情報を返すlibpq関数を追加しました。 (Heikki Linnakangas)

    OpenSSL関数を呼ぶPQgetssl()関数は未だ使用することができますが、libpqの将来バージョンは別のSSL実装に対応するかもしれないため、これからは非推奨とみなされます。 可能であれば、SSL情報取得にSSL実装独立な新たな関数PQsslAttribute()PQsslAttributeNames()PQsslInUse()を使ってください。

  • libpqであらゆるOpenSSLのスレッドコールバックを尊重するようにしました。 (Jan Urbanski)

    これまでは上書きされていました。

E.5.3.1.5. サーバ設定
  • 設定パラメータcheckpoint_segmentsmin_wal_sizemax_wal_sizeで置き換えました。 (Heikki Linnakangas)

    この変更により、多数のWALファイルを、それらが不要になったあとも維持することなく、割り当てできます。 それゆえに、max_wal_sizeのデフォルトは、従来のcheckpoint_segmentsのデフォルトよりもずっと大きい1GBです。 また、スタンバイサーバがWAL領域の消費をmax_wal_sizeで制限するように努めてリスタートポイント処理を実行することにも注意してください。これまではcheckpoint_segmentsに注意をはらっていませんでした。

  • LinuxのOOM killerを新たな環境変数PG_OOM_ADJUST_FILEPG_OOM_ADJUST_VALUEにより制御します。 (Gurjeet Singh)

    これまでのOOM制御基盤はコンパイル時のオプションLINUX_OOM_SCORE_ADJLINUX_OOM_ADJを必要としました。これらはサポートされなくなります。新たな動作は全てのビルドで利用できます。

  • 設定パラメータtrack_commit_timestampを有効にすることで、トランザクションコミットのタイムスタンプを記録できるようにしました。 (Álvaro Herrera, Petr Jelínek)

    タイムスタンプ情報は関数pg_xact_commit_timestamp()pg_last_committed_xact()を使って参照できます。

  • local_preload_librariesALTER ROLE SETから設定できるようにしました。 (Peter Eisentraut, Kyotaro Horiguchi)

  • 自動バキュームワーカが処理中に設定パラメータ変更に反応できるようにしました。 (Michael Paquier)

  • 設定パラメータdebug_assertionsを読み取り専用にしました。 (Andres Freund)

    これは、コンパイル時にアサート有効にしたならもはやoffにできないようにして、より効果的なコード最適化を可能にする意味があります。 本変更では、postgres -Aオプションも削除されます。

  • effective_io_concurrencyを効果の無いシステムにおいても設定できるようにしました。 (Peter Eisentraut)

  • サーバの設定ファイル内容を表示するシステムビューpg_file_settingsを追加しました。 (Sawada Masahiko)

  • システムビューpg_settingsに、変更されたけれどもデータベース再起動まで反映されない内容があるかを示すpending_restart列を追加しました。 (Peter Eisentraut)

  • ALTER SYSTEMの設定値をALTER SYSTEM RESETでリセットできるようにしました。 (Vik Fearing)

    このコマンドはpostgresql.auto.confから指定した設定項目を削除します。

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

  • レプリケーション進行を観測する仕組みを作りました。 ロジカルレプリケーションで個々の変更の起点を識別する方法も含まれます。 (Andres Freund)

    これはレプリケーションソリューションを構築するときの助けとなります。

  • マルチトランザクションのコミットログの切り捨て処理を適切にWAL記録されるように作り直しました。 (Andres Freund)

    コードを相当程度より単純でより頑健にしました。

  • リカバリ後の動作を制御するrecovery.confパラメータrecovery_target_actionを追加しました。 (Petr Jelínek)

    これは旧来のパラメータpause_at_recovery_targetを置き換えます。

  • archive_modeの新しい値alwaysを追加しました。 スタンバイで受け取ったWALファイルを常にアーカイブできるようになります。 (Fujii Masao)

  • WAL読み込みの失敗したあとのリトライを制御する設定パラメータwal_retrieve_retry_intervalを追加しました。 (Alexey Vasiliev, Michael Paquier)

    これは特にウォームスタンバイに役立ちます。

  • WALにフルページイメージを圧縮して格納できるようにしました。 (Rahila Syed, Michael Paquier)

    この機能は、WAL記録とWAL再生によりCPU時間を費やすことで、WAL量を減らします。新たな設定パラメータwal_compressionで制御します。今のところデフォルトはoffです。

  • スタンバイが昇格するとき、WALファイルに.partial拡張子を付けてアーカイブします。 (Heikki Linnakangas)

  • レプリケーションコマンドをログ記録する設定パラメータlog_replication_commandsを追加しました。 (Fujii Masao)

    デフォルトではIDENTIFY_SYSTEMなどのレプリケーションコマンドはたとえlog_statementallに設定してもログ記録されません

  • レプリケーションスロットを保持しているプロセスをpg_replication_slotsで報告します。 (Craig Ringer)

    このためにactive_pid列を追加しました。

  • recovery.confprimary_conninfo設定で接続URI(例: postgres://)を使えるようにしました。 (Alexander Shulgin)

E.5.3.3. 問い合わせ

  • INSERTで制約違反が生じたのを、UPDATEに転換したり、無視したりできるようにしました。 (Peter Geoghegan, Heikki Linnakangas, Andres Freund)

    INSERT ... ON CONFLICT DO NOTHING/UPDATE という構文を使用します。 これは人気のあるUPSERTコマンドのPostgreSQLにおける実装となります。

  • GROUP BY分析機能にGROUPING SETSCUBEROLLUPを加えました。 (Andrew Gierth, Atri Sharma)

  • UPDATEで複数対象カラムに一つの副問い合わせ結果から値を設定できるようにしました。 (Tom Lane)

    UPDATE tab SET (col1, col2, ...) = (SELECT ...) という構文で実現されます。

  • ロックされた行を読み飛ばすSELECTオプションSKIP LOCKEDを追加しました。 (Thomas Munro)

    NOWAITと異なり、ロック行に対してエラーを出すことはありません。

  • テーブルの部分集合を返すSELECTオプションTABLESAMPLEを追加しました。

    この機能はSQL標準のテーブルサンプリングメソッドをサポートします。加えて、ユーザ定義サンプリングメソッドを提供します。

  • ミスタイプしたカラム名に対し、類推される候補をヒント提示します。 (Peter Geoghegan, Robert Haas)

E.5.3.4. ユーティリティコマンド

  • EXPLAINがソート順についてより詳細に出力します。 (Marius Timmer, Lukas Kreft, Arne Scheffer)

    出力にCOLLATEDESCUSINGおよびNULLS FIRST/LASTが含まれます。

  • VACUUMがピンのために読み飛ばしたページ数をログ出力するようにしました。 (Jim Nasby)

  • TRUNCATEpg_stat*タプルカウンタを適切に更新するようにしました。 (Alexander Shulgin)

E.5.3.4.1. REINDEX
  • REINDEXSCHEMAオプションでスキーマ全体についてインデックス再作成できるようにしました。 (Sawada Masahiko)

  • REINDEXVERBOSEオプションを追加しました。 (Sawada Masahiko)

  • REINDEX DATABASE/SCHEMAで、VERBOSEが使われない限り、オブジェクト名を出力しないようにしました。 (Simon Riggs)

  • REINDEXから現在用いられないFORCEオプションを除きました。 (Fujii Masao)

E.5.3.5. オブジェクト操作

  • 行単位セキュリティ制御を追加しました。 (Craig Ringer, KaiGai Kohei, Adam Brightwell, Dean Rasheed, Stephen Frost)

    本機能は、あるテーブルに対しどのユーザが追加、変更、参照できるかの行ごとの制御を可能にします。新しいコマンドCREATE/ALTER/DROP POLICY、および、ALTER TABLE ... ENABLE/DISABLE ROW SECURITYによって制御されます。

  • テーブルを作った後にALTER TABLE ... SET LOGGED / UNLOGGEDWALログ書き出し状態を変更できるようにしました。 (Fabrízio de Royes Mello)

  • CREATE TABLE ASCREATE INDEXCREATE SEQUENCE、および、CREATE MATERIALIZED VIEWIF NOT EXISTS句を追加しました。 (Fabrízio de Royes Mello)

  • ALTER TABLE ... RENAME CONSTRAINTIF EXISTSに対応しました。 (Bruce Momjian)

  • いくつかのDDLコマンドでユーザ名を指定する箇所にカレントユーザ、セッションユーザの意味でCURRENT_USERSESSION_USERを使用できるようにしました。 (Kyotaro Horiguchi, Álvaro Herrera)

    現在、ALTER USERALTER GROUPALTER ROLEGRANT、および、ALTER object OWNER TOの各コマンドにて対応しています。

  • ドメインの制約へのコメントに対応しました。 (Álvaro Herrera)

  • いくつかのトリガ、外部キーを作成、変更するコマンドでロックレベルを下げました。 (Simon Riggs, Andreas Karlsson)

  • 対象テーブルに対するINSERT権限でLOCK TABLE ... ROW EXCLUSIVE MODEを可能にしました。 (Stephen Frost)

    これまではこのコマンドはUPDATEDELETETRUNCATEのいずれか権限が必要でした。

  • テーブルとドメインでCHECK制約を名前順に適用します。 (Tom Lane)

    これまでは順番は不確定でした。

  • CREATE/ALTER DATABASEdatistemplatedatallowconnを操作可能にしました。 (Vik Fearing)

    これによりシステムカタログpg_databaseの手動操作なしにこれらデータベースごとの設定を変更できます。

  • IMPORT FOREIGN SCHEMAコマンドを追加しました。 (Ronan Dunklau, Michael Paquier, Tom Lane)

    このコマンドはリモートサーバに在るテーブル群の構造に対応したローカルの外部テーブルを自動で作成します。

  • CHECK制約を外部テーブルに置けるようにしました。 (Shigeru Hanada, Etsuro Fujita)

    このような制約は、リモートサーバ上で強制されるものと仮定され、ローカル側では強制されません。しかしながら、制約による排除など、問い合わせの最適化では制約が成立しているものと仮定されます。

  • 外部テーブルが継承に参加できるようにしました。 (Shigeru Hanada, Etsuro Fujita)

    これを自然に働かせるため、外部テーブルが無効とマークされたチェック制約を持てるように、また、ストレージとOID属性の設定を可能としました。 ただし、これらの操作は外部テーブルに対して何の効果もありません。

  • 外部データラッパとカスタムスキャンで結合プッシュダウンの実装を可能にしました。 (KaiGai Kohei)

  • ddl_command_endイベントトリガが導入されたときはいつでも、DDL動作の調査するための詳細を取得します。 (Álvaro Herrera)

    この情報は集合を返す関数pg_event_trigger_ddl_commands()、あるいは、それでは不十分であるならC言語データ構造の解析を通して、利用できます。

  • テーブルのイベントトリガをALTER TABLEにより書換え可能にしました。 (Dimitri Fontaine)

  • データベースレベルのCOMMENTSECURITY LABEL、および、GRANT/REVOKEのイベントトリガに対応しました。 (Álvaro Herrera)

  • pg_event_trigger_dropped_objectsの出力列をいくつか追加しました。 (Álvaro Herrera)

    これにより削除操作の処理を容易にします。

E.5.3.6. データ型

  • xmlデータ型が空もしくは全て空白文字の内容を受け入れできるようにしました。 (Peter Eisentraut)

    これはSQL/XML仕様で必要とされています。

  • macaddr型の入力にxxxx-xxxx-xxxx形式が使えるようにしました。 (Herwin Weststrate)

  • interval型で精度とフィールド定義について非SQL標準の構文を禁止しました。 (Bruce Momjian)

    標準では、このような型定義は、例えば INTERVAL MINUTE TO SECOND(2) というように書かなければいけません。PostgreSQLはこれまで INTERVAL(2) MINUTE TO SECOND と書くことを許していましたが、これからは標準の方法で書かなければいけません。

  • inet/cidr型演算子の選択率見積もり関数を追加しました。また、テキスト検索関数の見積関数を改善しました。 (Emre Hasegeli, Tom Lane)

  • ロールや名前空間のOIDの入力や見栄えよい表示を簡単にするためのデータ型regroleregnamespaceを追加しました。 (Kyotaro Horiguchi)

E.5.3.6.1. JSON

E.5.3.7. 関数

  • numeric値のgenerate_series()を追加しました。 (Plato Malugin)

  • array_agg()ARRAY()が入力に配列を取れるようにしました。 (Ali Akbar, Tom Lane)

  • 配列の添え字を返す関数array_position()array_positions()を追加しました。 (Pavel Stehule)

  • pointpolygonの距離演算子<->を追加しました。 (Alexander Korotkov)

  • SIMILAR TOSUBSTRINGでマルチバイト文字によるエスケープを可能にしました。 (Jeff Davis)

    これまではシングルバイト文字のみエスケープとして使用可能でした。

  • 任意のソート可能なデータ型と一様でないバケット幅に対応した、width_bucket()の別形を追加しました。 (Petr Jelínek)

  • pg_read_file()や関連の関数にオプション引数missing_okを追加しました。 (Michael Paquier, Heikki Linnakangas)

  • 関数呼び出しで=>で名前のついたパラメータを指定できるようにしました。 (Pavel Stehule)

    これまでは := だけが利用できました。これにより、=>がユーザ定義演算子である可能性を排除することが必要となります。ユーザ定義演算子=>の作成では PostgreSQL 9.0 から警告が出ていました。

  • PostgreSQLによる丸め関数を使うプラットフォームにPOSIX準拠の丸め処理を追加しました。 (Pedro Gimeno Fortea)

E.5.3.7.1. システム情報関数
  • オブジェクトを一意に識別するOIDを返す関数pg_get_object_address()OIDに基づきオブジェクト情報を返す関数pg_identify_object_as_address()を追加しました。 (Álvaro Herrera)

  • pg_stat_activityのビュー問い合わせ、pg_cancel_backend()の実行、pg_terminate_backend()の実行において、セキュリティチェックを緩めました。 (Stephen Frost)

    これまでは対象のセッションを所有している特定のロールだけがこれら操作を実行できました。これからはこれらロールのメンバーであれば十分とします。

  • 統計スナップショットのタイムスタンプを出力する関数pg_stat_get_snapshot_timestamp()を追加しました。 (Matt Kelly)

    これは最後のスナップショットファイルがファイルシステムに書かれた時点をあらわします。

  • マルチトランザクションIDの年代を計算する関数mxid_age()を追加しました。 (Bruce Momjian)

E.5.3.7.2. 集約
  • inet/cidrデータ型に対するmin()/max()集約を追加しました。 (Haribabu Kommi)

  • 128ビットの整数がサポートされているなら、一部の集約関数で累算器に128ビット整数を使います。 (Andreas Karlsson)

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

  • PL/Pythonで複合型への対応を改善しました。 (Ed Behn, Ronan Dunklau)

    これによりPL/Python関数が複合型の配列を返せるようになります。

  • PL/Pythonの浮動小数点値の変換でデータ損失を減らしました。 (Marko Kreen)

  • SQLデータ型と手続き言語のデータ型との変換処理を定義可能にしました。 (Peter Eisentraut)

    この変更で新たなコマンドCREATE/DROP TRANSFORMが加わります。 また、hstore型、ltree型への、あるいはこれら型からの、PL/PerlおよびPL/Pythonとの任意選択の変換も追加されます。

E.5.3.8.1. PL/pgSQL サーバサイド言語
  • PL/pgSQL配列の性能を改善しました。 (Tom Lane)

  • PL/pgSQLASSERT文を追加しました。 (Pavel Stehule)

  • より多くのPL/pgSQLキーワードを識別子として使用可能にしました。 (Tom Lane)

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

  • pg_archivecleanuppg_test_fsyncpg_test_timingpg_xlogdumpcontribからsrc/binに移しました。 (Peter Eisentraut)

    この変更により、ほとんどのインストールでこれらのプログラムがデフォルトでインストールされるようになります。

  • フェイルバック後にマスタサーバを再同期させることができる、pg_rewindを追加しました。 (Heikki Linnakangas)

  • pg_receivexlogで物理レプリケーションスロットを管理できるようにしました。 (Michael Paquier)

    新たなオプション--create-slot--drop-slotにより制御します。

  • 新たな--synchronousオプションでpg_receivexlogWALを記憶装置に同期フラッシュするようにしました。 (Furuya Osamu, Fujii Masao)

    このオプションが無いと、WALファイルはクローズ時しかfsyncされません。

  • 新たなオプション--jobs によりvacuumdbが並列にバキュームできるようにしました。 (Dilip Kumar)

  • vacuumdbで複数の接続が必要であるとき、同じパスワードの入力を繰り返しプロンプトで要求しないようにしました。 (Haribabu Kommi, Michael Paquier)

  • reindexdb--verboseオプションを追加しました。 (Sawada Masahiko)

  • MS Windows上で、pg_basebackuptarフォーマットのときテーブル空間マッピングファイルを使い、シンボリックリンクと100文字以上の長さのファイルパスに対応しました。 (Amit Kapila)

  • pg_xlogdumpに要約統計を表示するオプション--statsを追加しました。 (Abhijit Menon-Sen)

E.5.3.9.1. psql
  • psqlでAsciiDocを出力できるようにしました。 (Szymon Guz)

  • psqlECHO変数に失敗したコマンドだけ表示するerrorsモードを追加しました。 (Pavel Stehule)

    この振る舞いはpsql-bオプションでも指定できます。

  • psqlの unicode linestyle で、カラム区切り、ヘッダ、境界線の制御ができます。 (Pavel Stehule)

    一重線または二重線に対応しています。デフォルトは一重線(single)です。

  • psqlPROMPT変数に複数行にわたる文の現在の行番号を表示する新オプション%lを追加しました。 (Sawada Masahiko)

  • \psetオプションにページャ起動を制御するpager_min_linesを追加しました。 (Andrew Dunstan)

  • ページャ起動を判断するときに使われるpsqlの行数カウントを改善しました。 (Andrew Dunstan)

  • --outputまたは--log-fileで指定されたファイルに書き込みできない場合、psqlは失敗するようになります。 (Tom Lane, Daniel Vérité)

    これまで、このようなケースでは事実上指定が無視されていました。

  • search_path変数を設定するときのpsqlタブ補完を追加しました。 (Jeff Janes)

    今のところ最初のスキーマのみタブ補完できます。

  • トリガとルールについてpsqlのタブ補完を改善しました。 (Andreas Karlsson)

  • psql\?ヘルプにvariablesoptionsの項目を追加しました。 (Pavel Stehule)

    \? variablesは、psqlの特別変数一覧を、\? optionsは、コマンドラインオプション一覧を表示します。 \? commandsは、従来の出力(単に \? と指定した場合)で現在もデフォルトとなっているメタコマンド一覧を表示します。これらのヘルプはコマンドラインオプション--help=項目でも得られます。

  • psql\db+でテーブル空間の大きさを表示します。 (Fabrízio de Royes Mello)

  • psql\dT+でデータ型の所有者を表示します。 (Magnus Hagander)

  • psql\watch\timingの情報を出力できるようにしました。

    また、通常は不必要なので、--echo-hiddenに対して\watch問い合わせのエコー出力を止めました。

  • psql\sf\efコマンドがECHO_HIDDENを尊重するようにしました。 (Andrew Dunstan)

  • psql\set\unset、および、:variable(変数参照)に対するタブ補完を改善しました。 (Pavel Stehule)

  • psql\cコマンドでロール名のタブ補完を可能にしました。

E.5.3.9.2. pg_dump
  • pg_dump--snapshotオプションで他セッションとスナップショットを共有できるようにしました。 (Simon Riggs, Michael Paquier)

    指定するリモートスナップショットはpg_export_snapshot()またはロジカルレプリケーションスロットの作成によりエクスポートされたものでなければいけません。これは複数のpg_dumpプロセス間で一貫したスナップショットを共有するのに使えます。

  • tarアーカイブフォーマットにおいて8GBを超えるサイズのテーブルに対応しました。 (Tom Lane)

    tarフォーマットのPOSIX標準では8GBを超えるtarアーカイブの要素を許可していませんが、ほとんどの近代的なtarの実装ではこれを可能とする拡張をサポートしています。 失敗させるのでなく、必要なら拡張フォーマットを使用するようにします。

  • pg_dumpが常にサーバとpg_dumpのバージョンを表示するようにしました。 (Jing Wang)

    これまでは--verboseモードのときだけバージョン情報が表示されていました。

  • 永らく無視されてきた-i/--ignore-versionオプションをpg_dumppg_dumpallpg_restoreから取り除きました。 (Fujii Masao)

E.5.3.9.3. pg_ctl
  • pg_ctlで複数の-oオプションに対応しました。これらの値は連結されます。 (Bruce Momjian)

  • MS Windowsでのログ出力において、pg_ctlのイベントソースを制御できるようになりました。 (MauMau)

    これは別にpostgresql.confに設定を持つサーバではなく、pg_ctlのみ制御します。

  • サーバの監視するアドレスにワイルドカード値(IPv4では0.0.0.0、IPv6では::)が設定された場合、文字通りにワイルドカードアドレスを試みるのではなくループバックアドレスから接続します。 (Kondo Yuta)

    この修正は主にWindowsに影響を及ぼします。 他のプラットフォームではpg_ctlはUnixドメインソケットを使うことを優先します。

E.5.3.9.4. pg_upgrade
  • pg_upgradecontribからsrc/binに移動しました。 (Peter Eisentraut)

    この変更に関連して、pg_upgrade_supportモジュールで提供されていた機能をサーバコアに移動しました。

  • pg_upgradeで複数の-o/-Oオプションに対応しました。これらの値は連結されます。 (Bruce Momjian)

  • pg_upgradeにおけるデータベースの照合順序の比較を改善しました。 (Heikki Linnakangas)

  • 8.3クラスタからのアップグレードのサポートを外しました。 (Bruce Momjian)

E.5.3.9.5. pgbench
  • pgbenchをcontribからsrc/binに移動しました。 (Peter Eisentraut)

  • excluding connections establishingのTPS値の計算を修正しました。 (Tatsuo Ishii, Fabien Coelho)

    pgbenchのスレッド数がクライアント接続数よりも少ないときには常に接続確立のオーバーヘッドが誤計算されていました。これは明らかにバグですが、TPS値がこれまでの結果と比較できなくなるため、9.5より前のバージョンへの修正は行いません。

  • 指定時間以上要したpgbenchトランザクションをカウントできるようにしました。 (Fabien Coelho)

    これは新たなオプション--latency-limitで制御されます。

  • pgbenchの\setrandomで正規分布/指数分布による生成を可能にしました。 (Kondo Mitsumasa, Fabien Coelho)

  • pgbench\setコマンドで複数の演算子を含む算術演算を扱えるようにし、また、サポートされる演算子に%(剰余)を加えました。 (Robert Haas, Fabien Coelho)

E.5.3.10. ソースコード

  • WALレコードフォーマットを単純にしました。 (Heikki Linnakangas)

    これにより外部ツールがより容易にどのブロックが変更されたかを追跡できます。

  • トランザクションコミットとアボートのWAL記録の表現を改善しました。 (Andres Freund)

  • 原子的メモリ操作のAPIを追加しました。 (Andres Freund)

  • カスタムパス、カスタムスキャン方式が可能になりました。 (KaiGai Kohei, Tom Lane)

    これにより拡張でオプティマイザとエグゼキュータをより大幅に制御できます。

  • 外部データラッパでフィルタ後のロックを可能にしました。 (Etsuro Fujita)

  • 外部テーブルをINSERT ... ON CONFLICT DO NOTHING問い合わせに含めることができます。 (Peter Geoghegan, Heikki Linnakangas, Andres Freund)

    これを扱えるようにするため外部テーブルラッパの修正が必要です。 外部テーブルに対するINSERT ... ON CONFLICT DO UPDATEはサポートされません。

  • hash_create()のシンプルバイナリキーハッシュ関数を選ぶAPIを改善しました。 (Teodor Sigaev, Tom Lane)

  • 並列実行基盤を改善しました。 (Robert Haas, Amit Kapila, Noah Misch, Rushabh Lathia, Jeevan Chalke)

  • Alpha (CPU)、Tru64 (OS)への移植を削除しました。

  • ARMv5とより古いCPUむけのスワップバイト命令によるスピンロック実装を削除しました。 (Robert Haas)

    ARMv5の弱いメモリ順序付けではこのロック実装は安全ではありません。 アトミックに対応した新しいgcc実装にてスピンロック対応は依然として可能です。

  • 極端に長い(100文字超)ファイルパスがtarファイルに書かれたときエラーを出します。 (Peter Eisentraut)

    tarはこのような長すぎるパスに対応しません。

  • カラムpg_seclabel.providerpg_shseclabel.providerのインデックス演算子クラスをtext_pattern_opsに変更しました。

    これは、クラスタ内の異なるデータベースが異なるデフォルト照合順序をもつとき、これらインデックスが問題を惹き起こすことを防ぎます。

  • スピンロックの基本命令をコンパイラバリアの機能に変更しました。 (Robert Haas)

E.5.3.10.1. MS Windows
  • Windows 8Windows Server 2012、および以降の Windows systems で高精度タイムスタンプを可能としました。 (Craig Ringer)

  • MS Windows では共有ライブラリをbinにインストールします。 (Peter Eisentraut, Michael Paquier)

  • MSVCビルドではsrc/test/modulescontribと一緒にインストールします。 (Michael Paquier)

  • configure--with-extra-versionオプションをMSVCビルドでも受け付けるようにしました。 (Michael Paquier)

  • PGFILEDESCMSVC contribビルドに渡します。 (Michael Paquier)

  • 全てのMSVCビルドされたバイナリにアイコンを、また、全てのMS Windowsバイナリにバージョン情報を添加しました。 (Noah Misch)

    MinGWでは既にそのようにアイコンが与えられていました。

  • getopt_long()内部実装にオプション引数対応を加えました。 (Michael Paquier, Andres Freund)

    これはMSVCで使われます。

E.5.3.11. 追加モジュール

  • pg_stat_statementsに 時間の最小、最大、平均、標準偏差の統計を追加しました。 (Mitsumasa Kondo, Andrew Dunstan)

  • pgcryptoPGP Armorヘッダから抽出をするpgp_armor_headers()関数を追加しました。 (Marko Tiikkaja, Heikki Linnakangas)

  • unaccentで空の置き換え文字列を可能としました。 (Mohammad Alhashash)

    これは発音区別記号が複数文字に分かれて表現される言語で有用です。

  • unaccentで複数文字からなる変換元文字を可能にしました。 (Tom Lane)

    これは発音区別記号が複数文字に分かれて表現される言語で有用です。 また、より複雑なunaccent辞書も可能にします。

  • 追加的なテーブルサンプリング方式をできるようにするcontribモジュールtsm_system_rowstsm_system_timeを追加しました。 (Petr Jelínek)

  • pageinspectGINインデックスを解析する関数を追加しました。 (Heikki Linnakangas, Peter Geoghegan, Michael Paquier)

  • pg_buffercacheの表示にバッファピンについての情報を追加しました。 (Andres Freund)

  • pgstattuplepgstattuple_approx()でより少ない負荷でおおよその答えを報告できるようにしました。 (Abhijit Menon-Sen)

  • dummy_seclabeltest_shm_mqtest_parser、および、worker_spiを、contribからsrc/test/modulesに移動しました。 (Álvaro Herrera)

    これらモジュールはサーバテストだけのためのものであって、PostgreSQLをパッケージングする際のビルドやインストールでは必要とされません。