リリース日: 2015-10-08
このリリースは9.4.4に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.31. リリース9.4を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
また、9.4.4よりも前のバージョンからアップグレードする場合は、E.27. リリース9.4.4を参照して下さい。
json
のパースでのスタックオーバーフローを防止しました。
(Oskari Saarenmaa)
アプリケーションが任意のユーザ入力からPostgreSQLのjson
やjsonb
の値を構成する場合、アプリケーションユーザはPostgreSQLサーバを確実にクラッシュさせることができて、一時的なサービス不能を引き起こせます。
(CVE-2015-5289)
短すぎるcrypt()
のソルトを検出して報告するようにcontrib/pgcrypto
を修正しました。
(Josh Kupershmidt)
ある種の無効なソルト引数はサーバをクラッシュさせるか、わずかなバイト数のサーバメモリを露出させました。 機密情報を露出するバイト列に在るように配置する攻撃の可能性は排除しませんが、ありそうにないと考えられます。 (CVE-2015-5288)
外側サブトランザクションに属するポータル(カーソル)がエラーになった後の、サブトランザクションのクリーンアップ処理を修正しました。 (Tom Lane, Michael Paquier)
外側サブトランザクションのカーソルで実行された関数が、内側サブトランザクションで作られたリレーションを参照することで、アサート失敗かクラッシュを引き起こすことがありました。
commit_delay
が設定されているとき WAL挿入中に起こりうるデッドロックを修正しました。
(Heikki Linnakangas)
UPDATE実行時に更新可能ビューに参照されてる全てのリレーションが確実に正しくロックされるようにしました。 (Dean Rasheed)
リレーションキャッシュ「initファイル」へのリレーションの書き込みを修正しました。 (Tom Lane)
直近のマイナーリリースでの修正の誤りにより、pg_trigger_tgrelid_tgname_index
をinitファイルから除外していました。
その後のセッションはこのことを検出して、initファイルが壊れているとみなして黙ってファイルを無視します。結果としてセッション開始時間が顕著に劣化しました。
本バグの修正に加えて、似たような将来の誤りが見つかりやすくなるように防止策をいくつか導入しました。
SPIクエリ結果に多数のタプルを挿入するときの O(N^2) の振る舞いを防止しました。 (Neil Conway)
読まれていない通知が多数あるときのLISTEN
開始時間を改善しました。
(Matt Newell)
一つの接続で多数の外部キー制約を変更するときの性能問題を修正しました。 (Jan Wieck, Tom Lane)
主として数千テーブルを持つデータベースのpg_dump出力をリストアするときに見られます。
SSL再ネゴシエーションをデフォルトで無効にしました。 (Michael Paquier, Andres Freund)
SSL再ネゴシエーションの使用は理論的には良い考えですが、OpenSSLライブラリに因るものと私たちのライブラリの使い方に因るものの両方で実際のところ多くのバグが見られました。
再ネゴシエーションは9.5以降では完全に取り除く予定です。
古いバージョン系列ではssl_renegotiation_limit
のデフォルト値をゼロ(無効)に変更するだけとします。
*_freeze_max_age
パラメータの下限値を下げました。
(Andres Freund)
これは主として関連する振る舞いのテストの所要時間を短くするものですが、限られたディスク領域でインストールする際にも有益と思われます。
サーバクラッシュを防ぐため、wal_buffers
の最大値を2GBに制限しました。
(Josh Berkus)
サーバ開始時にしか設定できないパラメータがpostgresql.conf
に複数回現れたときに苦情のログがでないようにしました。
また、include_dir
命令後の行番号カウントを修正しました。
(Tom Lane)
numeric
値の掛け算における稀な内部オーバーフローを修正しました。
(Dean Rasheed)
レコード型、範囲型、json
、jsonb
、tsquery
、ltxtquery
、および、query_int
に含まれる起こりにくいスタックオーバーフローを予防しました。
(Noah Misch)
日付時刻の入力でDOW
とDOY
の扱いを修正しました。
(Greg Stark)
これらのトークンは日付時刻値では使えないはずですが、これまでは「invalid input syntax」でなく、意味の分からない内部エラーメッセージになっていました。
正規表現照合処理中における、問い合わせのキャンセルの検査を更に追加しました (Tom Lane)
正規表現、SIMILAR TO
、および、LIKE
の照合に再帰深度の保護を加えました。
(Tom Lane)
ある種の検索パターンと低いスタック深度制限によりスタックオーバーランクラッシュを引き起こすことがありました。
正規表現の実行での無限ループの可能性を修正しました。 (Tom Lane)
一見ゼロ長文字列にマッチできそうで実際には後方参照のためにマッチしない検索パターンで、無限ループになるおそれがありました。
正規表現の実行で、たとえマッチがゼロ長であったとしても、量指定子を含む括弧で補足されたマッチデータを正しく記録するようにました。 (Tom Lane)
正規表現のコンパイルでメモリ不足による障害を修正しました。 (Andreas Seltenreich)
正規表現実行での稀なメモリリークを修正しました。 (Tom Lane)
トランザクションがアボートした際のロック解放処理における稀なメモリ不足時の障害を修正しました。 (Tom Lane)
小さいwork_mem
設定でタプルストアを使用するときに、「unexpected out-of-memory situation during sort」エラーになるのを修正しました。
(Tom Lane)
qsort
での大変稀なスタックオーバーランを修正しました。
(Tom Lane)
大きなwork_mem
設定でハッシュジョインの際に「invalid memory alloc request size」エラーになるのを修正しました。
(Tomas Vondra, Tom Lane)
プランナに関するいくつかのバグを修正しました。 (Tom Lane)
これらの誤りは間違ったクエリプランを導き、不適切な結果やアサート有効ビルドにおけるアサート失敗、あるいは、 「could not devise a query plan for the given query」、 「could not find pathkey item to sort」、 「plan should not reference subplan's variable」、 「failed to assign all NestLoopParams to plan nodes」 などの奇妙なプランナエラーになりました。 問題を明らかにしたファズテストを行ったAndreas SeltenreichとPiotr Stefaniakに感謝しなければいけません。
大きな継承セット上のUPDATE
/DELETE
に対するプランナの性能を改善しました。
(Tom Lane, Dean Rasheed)
スタンバイ昇格のトリガファイルがpostmaster起動時に確実に削除されるようにしました。 (Michael Paquier, Fujii Masao)
新たなスタンバイサーバを初期化するのに使われるデータベースバックアップにトリガファイルが在ったとき、望まない昇格が起きるのを防ぎます。
postmasterシャットダウンの際、postmaster.pid
ファイルを削除する前に、確実にソケット毎のロックファイルが削除され、リッスンソケットが閉じられるようにしました。
(Tom Lane)
外部スクリプトがpg_ctl stop
が戻ってすぐに新たなpostmasterを起動しようとする場合の、競合状態による失敗を防ぎます。
たとえimmediateシャットダウンであっても、すべての子プロセスが居なくなるまでpostmasterが終了しないようにしました。 (Tom Lane)
手前の項目と同様に、続いて起動されたpostmasterとの間で競合状態になる可能性を回避します。
postmasterにおけるクラッシュリカバリ中のスタートアッププロセスのクラッシュの扱いを修正しました。 (Tom Lane)
クラッシュリカバリサイクルの中で、スタートアッププロセスがデータベース一貫性の復旧無しにクラッシュした場合、一般的に再クラッシュとなるだけの新たなスタートアッププロセスを起動しようとして無限ループをもたらしていました。
マルチトランザクション周回のための緊急自動バキュームをより頑健にしました。 (Andres Freund)
自動バキュームワーカにシグナルを送ろうとしてそのプロセスが既にいなくなっていた場合にWARNING
を出さないようにしました。
また、そのようなシグナルに関連するログ冗長性を減らしました。
(Tom Lane)
サーバ時計の時刻が大幅に戻ったときに自動バキュームランチャーが過度に長く休止するのを防止しました。 (Álvaro Herrera)
GINインデックスの挿入保留リストのクリーンアップがキャンセル要求により割り込みできることを確実にしました。 (Jeff Janes)
GINインデックスで全ゼロページを再利用可能にしました。 (Heikki Linnakangas)
そのようなページはクラッシュ後に取り残されるかもしれませんでした。
SP-GiSTインデックスで全ゼロページの扱いを修正しました。 (Heikki Linnakangas)
VACUUM
はこのようなページを再利用しようとしていましたが、クラッシュ安全ではない方法で行っていました。
subtrans/multixactの切捨て処理で、「apparent wraparound」に関する警告となる以外には無害な境界条件エラーを修正しました (Thomas Munro)
PL/pgSQLのエラーコンテキストメッセージにて、文の種類CONTINUE
、MOVE
の誤報告を修正しました。
(Pavel Stehule, Tom Lane)
非ASCIIのエラーメッセージ文面を正しく扱うように PL/Perlを修正しました。 (Alex Hunsaker)
record
結果の文字列表現を返すときの PL/Pythonのクラッシュを修正しました。
(Tom Lane)
PL/Tclにてmalloc()
呼び出しの失敗チェックを怠っているいくつかの箇所を修正しました。
(Michael Paquier, Álvaro Herrera)
contrib/isn
で、979で始まるISBN-13番号の出力を修正しました。
(Fabien Coelho)
(9790ではなく)979から始まるEANはISBNと見做せますが、それらは10桁形式ではなく、新しい13桁形式で出力されなければいけません。
contrib/pg_stat_statements
の問い合わせ文字列のガベージコレクションの処理を改善しました。
(Peter Geoghegan)
問い合わせ文字列が格納される外部ファイルは非常に大きいサイズに膨らむことがありました。一度ファイルが1GBを超えたなら、それを縮小する試みは失敗し、その後すぐにファイルが全く読めない状況になりました。
contrib/postgres_fdw
で照合に関するの判断を改善しました。
(Tom Lane)
ユーザに見える主な効果は、varchar
カラムを含む比較が以前より多くのケースでリモートサーバに送られて実行されるようになることと思われます。
libpqのメモリ不足状態の扱いを改善しました。 (Michael Paquier, Heikki Linnakangas)
ecpgにおいて、メモリリークとメモリ不足チェックの欠落を修正しました。 (Michael Paquier)
数値出力のロケールを意識した書式整形について、psqlのコードを修正しました。 (Tom Lane)
\pset numericlocale on
で実行される書式整形のコードは、べき指数を持つけれども小数点を持たない数値など、一部のまれなケースで誤っていました。
money
データ型の既にローカライズされた出力を壊すこともありました。
現在の接続が無いときの\c
コマンドでpsqlがクラッシュするのを防止しました。
(Noah Misch)
pg_dumpが継承されたテーブルのNOT VALID
のCHECK制約を正しく扱うようにしました。
(Tom Lane)
pg_dumpのディレクトリ出力フォーマットにおいて、デフォルトのzlib圧縮レベルの選択を修正しました。 (Andrew Dunstan)
tar形式出力でのpg_dumpで作られる一時ファイルを全ユーザから読み取り可能にしないようにしました。 (Michael Paquier)
postgres
またはtemplate1
データベースがデフォルトテーブルスペース以外にある場合に対応するように、pg_dumpとpg_upgradeを修正しました。
(Marti Raudsepp, Bruce Momjian)
特定の権限タイプを持つには古すぎるサーバからダンプするときに、pg_dumpがオブジェクト権限を正常に扱うように修正しました。 (Tom Lane)
9.2以前のサーバからデータ型をダンプするとき、および、関数や手続き言語を7.3以前のサーバからダンプするとき、pg_dumpは所有者の付与できる権限を剥奪して、代わりにPUBLIC
に全ての権限を与えるようなGRANT
/REVOKE
コマンドを生成していました。
ここでの権限に含まれるのはUSAGE
とEXECUTE
だけなので、これはセキュリティ問題ではありませんが、まったく驚くべき旧システム挙動の表現です。
この場合はデフォルト権限状態のままにするように修正しました。
pg_dumpがシェル型をダンプするように修正しました。 (Tom Lane)
シェル型(未定義のデータ型)は大して有用ではありませんが、それでもpg_dumpはダンプすべきでした。
pg_dumpとその他いくつかのクライアント側プログラムの、様々なちょっとしたメモリリークを修正しました。 (Michael Paquier)
問い合わせやpgbench自身が固まったときの、pgbenchの進捗報告の振る舞いを修正しました。 (Fabien Coelho)
Alphaハードウェア向けのスピンロックのアセンブラコードを修正しました。 (Tom Lane)
AIXのネイティブアセンブラと互換性を持つように、PPCハードウェアむけのスピンロックのアセンブラコードを修正しました。
gccが一般的になりつつあるネイティブアセンブラを使う構成である場合に、gccでのビルドができませんでした。
AIXで、単にそれが安全に使えるとみなすのでなく、-qlonglong
コンパイラオプションのテストをします。
(Noah Misch)
AIXで、実行時に解決されるシンボルを許可する-Wl,-brtllib
リンクオプションを使います。
(Noah Misch)
Perlでは5.8.0以降からこの機能に依存しています。
コンパイラバグのため、32bit xlcでインライン関数展開を使わないようにしました。 (Noah Misch)
いくつかのSolarisバージョン上で、必要に応じてsched_yield()
のためにlibrt
を使用します。
(Oskari Saarenmaa)
UHC
エンコーディングをWindowsコードページ949と解釈します。
(Noah Misch)
これはpostmasterのような特定のデータベースに紐づかないプロセスからの非ASCIIのログメッセージ出力を修正します。
Windowsで、ログメッセージ用などのトランザクション外でのUTF16への文字エンコーディング変換で失敗するのを防止しました。 (Noah Misch)
setlocale()
の返し値をコピーしないことによる、postmaster起動失敗を修正しました。
(Noah Misch)
これはANSIコードページをCP936(「中国語 (簡体字, PRC)」)に設定したWindowsシステムで報告され、他のマルチバイトコードページでも起こるとみられます。
Windowsのinstall.bat
スクリプトが空白文字を含む対象ディレクトリ名を扱えるように修正しました。
(Heikki Linnakangas)
PostgreSQLバージョン番号の数値形式(90405
など)を拡張モジュールのMakefileで変数VERSION_NUM
として容易に利用可能にしました。
(Michael Paquier)
タイムゾーンデータファイルを、ケイマン諸島、フィジー、モルドバ、モロッコ、ノーフォーク島、北朝鮮、トルコ、ウルグアイの夏時間規則を変更したtzdata release 2015gに更新しました。また、カナダ・ノーザンロッキーのための新しいタイムゾーン名America/Fort_Nelson
が加わっています。