リリース日: 2018-11-08
このリリースは9.4.19に対し、様々な不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.58を参照してください。
has_関数群での稀な場合のエラーを修正しました。
(Tom Lane)
foo_privilege()
無効なオブジェクトOIDが与えられたとき、エラーを投げるのでなくNULLを返すようにしました。
これら関数の一部は既にその通りになっていましたが、全てがそうではありませんでした。
加えて、has_column_privilege()は一部プラットフォーム上でクラッシュするおそれがありました。
長い文字列に対する正規表現でのマッチ/分割の関数でO(N^2)の速度低下を回避しました。 (Andrew Gierth)
+や-文字からなる長い文字列に対する字句解析でO(N^3)の速度低下を回避しました。
(Andrew Gierth)
外側の問い合わせが逆向きスキャンされているときの誤ったSubPlans実行を修正しました。 (Andrew Gierth)
参照されているカーソルを巻き戻した後のUPDATE/DELETE ... WHERE CURRENT OF ...のエラーを修正しました。
(Tom Lane)
複数リレーション(具体的には継承ツリー)を走査するカーソルは、最初の方のリレーションまで巻き戻された場合に、誤った振る舞いをする可能性がありました。
EvalPlanQualが条件実行されるInitPlansを適切に処理するように修正しました。
(Andrew Gierth, Tom Lane)
CASE構造内の無関係な副SELECTといったコードが含まれている場合に、同時更新で再現困難なクラッシュや誤った応答をもたらしました。
WindowsでU+FFFFより上のユニコード文字でエラーを起こさないように文字クラス検査を修正しました。 (Tom Lane, Kenji Uno)
このバグは全文検索演算子やcontrib/ltree、contrib/pg_trgmに影響があります。
外部テーブルが所有するシーケンスがそのテーブルに対するALTER OWNERで確実に処理されるようにしました。
(Peter Eisentraut)
所有者変更はこのようなシーケンスにも伝播すべきでしたが、外部テーブルに対しては漏れていました。
array_out()の結果文字列に対する空間の超過割り当てを修正しました。
(Keiichi Hirobe)
SP-GiSTインデックスのスキャンを繰り返すときのメモリリークを修正しました。 (Tom Lane)
著しいリーク量になるのはSP-GiSTを使った排他制約が一つのコマンドで多数の新たなインデックスエントリを受け入れる場合のみが知られています。
ApplyLogicalMappingFile()がマッピングファイルを伴って実行されたときに、確実にマッピングファイルを閉じるようにしました。
(Tomas Vondra)
これまでファイルディスクリプタがリークしていて、最終的にロジカルデコーディングのときにエラーをひき起こしました。
例えばVACUUM FULLによって、関連付けられたカタログテーブルが繰り返し書き換えられる場合をうまく扱うようにロジカルデコーディングを修正しました。
(Andres Freund)
既存レプリケーションスロットに対応するには低すぎる値に設定されたwal_levelでのサーバ起動をできなくしました。
(Andres Freund)
ユーティリティコマンドが無限再帰をひき起こした場合のクラッシュを回避しました。 (Tom Lane)
ホットスタンバイを初期化するとき、マスタ上の二相トランザクションで生じた重複するXIDをうまく処理するようにしました。 (Michael Paquier, Konstantin Knizhnik)
ブートストラップとスタンドアローンバックエンドで、また、initdbで、random()のシードをランダム化するようにしました。
(Noah Misch)
この変更の主たる実用的効果は、initdbが同じランダムシードを常に使うことによる名前の衝突でPOSIX共有メモリが使用できないと誤判断するシナリオを回避することです。
DSM割り当てを割り込み可能にしました。 (Chris Travers)
GINページ再圧縮をWALからリプレイするときにバッファオーバーランの可能性があり、回避しました。 (Alexander Korotkov, Sivasubramanian Ramasubramanian)
レプリケーションスロットのディレクトリのfsyncが行われていなかったのを修正しました。
遅いサーバでwal_sender_timeoutを使ったときの予期せぬタイムアウトを修正しました。
(Noah Misch)
ホットスタンバイプロセスが確実に正しいWALの一貫性のある地点を用いるようにしました。 (Alexander Kukushkin, Michael Paquier)
これによりスタンバイサーバがWALリプレイ中に一貫性のあるデータベース状態に到達した直後に起こりうる誤動作を防ぎます。
SIGQUITを処理するときにatexitコールバックを実行しないようにしました。
(Heikki Linnakangas)
外部サーバのユーザマッピングを拡張のメンバーとして記録しないようにしました。 (Tom Lane)
拡張のスクリプトでCREATE USER MAPPINGが実行された場合、ユーザマッピングに対して拡張の依存性が作られますが、これは予期せぬものです。
ロールは拡張のメンバーになれませんので、ユーザマッピングもなれないべきです。
CSVログファイルを開くときの失敗に対してsysloggerをより頑健にしました。 (Tom Lane)
pg_dumpの異なるオブジェクト名のソートでおこりうる一貫性の欠如を修正しました。 (Jacob Champion)
pg_restoreがDISABLE/ENABLE TRIGGERコマンドを出力するときにテーブル名を確実にスキーマ修飾するようにしました。
(Tom Lane)
これにより制限的なサーチパスを用いるリストア実行の新たな方針のための失敗を回避します。
pg_upgradeを拡張でイベントトリガを適切に処理するように修正しました。 (Haribabu Kommi)
pg_upgradeはイベントトリガの拡張への所属状態を維持しませんでした。
pg_upgradeのクラスタ状態検査をスタンバイサーバで正しく動作するように修正しました。 (Bruce Momjian)
全てのcontrib/cubeの関数で、cube型の次元制限に従わせるようにしました。
(Andrey Borodin)
これまでは、一部のcube関連の関数はcube_in()で拒否される値を生成する可能性があり、ダンプ/リロードの失敗をもたらしました。
contrib/unaccentのunaccent()関数を関数と同じスキーマのunaccentテキスト検索辞書を使うように修正しました。
(Tom Lane)
これまではサーチパスを使って辞書を探そうとしていましたが、サーチパスが制限的な値であると失敗する可能性がありました。
macOS 10.14 でのビルド問題を修正しました。 (Mojave) (Tom Lane)
CPPFLAGSに-isysrootスイッチを加えるようにconfigureを調整しました。
これが無いとPL/PerlとPL/TclがmacOS 10.14でconfigureやビルドで失敗します。
このsysroot指定はconfigure時またはビルド時にconfigureまたはmakeの引数でPG_SYSROOT変数を設定することで上書きできます。
これからはPerl関連の拡張はコンパイラフラグの-I$(perl_archlibexp)/COREではなく$(perl_includespec)を書くことが推奨されます。
また、最近のmacOSリリースではPL/Tclをビルドさせるのに、もはや--with-tclconfigを手動で指定する必要がありません。
最近のPerlバージョンで動作するようにMSVCでのビルドとリグレッションテストスクリプトを修正しました。 (Andrew Dunstan)
Perlはもはやカレントディレクトリをデフォルトではサーチパスに含めず、このことに対応しました。
WindowsでVisual Studio 2015またはVisual Studio 2017でのビルドに対応しました。 (Michael Paquier, Haribabu Kommi)
Btreeの比較関数でINT_MINを返せるようにしました。
(Tom Lane)
これまでは比較結果を逆転するだけで呼び出し元がソート順を逆にできるように、特定データ型の比較関数がINT_MINを返すのを禁止していました。
しかしながら、これはmemcmp()、strcmp()等の結果を直接返す比較関数については、POSIXがそのような制限をこれら関数に設けていないため、全く安全ではありませんでした。
少なくともmemcmp()の最近の一部バージョンはINT_MINを返すことがあり、不適切なソート順をもたらしました。
それゆえ、これら制限を取り除きました。
これからは呼び出し元は、ソート順を反転させたい場合にはINVERT_COMPARE_RESULT()マクロを使わなければなりません。
共有の無効化メッセージの生成で再帰障害を修正しました。 (Tom Lane)
この誤りは、例えば、VACUUM FULLで処理された直後のシステムカタログやシステムインデックスへのアクセス失敗をもたらします。
この変更では、とても稀な使用パターンでのみ出るものですがLockAcquireの新たな結果コードを追加しており、この関数の外部呼び出し元に影響があるかもしれません。
LockAcquireExtendedのAPIも変更されました。
SPI_connect()とSPI_finish()のときにSPIのグローバル変数を退避し、復旧するようにしました。
(Chapman Flack, Tom Lane)
これは、あるSPI使用関数が他を呼び出すときに起こりうる干渉を防止します。
ALLOCSET_DEFAULT_SIZESと関連するマクロを旧バージョン系列にも提供しました。
(Tom Lane)
これらのマクロは9.6から導入されましたが、旧バージョン系列にも追加して、拡張がバージョン毎のコードを書くことなく、マクロに依存できるようにする要望がありました。
潜在的にアライメント調整されたページバッファの使用を回避しました。 (Tom Lane)
新たなunion型のPGAlignedBlockとPGAlignedXLogBlockを導入し、単なる文字配列に替えてこれらを使用して、コンパイラがバッファをアライメントを外れた開始アドレスに置くことがないようにしました。
これはアライメントに厳しいプラットフォームでの潜在的なコアダンプを修正し、また、アライメント外れを許すプラットフォームであっても性能を改善すると考えられます。
src/port/snprintf.cがC99標準のsnprintf()の戻り値の定義に従うようにしました。
(Tom Lane)
このコードが使われるプラットフォーム(大部分はWindows)では、C99のセマンティクスを想定したコードを呼び出した場合に、このC99より前の振る舞いがバッファオーバラン検知の失敗をひき起こすおそれがありました。
clangコンパイラでi386でビルドするときに、-msse2使用を必須としました。
(Andres Freund)
これは浮動小数点オーバーフロー検査の問題を防ぎます。
configureのstrerror_r()の戻り型の検出を修正しました。
(Tom Lane)
これまでのコーディングはLinux上のicc(と、おそらくは他のケースで)でビルドするときに誤った答を得ていて、libpqがシステムから報告されるエラーについて役立つエラーメッセージを返しませんでした。
タイムゾーンデータファイルをtzdata release 2018gに更新しました。チリ、フィジー、モロッコ、ロシア(ヴォルゴグラード)の夏時間法の変更、中国、ハワイ、日本、マカオ、北朝鮮の歴史的修正が含まれます。