リリース日: 2017-05-11
このリリースは9.2.20に対し、各種不具合を修正したものです。 9.2メジャーリリースにおける新機能については、E.109を参照してください。
PostgreSQLコミュニティは9.2.Xリリースシリーズに対するアップデートのリリースを2017年9月に停止する予定です。 早めに新しいリリースのブランチに更新することを推奨します。
9.2.Xからの移行ではダンプ/リストアは不要です。
しかしながら、認証にユーザパスワードを利用する外部データサーバを使っている場合には、以下の変更点の1番目の項目を参照してください。
また、9.2.20よりも前のリリースからアップグレードする場合は、E.89を参照して下さい。
ユーザマッピングオプションとして格納されたパスワードを保護するため、pg_user_mappings
.umoptions
の可視性を厳格化しました。
(Michael Paquier, Feike Steenbergen)
これまでのコードは、外部サーバオブジェクトの所有者やサーバのUSAGE
権限を付与されているユーザに、そのサーバに関連した全てのユーザマッピングのオプションを参照することを許していました。
これには他のユーザのパスワードがしっかり含まれているかもしれません。
information_schema.user_mapping_options
の振る舞いと一致するように、すなわち、これらオプションがマップされているユーザに、またはマッピングがPUBLIC
で現在ユーザがサーバ所有者の場合に、あるいは現在ユーザがスーパーユーザである場合に、可視であるようにビュー定義を修正しました。
(CVE-2017-7486)
このパッチのみでは新たにinitdbされたデータベースでの動作しか修正しません。 この変更を既存のデータベースに適用するには、E.87にあるCVE-2017-7547に対する変更点に示した正しい手順に従ってください。
漏洩のある演算子を通した統計情報の露出を防止しました。 (Peter Eisentraut)
プランナの一部の選択率見積関数は、ユーザ定義演算子を頻出値やヒストグラム項目のようなpg_statistic
から取得された値に適用します。
これはテーブル権限がチェックされる前に行われるので、悪意のユーザがこの振る舞いを読み取り権限を持たないテーブル列の値を取得するために悪用するおそれがありました。
修正するため、演算子の実装関数が漏洩防止を保証されておらず、呼び出しているユーザが統計情報を要するテーブル列の読み取り権限を持っていない場合には、デフォルトの見積で代用するようにしました。
実際はたいていのケースでこれら基準のうち少なくとも一つを満たします。
(CVE-2017-7484)
ログをとらないインデックスの「初期フォーク」の破損を修正しました。 (Robert Haas, Michael Paquier)
これによりクラッシュと再起動の後に、ログをとらないインデックスが不正な状態になるおそれがありました。 この問題はインデックスが削除、再構築されるまで持続するでしょう。
スタンバイサーバが、準備されているけれどコミットされていない2相トランザクションを再生するときのpg_subtrans
の項目の誤った再構築を修正しました。
(Tom Lane)
大抵の場合は目に見える悪影響には至りませんが、稀な場合にpg_subtrans
で循環参照になり、2相トランザクションで修正された行を検査する問い合わせで潜在的に無限ループをひき起こす可能性がありました。
拡張のスクリプトで問い合わせの構文解析に直前の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(制約がありません)」エラーになるのを防ぎます。
ページピンの競合によりスキャンできなかったページを適切に計算するようにVACUUM
を修正しました。
(Andrew Gierth)
これはテーブルのタプル数の過小見積をもたらす傾向がありました。
小さくて競合が激しいテーブルという最悪の場合には、VACUUM
がテーブルにはタプルが一切含まれないという不正な報告をして、非常に悪いプラン選択をもたらす可能性がありました。
ハッシュ結合の中での大量タプル転送ループを問い合わせキャンセル要求により確実に割り込みできるようにしました。 (Tom Lane, Thomas Munro)
tableforest
= falseのとき、cursor_to_xml()
が正しいな出力をするように修正しました。
(Thomas Munro, Peter Eisentraut)
これまでは<table>
要素の囲みを生成していませんでした。
pg_timezone_names
ビューの性能を改善しました。
(Tom Lane, David Rowley)
lseek()
とclose()
の稀な場合のエラーに対するいいかげんな処理を修正しました。
(Tom Lane)
どちらも通常ではあまり失敗しないシステムコールですが、失敗した場合にはfd.c
がかなり混乱する可能性がありました。
postmasterがWindowsサービスとして実行しているかどうかの誤った検査を修正しました。 (Michael Paquier)
これは、アクセス不能であるときにイベントログに書き出しを試みて、そのため全くログが書かれない結果をもたらしました。
COMMIT PREPARED
とROLLBACK PREPARED
に対応するようにecpgを修正しました。
(Masahiko Sawada)
ecpgで、$でクォートされた文字列リテラルを処理する際の二重解放エラーを修正しました。 (Michael Meskes)
pg_dumpで、コメントとデータベースオブジェクトのいくつかのタイプのセキュリティラベルに対する、誤ったスキーマと所有者の印付けを修正しました。 (Giuseppe Broccolo, Tom Lane)
単純な使い方の場合には悪影響はありませんが、例えばスキーマを指定したリストアでは含まれるべきコメントが無視される可能性がありました。これはダンプ時にそれらが関連するオブジェクトのスキーマに属するという印付けがされなかったためです。
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)
OpenSSL 1.1.0に対応しました。 (Heikki Linnakangas, Andreas Karlsson, Tom Lane)
これはより新しいブランチで以前行なわれた作業のバックパッチです。多くのプラットフォームがOpenSSLの新しいバージョンを採用しているため、必要です。
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参照)。
キャッシュ利用のため、このような変更を反映させるにはサーバの再起動が必要であることに注意してください。