リリース日: 2016-02-11
このリリースは9.4.5に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.31. リリース9.4を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、(デフォルトではない)jsonb_path_ops
演算子クラスを使ったGINインデックスを含むインストレーションからアップグレードする場合には、以下の変更点の最初の項目を確認してください。
また、9.4.4よりも前のリリースからアップグレードする場合は、E.27. リリース9.4.4を参照して下さい。
jsonb_path_ops
GINインデックスで一貫性に欠けたハッシュ計算を修正しました。
(Tom Lane)
例えばスカラと副配列を含む配列のように、同じ入れ子レベルにスカラとサブオブジェクトを両方含むjsonb
値を処理するとき、異なる文脈において同じキーに対してキーハッシュ値が異なって計算されることがありました。
これにより問い合わせで見つかるべき項目が見つからない可能性があります。
これを修正することは、新しいハッシュ計算コードに対して、既存のインデックスは既に一貫性に欠けているかもしれないことを意味します。
全ての検索が確実に期待通りに動作するように、本アップデートの導入後、jsonb_path_ops
GINインデックスをREINDEX
すべきです。
正規表現での無限ループやバッファオーバーランの問題を修正しました。 (Tom Lane)
(正規表現における)ブラケット式の非常に大きな文字範囲が一部ケースで無限ループを、また別ケースでメモリ上書きを引き起こすおそれがありました。 (CVE-2016-0773)
postmaster.pid
ファイルが削除されたなら、即時シャットダウンを実行するようになりました。
(Tom Lane)
postmasterはpostmaster.pid
が引き続き存在していて自身のPIDを含んでいるかを1分毎くらいに確認するようになります。
ファイルが無かったりPIDが違っていたなら、SIGQUITを受け取ったのと同様に即時シャットダウンを実行します。
この変更の主な動機は失敗したビルドファーム実行を手動調整なしに確実にクリーンアップすることですが、DBAが無理にpostmaster.pid
を削除して新たなpostmasterを起動したときに悪影響を限定するのにも役立ちます。
挿入時に競合条件のため、SERIALIZABLE
トランザクション隔離モードで直列化例外を捉えそこなうおそれがありました。
(Kevin Grittner, Thomas Munro)
ログを取らないリレーションに対してALTER TABLE ... SET TABLESPACE
を行うとき、適切なWALレコードを出力するのに失敗していたものを修正しました。
(Michael Paquier, Andres Freund)
リレーションのデータについてログを取らないとしても、移動はログ記録されるべきです。さもないと、そのリレーションはスタンバイがマスタに昇格した後にアクセス不能になるでしょう。
クラッシュリカバリの最後で起こりうる、ログを取らないリレーションの初期化漏れを修正しました。 (Andres Freund, Michael Paquier)
walsenderスロットが再利用されるとき確実に完全に再初期化されるようにしました。 (Magnus Hagander)
継承されたチェック制約を適切に再構成するようにALTER COLUMN TYPE
を修正しました。
(Tom Lane)
複合型の所有者を適切に変更するようにREASSIGN OWNED
を修正しました。
(Álvaro Herrera)
データ型、外部データラッパ、および、外部サーバの所有者を変更するとき、付与された許可のリストを正しく更新するように、REASSIGN OWNED
とALTER OWNER
を修正しました。
(Bruce Momjian, Álvaro Herrera)
REASSIGN OWNED
が外部ユーザマッピングについてエラーにするのでなく無視するように修正しました。
(Álvaro Herrera)
更新可能ビューむけに問い合わせ書き換えをした後に起こりうるクラッシュを修正しました。 (Stephen Frost)
プランナのLATERAL
参照の扱いを修正しました。
(Tom Lane)
これは、「failed to build any N-way joins」、あるいは、「could not devise a query plan」というプランナのエラーをもたらす、いくつかの稀な状況について修正します。
インデックスの内部統計がとても古いときにGINインデックススキャンの粗悪なプランナコスト見積りが生じるのを防ぐ仕組みをさらに追加しました。 (Tom Lane)
インデックスアドバイザープラグインが提案する仮想のGINインデックスにプランナを対応させました。 (Julien Rouhaud)
EXPLAIN
とルールのダンプで一意なテーブル別名の生成を高速化しました。
また、生成された別名が確実にNAMEDATALEN
より長くならないようにしました。
(Tom Lane)
ROW()
およびVALUES()
リスト内にある行全体の変数のダンプを修正しました。
(Tom Lane)
マイナス無限大の日付およびタイムスタンプをjson
およびjsonb
に変換するとき、誤ってプラス無限大にされていました。
numeric
の除算で内部オーバーフローの可能性があるのを修正しました。
(Dean Rasheed)
正規表現の先行検索制約の括弧内における制限の強制を修正しました。 (Tom Lane)
マニュアルによれば、先行検索制約に後方参照を含めることは許されていませんし、また、先行検索制約内の括弧は常に捕捉されません。 しかしながら、括弧に入れられた副式の中ではこれらのケースを適切な処理に失敗していて、予期せぬ結果をもたらしていました。
正規表現のインデックスキャン範囲への変換で、先行検索制約を含む正規表現にて不正な範囲が生じるおそれがありました。 (Tom Lane)
正規表現コンパイラが制約アークのループを処理するように修正しました。 (Tom Lane)
CVE-2007-4772 対応で加えられたコードは、不完全でかつ正しくありませんでした。 複数状態に影響を与えるループを処理できません。 また、(アサート無しのビルドであれば悪い結果には見えないけれども)アサート失敗を引き起こす可能性がありました。 複数状態ループにより、コンパイラがキャンセルされるか、状態数が多すぎるというエラー条件に達するまで走り続ける可能性がありました。
正規表現コンパイラのメモリ使用計算を改善しました。 (Tom Lane)
本修正により、これまで途方もない時間とメモリを使っていたいくつかのケースで、「regular expression is too complex」(正規表現が複雑すぎます)というエラーを出します。
正規表現コンパイラの性能を改善しました。 (Tom Lane)
log_line_prefix
でのエスケープ%h
および%r
をlog_connections
によるメッセージ出力でも機能するようにしました。
(Tom Lane)
これまで、%h
と%r
は新セッションがログメッセージ「connection received」を出力した直後から働き始めていました。これからはそのメッセージにおいても機能します。
Windowsで共有メモリマッピングハンドルを必要としない子プロセスでハンドルを確実に閉じるようにしました。 (Tom Lane, Amit Kapila)
この見落としは、logging_collector
をonにしていたとき常に、クラッシュからのリカバリ失敗をもたらしました。
WindowsにおけるノンブロッキングモードでソケットのEOF検知に失敗する可能性があるのを修正しました。 (Tom Lane)
この問題が9.5より前のブランチで起きるかは完全には明確でありませんが、起きるとすれば、 その症状はwalsenderプロセスが接続の喪失に気づくのではなく際限なく待つというものでしょう。
SSPI認証のときにトークンハンドルのリークを防ぐようになりました。 (Christian Ullrich)
psqlで、ターミナルウィンドウのサイズが変わったとき、libreadlineのスクリーンサイズ認識を確実に更新するようにしました。 (Merlin Moncure)
これまで、問い合わせ出力の間にウィンドウがリサイズされた場合、libreadlineは気づかず、その後の複数行の問い合わせの入力において奇妙な振る舞いをもたらしていました。
psqlの\det
コマンドが、そのパターン引数を潜在的にスキーマ修飾パターンを伴う他の\d
コマンドが行うのと同様に解釈するように、修正しました。
(Reece Hart)
psqlの\c
コマンドで、以前の接続がUNIXソケット経由であってコマンドが新たなホスト名と同ユーザ名を指定しているときの、クラッシュの可能性を回避しました。
(Tom Lane)
pg_ctl start -w
で子プロセス状態を、ヒューリスティックに頼るのではなく直接検査するようにしました。
(Tom Lane, Michael Paquier)
これまでは、pg_ctlは新たなpostmasterはpostmaster.pid
を常に5秒以内に作るという想定に依存していました。
しかし、これは高負荷システムでは失敗するおそれがあり、pg_ctlがpostmaster起動に失敗したと間違って報告する原因になります。
Windows以外では、この変更は他のこのようなコマンドの直後に実行したpg_ctl start -w
が確実に失敗することも意味します。対してこれまでは、最初のコマンドから2秒以内に実行したなら成功が報告されていました。
pg_ctl start -w
で、ワイルドカードの監視アドレスをpostmasterに接続するのに使わないようにしました。
(Kondo Yuta)
Windowsでは、listen_addresses
に0.0.0.0
または::
が設定してあるとき、接続用アドレスとして機能しないこれらの値をそのままに使用しようとするため、pg_ctlはpostmaster起動の検出に失敗していました。
代わりにそれぞれ127.0.0.1
または::1
を使うものとするのが適正でした。
Windowsのpg_ctlで出力先をどこにするか決めるのに、標準出力先が端末であるかを確認するのではなく、サービス状態を確認するようになりました。 (Michael Paquier)
pg_dumpとpg_basebackupで8GBを超えるtarアーカイブ要素を扱うのにGNU慣習を採用しました。 (Tom Lane)
tar
ファイル形式のPOSIX標準ではアーカイブ要素ファイルが8GBを超えることを許していませんが、ほとんどの現代のtar実装はそれを改善した拡張をサポートしています。
この拡張を採用したので、-Ft
指定のpg_dumpはデータが8GB以上のテーブルでもはや失敗しませんし、また、pg_basebackupは8GBより大きいファイルを扱えます。
加えて、いくつかのプラットフォームで4GBから8BGの要素ファイルで失敗をもらたすおそれのある移植性の問題を修正しました。
この問題は読めないバックアップファイルのため潜在的に回復できないデータ損失をもたらす可能性があります。
拡張の要素オブジェクトの処理に関するpg_dumpの様々な例外的な不具合を修正しました。 (Tom Lane)
パラレルpg_restoreのとき起こりうる失敗を防ぐため、pg_dumpがビューのトリガにそのルールの後に処理される必要ありと印づけするようにしました。 (Tom Lane)
pg_dumpでリレーションのオプション値が確実に適切に引用符付けされるようにしました。 (Kouhei Sutou, Tom Lane)
単純な識別子や数値でないreloption値は、pg_dumpにより発行されるCREATE文の構文エラーでダンプ/リロードの失敗をもたらすおそれがありました。 PostgreSQL本体で現在サポートされるreloptionでは問題ありませんが、拡張では問題を引き起こすreloptionが許されている可能性がありました。
パラレルpg_dumpの間、パスワードプロンプトが繰り返されるのを回避しました。 (Zeus Kronion)
Windowsにおいてpg_upgradeのファイルコピーをするコードを、適切にエラー処理するように修正しました。 (Bruce Momjian)
pgbenchでスクリプトに記述された除算または剰余の演算子の評価における例外的なオーバーフロー状態に対する防御策を導入しました。 (Fabien Coelho, Michael Paquier)
pg_receivexlogおよびpg_recvlogicalにより出力されるメッセージのローカライズ失敗を修正しました。 (Ioseph Kim)
plpython2とplpython3を両方使うときのダンプ/リロード問題を回避しました。 (Tom Lane)
(二つのバージョンのlibpythonは安全に並行して使用できないので)同一セッションではだめですが、原則としてはPL/Pythonの両バージョンは同じデータベース内で利用可能です。 しかしながら、pg_restoreとpg_upgradeの両者は、同一セッションの制限に抵触する動作をします。 チェックのタイミングを変えることでこれを回避しました。
Python 3.5で通るようにPL/Pythonのリグレッションテストを修正しました。 (Peter Eisentraut)
ソケットのEOFが見られたときのlibpqの入力バッファの早すぎる消去を修正しました。 (Tom Lane)
この間違いは、バックエンドの 「server closed the connection unexpectedly」(サーバとの接続が想定外にクローズされました) を報告する前の最後のエラーメッセージをlibpqがときどき報告しない原因となっていました。
ある種のPL/Javaパラメータがスーパーユーザ以外から設定されることを防止しました。 (Noah Misch)
この変更はPL/Javaのセキュリティ障害(CVE-2016-0766)を緩和します。 PL/Javaではそれらパラメータをスーパーユーザのみとすることで障害は修正されています。 PL/JavaよりもPostgreSQLをより頻繁にアップデートするサイトのセキュリティ危険性を防ぐため、本体コードでもこれらパラメータを認識するようにしました。
libpqのメモリ不足状況の扱いを改善しました。 (Michael Paquier, Amit Kapila, Heikki Linnakangas)
ecpgが生成するtypedef
文で引数の順序を修正しました。
(Michael Meskes)
ecpgのPGTYPESnumeric_from_double()
で%f
でなく%g
書式を使うようにしました。
(Tom Lane)
プリプロセッサ命令行から次の行へと継続されるコメントが含まれないようにecpgで供給されるヘッダファイルを修正しました。 (Michael Meskes)
このようなコメントはecpgに受け付けられません。 ecpg自体が変更されるべきかまだ明らかではありません。
hstore_to_json_loose()
のhstore
値がJSON数値に変換されうるかの検査を修正しました。
(Tom Lane)
これまで本関数は英数字以外の終端文字にだまされる可能性があり、構文的に不正なJSONの出力を招いていました。
contrib/pgcrypto
のcrypt()
関数を問い合わせキャンセルで確実に中断できるようにしました。
(Andreas Karlsson)
contrib/postgres_fdw
で、データを変更するコマンドでtableoid
を使うことで起きる障害を修正しました。
(Etsuro Fujita, Robert Haas)
2.5.xより後のflexバージョンに対応しました。 (Tom Lane, Michael Paquier)
現在、flex 2.6.0がリリースされていて、ビルドスクリプトのバージョンチェックは調整する必要がありました。
リンカにファイル名が固定順で与えられることを確実にして、ビルド出力の再現性を改善しました。 (Christoph Berg)
これは、生成された実行ファイルにて、あるビルドとの次ビルドとの間でビットレベル差異がでる可能性を回避します。
PGXSビルドで見つけられる場所にmissing
スクリプトを設置するようにしました。
(Jim Nasby)
bisonのようなビルドツールが存在しないマシンでのPGXSビルドにおいて、まっとうな振る舞いを可能にします。
MSVCビルドにてインストールされるヘッダファイル群にdynloader.h
が確実に含まれるようにしました。
(Bruce Momjian, Michael Paquier)
現在のlibxml2の動作に適合するように別種のリグレッションテスト予想出力ファイルを追加しました。 (Tom Lane)
libxml2におけるCVE-2015-7499の修正により、これまで出力していた一部ケースでエラーコンテキスト報告を出力しなくなります。 これは障害に見えますが、私たちはおそらくしばらくは我慢する必要があり、対処しました。
タイムゾーンデータファイルをtzdata release 2016aに更新しました。 ケイマン諸島、メトラカトラ、ザバイカリエ地方(Zabaykalsky Krai) の夏時間法の変更、パキスタンの歴史的な訂正が適用されています。