リリース日: 2016-03-31
このリリースは9.5.1に対し、各種不具合を修正したものです。 9.5メジャーリリースにおける新機能については、E.16. リリース9.5 を参照してください。
9.5.Xからの移行ではダンプ/リストアは不要です。
しかしながら、下記の先頭の変更項目により、アップグレード適用後に一部インデックスのREINDEX
が必要となるかもしれません。
非C
ロケールでは文字列のソートに対して短縮キーを無効にしました。
(Robert Haas)
PostgreSQL 9.5は、標準Cライブラリ関数strxfrm()
をstrcoll()
の代わりに使うことで、文字列データ型の比較を高速化する仕組みを導入しました。
このたび、glibc(LinuxのCライブラリ実装)の大部分のバージョンではstrxfrm()
関数がバグのある実装であると判明しました。
いくつかのロケールでstrcoll()
と一致しない文字列比較結果が生じることがあります。
この問題の詳細がより明らかにされるまで、全ての非C
ロケールでこの最適化を無効にしました(C
ロケールはstrcoll()
もstrxfrm()も使わないので
安全です)。
残念ながら、この問題はソートのみならずBツリーインデックスの項目順にも悪影響を及ぼします。
すなわち、text
、varchar
、または、char
カラムに対するBツリーインデックスは、該当するロケールに従ってソートし、PostgreSQL 9.5.0または9.5.1で作られるか変更されていたなら、現在おそらく壊れているということを意味します。
ユーザはバグの影響を受けたかもしれないインデックスをREINDEX
したほうがよいでしょう。
現時点では既知の該当するロケールの網羅的リストを提供することはできません。
C
ロケールは安全と知られています。
また、en_US
などの英語ベースのロケールには障害の形跡はありません。
しかし、de_DE
などの他のいくつかの一般的なロケールは大部分のglibcバージョンでバグの影響を受けます。
キャッシュされたプランで行セキュリティ状態を適切に維持するようにしました。 (Stephen Frost)
2つ以上のロールとして問い合わせを実行するセッションでは、プランキャッシュが他のロールIDむけに生成されたプランを誤って再使用するかもしれず、これにより行単位セキュリティ(row-level security, RLS)が使われているときに間違ったポリシーセットを適用するおそれがありました。 (CVE-2016-2193)
contrib/pageinspect
のいくつかの新関数にスーパーユーザでなければいけないというチェックを追加しました。
(Andreas Seltenreich)
pageinspect
拡張のbytea
値を解析する大部分の関数は、スーパーユーザ以外からの呼び出しを許していませんが、brin_page_type()
とbrin_metapage_info()
はそうなっていませんでした。
これら関数に作りこまれたbytea
値を渡すことでサーバのクラッシュや若干のサーバメモリ露出があるかもしれません。
悪用を防ぐため欠けていた権限チェックを加えました。
(CVE-2016-3065)
インデックス付けされたROW()
比較の誤った扱いを修正しました。
(Simon Riggs)
9.5で導入された小さな最適化の欠陥のため、ROW()
比較がインデックス順序に完全にではなく部分的に一致するとき(例えば、異なるカラム順や、インデックスにASC
のカラムとDESC
のカラムが両方含まれる場合)、誤った結果が生じました。
よい解決法が得られるまで、この最適化は削除されます。
インデックス付けされたROW()
比較におけるNULLインデックス項目の誤った扱いを修正しました。
(Tom Lane)
ROW(a, b) > ROW('x', 'y')
のような行比較を使うインデックス検索は、
b
カラムでNULL項目に到達すると、以降のa
の値に付随した非NULLのb
の値があるのを無視して、そこで止まってしまいました。
前後に適切なfsync()
呼び出しを伴わないファイル名変更による、可能性の低いデータ損失のシナリオを回避するようにしました。
(Michael Paquier, Tomas Vondra, Andres Freund)
SELECT FOR UPDATE/SHARE
を行い、ロックする必要のないリレーションを含む問い合わせで、直近に更新された行を再チェックするときの誤った振る舞いを修正しました。
(Tom Lane)
ロックされないリレーションからの行は再チェックにおいて誤って全てNULLが入っているように扱われていました。その結果、更新された行がWHERE
条件にもう適合しないと誤って判断されたり、誤ってNULLが出力されたりします。
json_to_record()
において、要求された出力カラム名の一つと一致するフィールド名を持つサブオブジェクトが入力オブジェクトに含まれているときの障害を修正しました。
(Tom Lane)
jsonb_object()
の2引数形式に空配列を与えて呼び出したとき無意味な結果になるのを修正しました。
(Michael Paquier, Andrew Dunstan)
jsonb_set()
でパス配列要素を配列の添え字に使うために整数に変換するときの誤動作を修正しました。
(Michael Paquier)
to_char()
の書式OF
による、負のタイムゾーンオフセットの誤った整形を修正しました。
(Thomas Munro, Tom Lane)
INSERT ... ON CONFLICT
で待機について誤ったログ出力の可能性があり、修正しました。
(Peter Geoghegan)
原因となる制約が無いにも拘らず、しばしばログメッセージが排他制約のために待機が生じたと主張していました。
リカバリが一貫性のある状態に達するまでrecovery_min_apply_delayパラメータを無視するようにしました。 (Michael Paquier)
これまでは、データベース状態を有効にするのに必要とされるWALの初期部分を再生する間であっても、recovery_min_apply_delay
に応じてスタンバイサーバはWALレコードの適用を遅らせていました。
スタンバイはそれが一貫性のあるデータベース状態に到達するまで使用できないので、これは用をなさないとみなされました。
サーバのスタートアップ中にpg_subtrans
がXID周回に近い場合を、正しく扱うようになりました。
(Jeff Janes)
ロジカルデコーディングについて様々なバグを修正しました。 (Andres Freund)
問題のある場合には、
レプリカ識別子がFULL
のとき1ページより大きいタプル、
ディスクにスプールされるほど大きいトランザクション内で主キーを変更するUPDATE
、
「subxact logged without previous toplevel record」(サブトランザクションが前のトップレベルレコード無しに記録されました)という誤った報告、および、
トランザクションのコミット時刻の誤った報告が含まれます。
入れ子になったセキュリティバリアビューで、外側のビューが相関副問い合わせを含むWHERE
句を持つときの、プランナのエラーを修正しました。
(Dean Rasheed)
GINインデックス検索のメモリリークを修正しました。 (Tom Lane)
localeconv()
の出力文字列を2回以上解放しようとしておきる、稀な場合のクラッシュを修正しました。
(Tom Lane)
ispell
辞書用の接辞ファイルの解析を修正しました。
(Tom Lane)
例えばトルコ語UTF8ロケールのI
など、バイト長が大文字小文字変換で変わる文字が接辞ファイルに何らか含まれていた場合に、動作がおかしくなる可能性がありました。
ispell
辞書ファイルを解析するのにsscanf()
を使わないようにしました。
(Artur Zakirov)
これにより(macOSを含む)FreeBSD派生のプラットフォームにおける移植性の問題を回避します。
IBMのxlcコンパイラによるPPC上のアトミック操作のコードを修正しました。 (Noah Misch)
この間違いはこれらプラットフォーム上で稀に同時操作の失敗をもらたしました。
古いバージョンのWindows(7sp1/2008R2sp1より前)上でAVX対応CPUとVisual Studio 2013でビルドされたPostgresでのクラッシュを回避しました。 (Christian Ullrich)
この修正はVisual Studio 2013のランタイムライブラリのバグの回避策ですが、このバグについてマイクロソフトはこのバージョンでは修正しないと宣言しています。
マルチバイト文字を適切に扱えるようにpsqlのタブ補完のロジックを修正しました。 (Kyotaro Horiguchi, Robert Haas)
SECURITY LABEL
についてpsqlのタブ補完を修正しました。
(Tom Lane)
SECURITY LABEL
の後のタブ押下がクラッシュや不適切なキーワード提示を引き起こす可能性がありました。
コマンドラインでの指定が無い場合に、pg_ctlがPGCTLTIMEOUT
環境変数による待機タイムアウトを受け付けるようにしました。
(Noah Misch)
これはpostmasterの起動とシャットダウンに対しグローバルに通常より長いタイムアウトを指定できるようにすることで、遅いビルドファームメンバーのテスト実施を容易にします。
pg_ctlにおけるWindowsサービス状態の誤った検査を修正しました。 (Manuel Mathar)
前のマイナーリリース群では、ログメッセージをWindowsイベントログに送るかどうかを適切に判断するようにpg_ctlを修正しようとしていましたが、逆さに検査していました。
-C
と-M prepared
のオプション組み合わせを適切に扱うようにpgbenchを修正しました。
(Tom Lane)
pg_upgradeで、新データディレクトリが旧データディレクトリ内に在るとき、削除スクリプトの作成を省略するようにしました。
このような場合のスクリプトの盲目的な適用は新データディレクトリが失われる結果になりました。
PL/Perlで、空のPostgres配列を適切に空のPerl配列に変換するようにしました。 (Alex Hunsaker)
PL/Pythonが有効なPython識別子でない関数名をうまく処理できるようにしました。 (Jim Nasby)
contrib/pgstattuple
のpgstatindex()
関数が返す統計の複数の誤りを修正しました。
(Tom Lane)
Perl本体からもはや提供されなくなったため、MSVCビルドでpsed
への依存を除去しました。
(Michael Paquier, Andrew Dunstan)
タイムゾーンデータファイルをtzdata release 2016cに更新しました。 アゼルバイジャン、チリ、ハイチ、パレスチナ、ロシア(アルタイ、アストラハン、キーロフ、サハリン、ウリヤノフスク地域)の夏時間法の変更、加えて、リトアニア、モルドバ、ロシア(カリーニングラード、サマラ、ヴォルゴグラード)の歴史的修正が含まれます。