Release date: 2019-11-14
This release contains a variety of fixes from 12.0. For information about new features in major release 12, see E.5.
12.Xからの移行ではダンプ/リストアは不要です。
ALTER TABLE
がテーブル書き換えを要する他の変更に加えて、デフォルト値の無い列を加えたときのクラッシュを修正しました。
(Andres Freund)
REINDEX CONCURRENTLY
でロックの処理を修正しました。
(Michael Paquier)
REINDEX CONCURRENTLY
は新しいインデックスバージョンに対するセッション単位ロックの取得を怠っていて、潜在的に他セッションによる早すぎる操作を許していました。
また、悪いタイミングで届いた問い合わせキャンセルやセッション終了の割り込みが、REINDEX CONCURRENTLY
が持つセッション単位ロックの解放の失敗をもたらす可能性がありました。
CREATE INDEX CONCURRENTLY
やREINDEX CONCURRENTLY
コマンドの進捗を報告する時の競合状態によるクラッシュを回避しました。
(Álvaro Herrera)
REINDEX CONCURRENTLY
時の依存性エントリの重複作成を回避しました。
(Michael Paquier)
このバグはpg_depend
の膨張をもたらしましたが、それ以上の悪い事態にはなりません。
VACUUM
が、まだ実行中のトランザクションに関する古いマルチトランザクションIDの凍結を試みるのを防止しました。
(Nathan Bossart, Jeremy Schneider)
この場合、古いトランザクションが終了するまでVACUUM
の失敗が引き起こされました。
式インデックスでCLUSTER
を試みたときの「wrong type of slot」(スロットの誤ったタイプ)エラーを修正しました。
(Andres Freund)
誤ってトリガが無いというメッセージを出して、パーティションテーブルでSET CONSTRAINTS ... DEFERRED
が失敗していました。
(Álvaro Herrera)
親パーティションテーブルが削除された列を含む場合の、パーティションに対するインデックス作成時の失敗を修正しました。 (Michael Paquier)
パーティションテーブルでインデックス付けされた列の削除について修正しました。 (Amit Langote, Michael Paquier)
これまではインデックスの依存関係を訴えるエラーメッセージを伴って失敗するかもしれませんでした。 エラーを出すよりも、ここではインデックスも自動的に削除されるべきです。
パーティションのインデックスを、並行再構築に失敗した後に削除できることを保証しました。 (Michael Paquier)
このような場合にインデックスのpg_class
.relispartition
フラグが誤った状態で残っていて、DROP INDEX
の失敗を引き起こしていました。
パーティション毎の結合に対する同値クラスメンバーの処理を修正しました。 (Amit Langote)
この見落としは、実行可能なパーティション毎の結合プランの使用に失敗する、あるいは、「could not find pathkey item to sort」(ソートするパスキー要素が見つかりません)というプランナエラーをもたらす可能性がありました。
問い合わせの式が操作されるとき、WINDOW
句のオフセット式が確実に処理されるようにしました。
(Andrew Gierth)
この見落としは、オフセットが自明でない式のときに様々な失敗を引き起こす可能性がありました。 一例として、そのような式での関数引数の参照が、関数がインライン化されていた場合に失敗しました。
postmasterの子プロセス配列スロットが解放されたままであるときに、並列問い合わせがバックグラウンドワーカーを要求した場合の、postmasterの失敗を回避しました。 (Tom Lane)
BEFORE UPDATE
トリガを伴うテーブルでのEvalPlanQual再チェックが引き金となるクラッシュを修正しました。
(Andres Freund)
問い合わせがTOASTテーブルにアクセスを試みたときの「unexpected relkind」(予期せぬrelkind)エラーを修正しました。 (John Hsu, Michael Paquier, Tom Lane)
エラーは権限がありませんと言うべきですが、この場合はコードリファクタリングの際におかしくなっていました。
パラレルワーカーが開始する間、GUCパラメータを設定しているときにエラーが発生した場合に適切なエラーコンテキスト行を出すようにしました。 (Thomas Munro)
リード/ライトでオープンされたファイルに限ってfsync()
が適用されることを保証しました。
(Andres Freund, Michael Paquier)
一部のコードパスはリードオンリーでファイルを開いた後に実行しようとしていましたが、一部のプラットフォームでは「bad file descriptor」(誤ったファイル記述子)や同様のエラーを引き起こしました。
以前よりも長い文字列に対するエンコーディング変換ができるようにしました。 (Álvaro Herrera, Tom Lane)
これまでは入力文字列に0.25GBのハードリミットがありましたが、これからは変換された出力が1GBを超えない限り、動作するようになりました。
ウィンドウ関数に対して不要で大きいタプルストアの作成を回避しました。 (Andrew Gierth)
一部の場合にタプル格納が、問い合わせで必要とされるものだけでなく、元テーブルの全ての列を含めていました。
repalloc()
が大きなチャンクがサイズ削減されたときに、空間を返せるようにしました。
(Tom Lane)
一時的なWALとヒストリファイルがアーカイブリカバリの最後で削除されることを保証しました。 (Sawada Masahiko)
recovery_min_apply_delay
が有効な場合のアーカイブリカバリ失敗を回避しました。
(Fujii Masao)
この形態では通常recovery_min_apply_delay
は使われませんが、動作すべきです。
クラッシュリカバリの間はrestore_command
、recovery_end_command
、および、recovery_min_apply_delay
設定を無視するようにしました。
(Fujii Masao)
現在これらの設定はpostgresql.conf
で指定できて、クラッシュリカバリの間もonにできましたが、これらをここで尊重することは望ましくありません。
クラッシュリカバリが完了するまで、これら設定を無視するようにしました。
ロジカルレプリケーションのパブリッシャーとサブスクライバーがテーブルのレプリカ識別列について異なる認識を持つ場合のエラーを修正しました。 (Jehan-Guillaume de Rorthais, Peter Eisentraut)
サブスクライバで列をレプリカ識別の一部として宣言すると、パブリッシャーにそれが全く存在しないときに、「negative bitmapset member not allowed」(負のビットマップセットメンバーは許容されません)というエラーを引き起こしました。
ロジカルレプリケーションのwalsenderの停止時の望まれない遅延を回避しました。 (Craig Ringer, Álvaro Herrera)
ロジカルレプリケーションのwalreceiverプロセスでタイムアウト処理を修正しました。 (Julien Rouhaud)
ロジカルレプリケーションのデプロイメントで誤ったロジックがwal_receiver_timeout
の動作を妨げていました。
ロジカルデコーディングのレプリケーションメッセージに正しくタイムスタンプを付与するようにしました。 (Jeff Janes)
この見落としは、例えば、pg_stat_subscription
.last_msg_send_time
が通常NULLとして読まれる結果をもたらします。
バックエンドプロセスがそれまで同期レプリケーションが行われるを待機していたときに、バックエンドが終了する間の競合状態を修正しました。 (Dongming Liu)
PAM認証使用時に中断された接続に関するメッセージのログ出力を回避しました。 (Tom Lane)
libpqベースのクライアントは、最初の接続試行が失敗するまでユーザにパスワード入力を促さないため、パスワードが必要なときに通常2回の接続を試みます。 それゆえにサーバは、クライアントがパスワードを要求された接続を閉じたときに不要なログスパムを生成しないように記述されています。 しかしながら、PAM認証のコードはそのような認識がなく、実体ないの認証失敗のメッセージをいくつか生成していました。
bitshiftright()
の誤動作を修正しました。
(Tom Lane)
ビット列の右シフト演算子はビット列の長さが8の倍数でないときに結果の末尾バイトにあるパディング空間をゼロにすることに失敗していました。 大部分の操作に対して不可視ですが、ビット列の比較では余分のビットをわざわざ無視せず常にゼロであると想定するため、そこにある非ゼロビットは予期せぬ比較動作をもたらしました。
bitshiftright()
の出力をテーブルに保存した結果、不整合データを保持しているのであれば、以下のように修正が可能です。
UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
テキストのposition()
関数(別名strpos()
)の空の検索文字列に対する結果を修正しました。
(Tom Lane)
歴史的には、またSQL標準によれば、この場合の結果は1であるべきですが、12.0は0を返しました。
時間間隔の掛け算で境界ケースの整数オーバーフロー検出を修正しました。 (Yuya Watari)
ispell
テキスト検索辞書が誤った接辞データを含む場合のクラッシュを回避しました。
(Arthur Zakirov)
GiSTインデックスをバキュームするときのメモリリークを回避しました。 (Dilip Kumar)
Windowsで「Norwegian (Bokmål)」ロケールの名前の追加的な綴りを認識するようにしました。 (Tom Lane)
libpqが整数パラメータの文字列値で空白文字が続くのを許容するように修正しました。 (Michael Paquier)
バージョン12はlibpqの整数パラメータの検証を厳格化しましたが、続く空白文字を許容しないことは望ましくないと思われます。
libpqで、構文的に無効なconnect_timeout
パラメータ値による失敗の後に、CONNECTION_BAD
接続状態を正しく報告するようにしました。
(Lars Kanis)
ENABLE_NLS
が定義されているときにECPGクライアントがecpglib.h
をインクルードしている場合のコンパイル失敗を回避しました。
(Tom Lane)
この危険性は誤った場所での宣言により生じました。
ecpg_gettext()
はクライアントコードには見えないべきです。
パーティションテーブルに対する外部キー制約の並列リストアのスケジューリングを修正しました。 (Álvaro Herrera)
pg_dumpはパーティションテーブルの外部キーに対して十分な依存性情報の出力ができていませんでした。 これにより並列のpg_restoreが外部キー制約をあまりに早く再作成しようとするのを見過ごすおそれがありました。
pg_dumpで、同じ名前のトリガおよび行単位セキュリティポリシーのオブジェクトに対して安定した出力順序を保証しました。 (Benjie Gillam)
これまでは、異なるテーブル上の二つのトリガが同じ名前であった場合、これらはOIDに基づく順序でソートされました。これはテーブル名でソートするのと比べて好ましくありません。 RLSポリシーについても同様です。
pg_upgradeで、バージョン12で表現が変わったため、sql_identifier
型の列を伴うテーブルを拒絶するようにしました。
(Tomas Vondra)
line
などの表現が変更されたデータ型の使用に対するpg_upgradeの検査を改善しました。
(Tomas Vondra)
これまでのコーディングでは、ドメインや複合型の格納列が関心のあるデータ型の元になっている場合に、だまされる可能性がありました。
--dry-run
オプションを伴うpg_rewindで、pg_control
の更新を回避しました。
(Alexey Kondratov)
これは続くpg_rewindの試みを失敗させる可能性がありました。
継続WALレコードがちょうどページの境界で終了するときの、-s
オプションを伴うpg_waldumpの失敗を修正しました。
(Andrey Lepikhov)
--bkp-details
オプションを伴うpg_waldumpで、完全ページ書き出しに関してWALレコードに対する余分な改行の出力を回避しました。
(Andres Freund)
pg_waldumpで小さなメモリリークを修正しました。 (Andres Freund)
pqsignal()
をエクスポートされたlibpqのシンボルとして復活させました。
(Tom Lane)
この関数はどのクライアントも使用していないであろうという根拠で削除されましたが、現在のlibpqを非常に古いバージョンのpsql、および、おそらくは他のアプリケーションで使えなくなってしまいました。
最近のRed Hatリリースで動作するように、configureのlibperlの存在についてのテストを修正しました。 (Tom Lane)
これまではユーザがCFLAGS
に-O0
を設定した場合に失敗する可能性がありました。
PowerPCのスピンロックについて正しいコード生成を保証しました。 (Noah Misch)
以前のスピンロックのコードは、コンパイラがレジスタを受け付けないアセンブラ命令を使用する際にレジスタ0を選択することを許容していて、ビルド失敗を引き起こしました。 かなり以前に本バグに該当する報告を1件だけ見ていましたが、これは人々に修正されたPostgreSQLコードのビルドや、一般的でないコンパイラオプションの使用を試みさせる問題の原因となっていた可能性があります。
AIXでコンパイラオプション-qsrcmsg
を使わなくしました。
(Noah Misch)
これはxlc v16.1.0での内部コンパイラエラーを回避します。コンパイラエラーメッセージの形式が変わるだけで、深刻なものではありません。
OpenSSLのファイルパスの中の空白に対応するようにMSVCでのビルド手順を修正しました。 (Andrew Dunstan)