リリース日: 2017-05-11
このリリースは9.6.2に対し、各種不具合を修正したものです。 9.6メジャーリリースにおける新機能については、E.17 を参照してください。
9.6.Xからの移行ではダンプ/リストアは不要です。
しかしながら、認証にユーザパスワードを利用する外部データサーバを使っている場合には、以下の変更点の1番目の項目を参照してください。
また、「ロジカルデコーディング」に依存したサードパーティレプリケーションツールを使っているなら、以下の変更点の4番目の項目を参照してください。
また、9.6.2よりも前のバージョンからアップグレードする場合は、E.15を参照して下さい。
ユーザマッピングオプションとして格納されたパスワードを保護するため、pg_user_mappings
.umoptions
の可視性を厳格化しました。
(Michael Paquier, Feike Steenbergen)
これまでのコードは、外部サーバオブジェクトの所有者やサーバのUSAGE
権限を付与されているユーザに、そのサーバに関連した全てのユーザマッピングのオプションを参照することを許していました。
これには他のユーザのパスワードがしっかり含まれているかもしれません。
information_schema.user_mapping_options
の振る舞いと一致するように、すなわち、これらオプションがマップされているユーザに、またはマッピングがPUBLIC
で現在ユーザがサーバ所有者の場合に、あるいは現在ユーザがスーパーユーザである場合に、可視であるようにビュー定義を修正しました。
(CVE-2017-7486)
このパッチのみでは新たにinitdbされたデータベースでの動作しか修正しません。 この変更を既存のデータベースに適用するには、E.13のCVE-2017-7547の変更項目で示される修正手順を行う必要があります。
漏洩のある演算子を通した統計情報の露出を防止しました。 (Peter Eisentraut)
プランナの一部の選択率見積関数は、ユーザ定義演算子を頻出値やヒストグラム項目のようなpg_statistic
から取得された値に適用します。
これはテーブル権限がチェックされる前に行われるので、悪意のユーザがこの振る舞いを読み取り権限を持たないテーブル列の値を取得するために悪用するおそれがありました。
修正するため、演算子の実装関数が漏洩防止を保証されておらず、呼び出しているユーザが統計情報を要するテーブル列の読み取り権限を持っていない場合には、デフォルトの見積で代用するようにしました。
実際はたいていのケースでこれら基準のうち少なくとも一つを満たします。
(CVE-2017-7484)
libpqのPGREQUIRESSL
環境変数の認識が復旧されました。
(Daniel Gustafsson)
環境変数の処理がPostgreSQL 9.3で意図せず外されていましたが、
ドキュメントはそのままでした。
ユーザがSSL暗号化接続を強制するために、もはや保証されないであろうこの環境変数に依存しているかもしれず、これはセキュリティ上の危険を生じさせます。
この環境変数の処理を復旧しましたが、9.3以降のコードで正しく動作している設定を壊さないように、PGSSLMODE
よりも低い優先順位を与えました。
(CVE-2017-7485)
ロジカルデコーディング中の初期スナップショットが無効になる可能性があり、これを修正しました。 (Petr Jelinek, Andres Freund)
ロジカルデコーディングのレプリケーションスロットむけに作られた初期スナップショットが潜在的に不正となりえました。 これによりロジカルデコーディングを使うサードパーティツールが不完全あるいは不正な初期データのコピーをする可能性があります。 ソースサーバがスロットを作るときに高負荷特の場合、または、他のロジカルスロットが既に存在している場合に特に発生しやすい現象です。
ロジカルデコーディングに依存したレプリケーションツールを使っていて、レプリケーション開始時に空でないデータセットをコピーしたであろう場合には、アップグレードを導入した後にレプリカを再作成するか、ソースサーバと比較してその内容を検証することが推奨されます。
ログをとらないインデックスの「初期フォーク」の破損を修正しました。 (Robert Haas, Michael Paquier)
これによりクラッシュと再起動の後に、ログをとらないインデックスが不正な状態になるおそれがありました。 この問題はインデックスが削除、再構築されるまで持続するでしょう。
スタンバイサーバが、準備されているけれどコミットされていない2相トランザクションを再生するときのpg_subtrans
の項目の誤った再構築を修正しました。
(Tom Lane)
大抵の場合は目に見える悪影響には至りませんが、稀な場合にpg_subtrans
で循環参照になり、2相トランザクションで修正された行を検査する問い合わせで潜在的に無限ループをひき起こす可能性がありました。
文字列バッファ初期化の失敗によるwalsenderでのクラッシュの可能性を回避しました。 (Stas Kelvich, Fujii Masao)
GiSTインデックスで最近傍インデックスオンリースキャンの再スキャンをするとき可能性のあるクラッシュを修正しました。 (Tom Lane)
postmasterによる複数パラレルワーカープロセス起動の遅延を防止しました。 (Tom Lane)
二つ以上のワーカプロセスに対する問い合わせの要求を満たす前に、あるいは、複数の問い合わせが各ワーカに同時に要求されたときに、著しい遅延(長くて数十秒)になることがありました。 大部分のプラットフォームでは不運なタイミングを要しますが、一部においてはよくあるケースでした。
バックグラウンドワーカプロセスについてのfork()
失敗に対するpostmasterの処理が修正されました。
(Tom Lane)
これまでは、postmasterはプロセスが正常に起動されたかのようにワーカ状態の一部を更新していて、結果としてその後に混乱が生じていました。
入れ子の集合演算子のプラン作成時に「no relation entry for relid 0(relid 0に対応するリレーション項目がありません)」エラーの可能性があり、修正されました。 (Tom Lane)
パラレルクエリのプラン作成での各種の些少な問題を修正しました。 (Robert Haas)
「物理ターゲットリスト」最適化をカスタムスキャンに適用しないようにしました。 (Dmitry Ivanov, Tom Lane)
この最適化はタプルの全列を取得することが低コストであることを想定していて、それは通常のPostgresのタプルでは正しいのですが、カスタムスキャンプロバイダに対する場合はそうでないかもしれません。
FOR ALL
行単位セキュリティポリシーを適用するときに正しい副式を使うようにしました。
(Stephen Frost)
場合によっては、USING
制約がより適切であるときにWITH CHECK
制約が適用されていました。
拡張のスクリプトで問い合わせの構文解析に直前のDDLの結果が見えることを保証しました。 (Julien Rouhaud, Tom Lane)
拡張のスクリプトファイル内のコマンド間でキャッシュをフラッシュする手順が欠けていたため、ユーティリティ以外の問い合わせには直前のALTER TABLE ... RENAME
のようなカタログ変更の結果が見えないかもしれませんでした。
ALTER TABLE ... ALTER COLUMN TYPE
が既存インデックスを再構築するときのテーブルスペースの権限検査を省略しました。
(Noah Misch)
呼び出すユーザがインデックスを含むテーブルスペースに対するCREATE
権限をそのとき持っていなかった場合、コマンドは失敗していました。
この振る舞いは役に立たないと考えられるので、検査を省略し、ここではインデックスを再構築できるようにしました。
制約がNO INHERIT
と印付けされているときには、ALTER TABLE ... VALIDATE CONSTRAINT
が子テーブルに再帰処理をしないように修正しました。
(Amit Langote)
この修正は一致する制約が子テーブルに無いときに望まれない「constraint does not exist(制約がありません)」エラーになるのを防ぎます。
元となるテーブルの行単位セキュリティが有効のときにCOPY ... TO
でダングリングポインタを回避しました。
(Tom Lane)
通常は無害ですが、ときどき予期せぬエラーやクラッシュをひき起こしていました。
CLUSTER
とVACUUM FULL
で既に閉じたrelcache項目へのアクセスを回避しました。
(Tom Lane)
不運な場合に対象テーブルのインデックスが誤った永続性設定で再構築される可能性がありました。
ページピンの競合によりスキャンできなかったページを適切に計算するようにVACUUM
を修正しました。
(Andrew Gierth)
これはテーブルのタプル数の過小見積をもたらす傾向がありました。
小さくて競合が激しいテーブルという最悪の場合には、VACUUM
がテーブルにはタプルが一切含まれないという不正な報告をして、非常に悪いプラン選択をもたらす可能性がありました。
ハッシュ結合の中での大量タプル転送ループを問い合わせキャンセル要求により確実に割り込みできるようにしました。 (Tom Lane, Thomas Munro)
SP-GiSTでのある種のbox
演算子に対する誤った対応を修正しました。
(Nikita Glukhov)
演算子&<
、&>
、&<|
および|&>
を使うSP-GiSTインデックススキャンは誤った答えを生み出していました。
interval
の比較で整数オーバーフロー問題を修正しました。
(Kyotaro Horiguchi, Tom Lane)
約296000年より大きい期間に対してinterval
型の比較演算子が誤った答えを生み出す可能性がありました。
このような大きい値を含む列のインデックスは壊れているかもしれないので、インデックス再構築をしたほうがよいです。
tableforest
= falseのとき、cursor_to_xml()
が正しいな出力をするように修正しました。
(Thomas Munro, Peter Eisentraut)
これまでは<table>
要素の囲みを生成していませんでした。
float8_timestamptz()
とmake_interval()
で端数丸めの問題を修正しました。
(Tom Lane)
これら関数は浮動小数点の値から整数のマイクロ秒に変換するときに丸めでなく、切り捨てをしていました。これにより予期せずひとつ少ない結果がもたらされる可能性がありました。
pg_get_object_address()
を正しく演算子族のメンバーを処理するように修正しました。
(Álvaro Herrera)
非排他的バックアップを中止しようとしたときのpg_stop_backup()
のキャンセルについて修正しました。
(Michael Paquier, David Steele)
非排他的バックアップが終了するのを待つ間にpg_stop_backup()
がキャンセルされた場合、関連する状態に不整合が残り、新たな排他的バックアップを開始できない可能性がありました。また、他の細かな問題がありました。
pg_timezone_names
ビューの性能を改善しました。
(Tom Lane, David Rowley)
多数の大きいブロックを含むコンテキストについてメモリ管理オーバーヘッドを軽減しました。 (Tom Lane)
lseek()
とclose()
の稀な場合のエラーに対するいいかげんな処理を修正しました。
(Tom Lane)
どちらも通常ではあまり失敗しないシステムコールですが、失敗した場合にはfd.c
がかなり混乱する可能性がありました。
postmasterがWindowsサービスとして実行しているかどうかの誤った検査を修正しました。 (Michael Paquier)
これは、アクセス不能であるときにイベントログに書き出しを試みて、そのため全くログが書かれない結果をもたらしました。
COMMIT PREPARED
とROLLBACK PREPARED
に対応するようにecpgを修正しました。
(Masahiko Sawada)
ecpgで、$でクォートされた文字列リテラルを処理する際の二重解放エラーを修正しました。 (Michael Meskes)
--connect
オプションと--rate
オプションの組み合わせを正しく処理するようにpgbenchを修正しました。
(Fabien Coelho)
ドキュメント通り--builtin
という長い形式のオプションに従うようにpgbenchを修正しました。
(Tom Lane)
--clean
オプションを使ったときにpublic
スキーマの権限を正しく処理するように、pg_dump/pg_restoreを修正しました。
(Stephen Frost)
他のスキーマは与えられた権限が無く始まりますが、public
はそうではなく、ここでは--clean
オプションのために削除とリストアが行われたときには特別な扱いが必要です。
pg_dumpで、コメントとデータベースオブジェクトのいくつかのタイプのセキュリティラベルに対する、誤ったスキーマと所有者の印付けを修正しました。 (Giuseppe Broccolo, Tom Lane)
単純な使い方の場合には悪影響はありませんが、例えばスキーマを指定したリストアでは含まれるべきコメントが無視される可能性がありました。これはダンプ時にそれらが関連するオブジェクトのスキーマに属するという印付けがされなかったためです。
pg_dumpの手続き言語の初期権限のための問い合わせのタイプミスを修正しました。 (Peter Eisentraut)
これによりpg_dumpは常に手続き言語は初期権限を持たないとみなしていました。 ほとんどの手続き言語はその通りであるため、このバグによる悪影響はおそらく稀です。
pg_restore -l
で、SQLオブジェクト名に改行が含まれるときに無効なリストファイルが出力されるのを回避しました。
(Tom Lane)
改行を空白で置き換えました。出力をpg_restore -L
の用途に使えるようにするにはこれで十分です。
「ラージオブジェクト」(BLOB)に付けられたコメントとセキュリティラベルを移行するようにpg_upgradeを修正しました。 (Stephen Frost)
これまで、ラージオブジェクトは新データベースに正しく移行されていましたが、それに付加されたコメントとセキュリティラベルが失われていました。
contrib/adminpack
のpg_file_write()
関数でエラー処理を改善しました。
(Noah Misch)
特にfclose()
から報告されたエラーを検知していませんでした。
contrib/dblink
で新たな無名接続を確立するときに、前の無名接続がリークするのを回避しました。
(Joe Conway)
contrib/pg_trgm
の正規表現からのトライグラム抽出を修正しました。
(Tom Lane)
場合によっては、何にも決してマッチしない壊れたデータ構造を生み出し、トライグラムインデックスを使うGINまたはGiSTのインデックススキャンが正規表現へのマッチを何も見つけられない結果になります。
contrib/postgres_fdw
で、送出可能な拡張で提供される関数を含む結合条件をリモートサーバにプッシュできるようにしました。
(David Rowley, Ashutosh Bapat)
MSVCビルドでTcl 8.6に対応しました。 (Álvaro Herrera)
私たちのタイムゾーンライブラリのコピーをIANA release tzcode2017bに同期しました。 (Tom Lane)
これは、2038年1月の一部の夏時間遷移に影響するバグを修正します。
タイムゾーンデータファイルをtzdata release 2017bに更新しました。チリ、ハイチ、モンゴルの夏時間法の変更、エクアドル、カザフスタン、リベリア、スペインの歴史的修正が含まれます。 南米、太平洋、インド洋、および、一部アジア・中東の国々における多数のタイムゾーンを、数字による省略形に切り替えました。
IANAタイムゾーンデータベースはこれまで全てのタイムゾーンについて文字による省略形を提供しましたが、地元の人々の間でほとんど、あるいは全く通用していない省略形をしばしば作成していました。
IANAは英語の省略形が現実に使われている形跡がないゾーンにおいてはUTCオフセット数値を使うことを選ぶという方針に転換しようとしてるところです。
少なくともしばらくの間、PostgreSQLはタイムスタンプの入力に、このような削除された省略形を引き続き受け入れます。
しかし、それらはpg_timezone_names
ビューには現れず、出力にも使用されなくなります。
MSVC ビルドにおいて、POSIX形式のタイムゾーン名に対して正しい夏時間規則を使用するようにしました。 (David Rowley)
MicrosoftのMSVCビルドスクリプトはposixrules
ファイルをタイムゾーンディレクトリツリーにインストールするのを怠っていました。
この結果、POSIX形式のタイムゾーン名に対し想定される夏時間の振る舞いについて、タイムゾーンコードがビルトインの規則に退行してしまっていました。
歴史的な理由により、その組み込み規則は、米国が2007年より前に使っていた夏時間規則(すなわち、4月最初の日曜日と 10月最終の日曜日の変更)に引き続き対応しています。
この修正にともない、POSIX形式のゾーン名はUS/Eastern
ゾーンの現在および歴史的な夏時間遷移日を使います。
そのようにしたくない場合には、posixrules
ファイルを削除するか、他のゾーンファイルのコピーで置き換えてください(8.5.3参照)。
キャッシュ利用のため、このような変更を反映させるにはサーバの再起動が必要であることに注意してください。