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

リリース日: 2014-07-24

このリリースは9.3.4に対し、各種不具合を修正したものです。 9.3メジャーリリースにおける新機能については、E.51. リリース9.3を参照してください。

E.46.1. バージョン9.3.5への移行

9.3.Xからの移行ではダンプ/リストアは不要です。

しかしながら、本リリースでは、pg_upgradeのロジックエラーや、いくつかのGiSTインデックスのインデックス破損問題を修正しています。 下記に示すはじめの2つの変更点を確認し、使用しているインストレーションが影響を受けるか、その場合どのような処置を施すべきか判断してください。

また、9.3.4よりも前のリリースからアップグレードする場合は、E.47. リリース9.3.4を参照して下さい。

E.46.2. 変更点

  • pg_upgradeにおいて、initdbにより残されたpg_multixactファイルを削除しました。(Bruce Momjian)

    9.3.5以前のバージョンのpg_upgradeでデータベースクラスタを9.3にアップグレードした場合、 残るべきではない$PGDATA/pg_multixact/offsets/0000ファイルが残っており、 これはいずれVACUUMコマンドで問題を引き起こす原因になっていました。 しかしながら、一般的なケースではこのファイルは実質的に有効であり、削除すべきではありません。 この問題があるかどうかは、以下のクエリをスーパーユーザでクラスタのどのデータベースにでも実行することで確認できます。

    WITH list(file) AS (SELECT * FROM pg_ls_dir('pg_multixact/offsets'))
    SELECT EXISTS (SELECT * FROM list WHERE file = '0000') AND
           NOT EXISTS (SELECT * FROM list WHERE file = '0001') AND
           NOT EXISTS (SELECT * FROM list WHERE file = 'FFFF') AND
           EXISTS (SELECT * FROM list WHERE file != '0000')
           AS file_0000_removal_required;

    このクエリがtが返した場合、手動で$PGDATA/pg_multixact/offsets/0000ファイルを削除してください。 クエリがfを返した場合は、何もしないでください。

  • contrib/btree_gist拡張モジュールにおけるbitカラムのインデックスの初期化パディングバイトを修正しました。 (Heikki Linnakangas)

    このエラーは、等価であるべき値を等価と見なさないことが原因で、正しくないクエリー結果を引き起こします。 bit型またはbit varying型のカラムにGiSTインデックスを使っている場合、このアップデート適用後にREINDEXが必要です。

  • GINリストページを削除した際、ページを破損から保護します。(Heikki Linnakangas)

    インデックスのページ更新をディスクへの書き込み中にシステムクラッシュが発生した場合、インデックス破損が起こる可能性を防ぐ修正です。

  • WALからの更新を再実行中にGiSTインデックスページのリンク先を削除しません。(Heikki Linnakangas)

    このエラーはホットスタンバイ中にGiSTインデックススキャンを実施した場合、一時的に間違った回答を引き起こす可能性がありました。

  • SP-GiSTテキストインデックスへの挿入中に無限ループに陥る稀なケースを修正しました。(Tom Lane)

  • -|-(隣接範囲)演算子を使ったSP-GiSTインデックス検索からの応答が間違っているのを修正しました。(Heikki Linnakangas)

  • pg_multixact/membersでの周回データの処理を修正しました。(Álvaro Herrera)

  • pg_multixactの切り詰めをVACUUM中ではなく、チェックポイント中に行うようにしました。(Álvaro Herrera)

    この変更により、クラッシュ後のWALリプレイにおいて、まだ必要とされるかもしれないpg_multixactセグメントが削除されないことを保証しました。

  • WALリカバリー後にall-visibleフラグが不整合を起こす可能性があったのを修正しました。(Heikki Linnakangas)

  • ReceiveSharedInvalidMessages関数を入れ子で呼ばれた場合、キャッシュの無効化が正しくない可能性があり、修正しました。(Andres Freund)

  • タプル更新の際、他プロセスによって同時にロックされ競合状態が発生するのを修正しました。(Andres Freund, Álvaro Herrera)

  • 継承された子テーブルを読み込むUNION ALL上のサブクエリによって、 プランナがcould not find pathkey item to sortエラーになる障害を修正しました。

  • ターゲットリストに複数行を返す関数がある場合、サブクエリの出力が一意であると決めつけないようにしました。(David Rowley)

    この見落としはWHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)のような構成で最適化ミスを引き起こす可能性がありました。

  • 可能であればAND/OR条件の入力から null定数を除去するようにプランナを改善しました。(Tom Lane)

    より積極的にパラメータ置換をすることにより、9.2以上の版において古いバージョンのものより悪いプランになるかもしれなかったのを、この変更で修正しました。

  • 同等のVARIADIC型の関数呼び出しと非VARIADIC型の関数呼び出しを、プランナが同等の物として見なすことを保証しました。(Tom Lane)

    この不具合では、例えば可変引数関数に対して要素インデックスを使うことに失敗する可能性がありました。 このようなインデックスを使うべき可変引数関数においては、インデックス或いはビューの再生成が必要でした。 この修正は既存の9.3がインストールされたシステムでも有効です。

  • json_populate_recordset()とそれに類する関数において、入れ子のJSONオブジェクトの扱いを修正しました。(Michael Paquier, Tom Lane)

    入れ子のJSONオブジェクトは出力表示ではなく、親オブジェクトの前フィールドの結果であるべきでした。

  • to_json()および関連する関数で、入力型カテゴリの識別を修正しました。(Tom Lane)

    JSONの結果内でmoneyフィールドのクオートが不十分であることが知られており、他のデータタイプでも同様に誤った結果になっていたかもしれません。

  • 複合要素の構造体のTOASTフィールド取り出し失敗を修正しました。(Tom Lane)

    これは、TOASTポインタが参照している値を得ずに他のテーブルにコピーできたケースの修正です。 オリジナルデータが後から削除された場合、不正な領域を指し示すポインタ(dangling pointer)となってしまい、missing chunk number 0 for toast value ...のようなエラーを引き起こしていました。

  • Appendプラン出力の行全体を参照することによって、record type has not been registeredエラーとなる問題を修正しました。(Tom Lane)

  • カーソルを巻き戻している間にユーザ定義関数を呼び出した場合、クラッシュする可能性があり、修正しました。(Tom Lane)

  • FROM 句で関数が引数を評価する際のメモリリーク(クエリー処理内限定)を修正しました。(Tom Lane)

  • 正規表現処理中のメモリリーク(セッション内限定)を修正しました。(Tom Lane、Arthur O'Dwyer、Greg Stark)

  • hungarian.stopのデータエンコーディングエラーを修正しました。(Tom Lane)

  • default_with_oidsがtrueの場合でも、外部テーブルがOID付で作成される事を防止しました。(Etsuro Fujita)

  • 実行中のトランザクションで行を挿入し、当該行を削除したサブトランザクションがロールバックした場合の、行の有効性チェックを修正しました。(Andres Freund)

    これを行った後、同一トランザクション内で、CREATE INDEXまたはCLUSTERが実行された場合、 問題(少なくとも誤ったワーニングが出て、最悪の場合、無限ループに陥る)の原因となります。

  • PREPARE TRANSACTION中は、pg_stat_activityxact_startの値を消去します。(Andres Freund)

    PREPAREコマンド実行後、トランザクション内に元のセッションは最早存在しないので、トランザクション開始時刻を表示し続けるべきではありません。

  • テキスト検索オブジェクトに対するREASSIGN OWNEDが失敗しないように修正しました。(Álvaro Herrera)

  • VACUUM FULL中にpg_classrelminmxidの値が戻らないようにしました。(Álvaro Herrera)

  • ルールとビューのダンプで読みやすさの向上と過度の空白文字を避けるためにインデントを減らしました。(Greg Stark, Tom Lane)

    この変更は、複数のユニオンのリストのように、恐らくユーザが入れ子だと考えていないケースを含め、入れ子構造に貼り付けられるインデントの総量を減らすものです。 恐らく深い入れ子構造では空白文字の総量はO(N^2)で増加し続け、パフォーマンスの問題やメモリ不足エラーを起こすリスクもありました。 現在、インデントは40の剰余数に減らしています。これは最初は奇妙に見えますが、単純にインデントを制限するよりも可読性を保つことが出来ます。 ユニオンのリストを括弧で括った場合の冗長性も同様に減らされています。

  • 後から追加されるカラムによってUSING節にマッチする複数の入力カラムがもたらされる場合の、ルールとビューのダンプを修正しました。(Tom Lane)

  • 削除された列を含んだ複合型の値を返すFROM句を持つ関数のビュー出力を修正しました。(Tom Lane)

  • postmaster起動中はシグナルをブロックします。(Tom Lane)

    これにより、例えば起動途中にSIGINTを受け取っても、postmasterは適切に後片付けを行う事ができるようになります。

  • IPアドレスの代わりにホスト名がpg_hba.confに定義されている場合、クライアントのホスト名検索処理を修正しました。(Tom Lane)

    DNSの逆引き検索に失敗した場合、エントリーがマッチしない事を黙認せず報告することを保証しました。 また、DNS逆引き検索に失敗した場合に発生していた、ホスト名エントリー毎でなく、コネクション毎に検索する事を保証しました。

  • rootユーザでも postgres -C 変数およびpostgres --describe-configを使うことができるようにしました。(MauMau)

    これらの操作はルートでのサーバ起動禁止に必要では無く、制限を緩和することによってpg_ctlが失敗する幾つかのシナリオを回避できます。

  • make checkで一時的に起動されたpostmasterのUNIXドメインソケットを保護します。(Noah Misch)

    ローカルユーザはサーバのブートストラップスーパーユーザとしてソケットファイルにアクセス出来、接続可能でした。 そのため、任意のコードをテストを実行しているオペレーティングシステムのユーザとして実行可能でした。 これは既にCVE-2014-0067の中で指摘されていました。 この変更では、サーバのソケットを一時ファイルシステム/tmp配下のモード0700のサブディレクトリに配置することで、リスクを防御します。 UNIXソケットがサポートされていないプラットフォーム、特にWindowsでは一時postmasterがローカルTCP接続を必要とするため、この危険性は残ります。

    この変更の有益な影響は、DEFAULT_PGSOCKET_DIRを上書きするビルドのmake check テストが簡単になることです。 よく使われるデフォルトではない/var/run/postgresqlのようなファイルには、 ビルドユーザに書き込み権限がないために必要とされる回避策が、今後必要とされなくなります。

  • テーブルスペース作成のWALリプレイをWindowsで動作するように修正しました。(MauMau)

  • Windowsでソケット生成失敗の判定処理を修正しました。(Bruce Momjian)

  • Windowsで、設定ファイルから(log_connectionsのような)PGC_BACKENDパラメータ値を、新しい接続への適用を許可します。(Amit Kapila)

    以前は、起動後にファイルのパラメータを変更しても反映されませんでした。

  • Windowsの実行パス名を適切にクオートします。(Nikhil Deshpande)

    この見落としは、インストールパスにスペースと@が両方含まれる場合、 Windowsでinitdbpg_upgradeがエラーになる原因となっていました。

  • macOSでlibpythonのリンクを修正しました。(Tom Lane)

    これまでの方式では、Xcode 5.0とそれ以降で提供されているPythonライブラリでエラーになります。

  • クライアントが取り込むよりも速くサーバがデータを送り続けた場合、libpq のバッファが肥大化することを回避しました。(Shin-ichi Morita、Tom Lane)

    libpqはOut of Memoryになるまで入力バッファの拡張を強要していた可能性がありました (lost synchronization with serverの報告は誤解を招いたかもしれません)。 一般的な環境下では、recv() ループが取り込むよりもずっと早くデータが送られ続けるというのは、かなりこじつけで、 クライアントが人為的にスケジューラによる制約で遅くなっている場合に観測されているくらいです。

  • libpqのLDAP照会で、意図した通りのタイムアウトを保証しました。(Laurenz Albe)

  • char ポインタの配列を複数行返すFETCHステートメントがターゲットの場合、ecpgが正しく動作するように修正しました。また、その他の配列操作も修正しました。(Ashutosh Bapat)

  • テーブルの主キーに依存したマテリアライズドビューに対応するため、pg_dumpを修正しました。(Tom Lane)

    これはビューのクエリーがGROUP BYでリストを纏める機能を利用している場合に発生します。 pg_dumpはそれらを混同してしまい、マテリアライズドビューを通常のビューとしてダンプしていました。

  • pg_dumpall-iオプションのパースを修正しました。(Tom Lane)

  • pg_restoreの、古いスタイルのラージオブジェクトのコメント処理を修正しました。(Tom Lane)

    9.0までのバージョンのpg_dumpで生成したアーカイブファイルで、ラージオブジェクトに数件以上のコメントが含まれている場合、 アーカイブファイルを直接データベースにリストアすると失敗していました。

  • 新しいサーバではTOASTテーブルを作るが古いバージョンでは作らないケースについてpg_upgradeを修正しました。(Bruce Momjian)

    この稀な状況によりrelation OID mismatchエラーを引き起こす可能性がありました。

  • pg_upgradepg_database.datminmxidpg_class.relminmxidの古いバージョンの値を保持するか、9.3以前からのアップグレード時に適切な値を代入します。 また、コアサーバの不適切な値を防ぎます。(Bruce Momjian, Álvaro Herrera, Tom Lane)

    これらの変更は、新しいデータベースサーバ起動時にオートバキュームが直ちにクラスタの全内容をスキャンを要求する、 或いは固定されていないマルチトランザクションID(MXID)の追跡が完全に出来なくなるシナリオを防ぎます。

  • contrib/auto_explainによってユーザのEXPLAINの出力が変化するのを防ぎました。(Tom Lane)

    auto_explainが有効な場合、EXPLAIN (ANALYZE, TIMING OFF)コマンドを実行してもタイミング情報が出力される可能性がありました。

  • contrib/dblinkのクエリー実行範囲内でのメモリリークを修正しました。(MauMau, Joe Conway)

  • contrib/pgcrypto関数で、処理が戻る前にスタック変数から機密情報を削除する事を保証します。(Marko Kreen)

  • contrib/pgstattuplepgstat_heap()が解放済メモリを使わないようにしました。(Noah Misch)

  • contrib/uuid-osspモジュールで、呼び出し間でOSSP UUIDライブラリの状態をキャッシュします。(Tom Lane)

    この改善はUUID生成の効率を上げ、/dev/urandomから取り出すエントロピー量を減らします。

  • タイムゾーンデータファイルをtzdataリリース2014eに更新しました。 クリミア、エジプト、モロッコでの夏時間の変更が含まれます。