リリース日: 2020-05-14
このリリースは12.2に対し、様々な不具合を修正したものです。 12メジャーリリースにおける新機能については、E.5を参照してください。
GENERATED
列に関する起こりうるエラーを修正しました。
(David Rowley)
GENERATED
列の値がテーブルの他の列そのもののコピーである(かつ、リファレンス渡しのデータ型である)場合、クラッシュまたは破損データが挿入される可能性がありました。
他の列を単に複製するというGENERATED
式としては無意味なものであればよいですが、ときどき入力をそのまま返す関数を使う式でも本状況を引き起こすおそれがあります。
生成列の継承の扱いを改善しました。 (Peter Eisentraut)
テーブルの列がCREATE TABLE ... INHERITS
で継承される場合に、親の列が既にGENERATED
と印付けされているときには、生成の属性を変更できなくしました。しかし、親の列にGENERATED
が付いていないときに子の列にGENERATED
を付けることはできます。
CREATE TABLE LIKE INCLUDING GENERATED
での列をまたがる参照について修正しました。
(Peter Eisentraut)
物理的に後方の列を参照するGENERATED
式をコピーしようとするとき、CREATE TABLE ... LIKE
が失敗していました。
ALTER TABLE ... SET STORAGE
がインデックスに伝播するようにしました。
(Peter Eisentraut)
式でないインデックスの列は、作成時にテーブルの列のattstorage
属性を常にコピーしていました。
ALTER TABLE ... SET STORAGE
が実行されたときに、一貫性を維持するため、これらを更新するようにしました。
ALTER TABLE
で書き換えられたインデックスのindisclustered
設定を維持するようにしました。
(Amit Langote, Justin Pryzby)
これまでは、ALTER TABLE
で、どのインデックスがCLUSTER
に使われたかの記録が失われていました。
ALTER TABLE
で書き換えられたインデックスのレプリカアイデンティティ属性を維持するようにしました。
(Quan Zongliang, Peter Eisentraut)
REINDEX CONCURRENTLY
で再構築されたインデックスのindisclustered
設定を維持するようにしました。
(Justin Pryzby)
DROP OWNED BY
の際にオブジェクトをより早くロックするようにしました。
(Álvaro Herrera)
これにより、他セッションが何らかの同オブジェクトを削除するという競合状態の場合での失敗を回避します。
CREATE ROLE ... IN ROLE
に対するエラーの場合の処理を修正しました。
(Andrew Gierth)
一部のエラーの場合に意図されたメッセージの代わりに「unexpected node type」(予期せぬノードタイプ)などと報告されることがありました。
パーティションがデタッチされたときに、以前の親テーブルから複製されたトリガが確実に削除されるようにしました。 (Justin Pryzby)
COLLATE
をパーティション境界の式で照合順序を適用できない型に適用したときのクラッシュを修正しました。
(Dmitry Dolgov)
パーティションテーブル上のユニークインデックスがパーティショニングキーの等価性セマンティクスと確実に一致するようにしました。 (Guancheng Luo)
これは一般的でない等価性の記法を持つインデックスの演算子クラスだけの問題と考えられますが、理論的には誤っていますので、確認するようにしました。
pg_read_all_stats
ロールのメンバーが期待される通りに全ての統計ビューを確実に読めるようにしました。
(Magnus Hagander)
pg_stat_progress_*
ビューの基底にある関数がこの情報を入手できませんでした。
information_schema
.triggers
ビューでの性能退行を修正しました。
(Tom Lane)
本修正は、テーブル名を限定する外側のWHERE
句をビューにブッシュダウンできるように、このビューを再定義して、データベース中の全トリガではなく関心のあるテーブルに属するトリガに対してのみ計算が行われるようにします。
多数のトリガを持つデータベースで、これはこの形の問い合わせに対して著しい速度差をもたらしました。
v11より前ではこのように動作していたので、これは潜在的な性能の退行です。
これを問題とするユーザは、ビュー定義を差し替える(あるいは、単にinformation_schema
スキーマ全体を削除して再インストールする)ことで修正できます。
浮動小数点のオーバーフロー/アンダーフロー判定での性能退行を修正しました。 (Emre Hasegeli)
以前のリファクタリングの結果、一部のホットコードパスでisinf()
が余計な回数呼び出されるようになっていました。
フレーズ検索の上のNOTを正しく扱うように全文検索を修正しました。 (Tom Lane)
!(foo<->bar)
のような問い合わせがGiSTやGINインデックス検索として実行されるときにマッチする行を探すのに失敗しました。
前方一致と重み限定の両方を伴う要素を含むフレーズ検索の場合について、全文検索を修正しました。 (Tom Lane)
ts_headline()
をフレーズ問い合わせでの動作時により良いヘッドライン選択をするように修正しました。
(Tom Lane)
gin_fuzzy_search_limit
の処理でバグを修正しました。
(Adé Heyward, Tom Lane)
gin_fuzzy_search_limit
の小さな値は、意図しない同インデックスページの多数の再スキャンによって、予期せぬ遅延をもたらすおそれがありました。
他のコードパスでは意図したフィルタリングの適用に完全に失敗して、場合によっては多すぎる値が返ることありました。
circle
型の入力でドキュメント記載の通りに「(
」形式を受け付けできるようにしました。
(David Zhang)
x
,y
),r
get_bit()
およびset_bit()
関数が256MBより長いbytea
文字列に対処できるようにしました。
(Movead Li)
ビット数引数はint4
でしかないので、これらの関数を使って長いbytea
の最初の256MBを超えたビットにアクセスすることは不可能です。
v13で引数をint8
に拡張するつもりですが、当面はこれら関数が長いbytea
の最初の部分文字列に対して動作するようにしました。
pg_ls_waldir()
および類似の関数で、ファイルが見つからないというエラーを無視するようにしました。
(Tom Lane)
これは、ディレクトリエントリを見てから、そこにstat()
実行を試みるまでの間にファイルが削除された場合の競合状態による失敗を防止します。
pg_ls_dir()
、pg_timezone_names()
、pg_tablespace_databases()
および同類の関数で、ディレクトリに対するオープンファイル記述子の起こりうるリークを回避しました。
(Justin Pryzby)
anyrange
入力だけ与えられたときにanyarray
出力の実際の型を正しく推論するように多様関数の型解決を修正しました。
(Tom Lane)
GSSAPI接続が対応したコンパイルでないために拒絶されてクライアントが代わりにSSLを試みる場合について、サーバの接続開始ロジックを修正しました。 (Andrew Gierth)
これは「unsupported frontend protocol」(サポートされないフロントエンドプロトコル)という偽のエラーをもたらしました。
GSSAPI暗号化におけるメモリリークを修正しました。 (Tom Lane)
GSSAPI暗号化が使われてる場合、バックエンドとlibpqの両方でセッション中に送信したデータの合計と同じだけのメモリリークが生じていました。
問い合わせのFROM
句で使われている集合を返す関数について、問い合わせのライフスパンでのメモリリークを修正しました。
(Andres Freund)
複数の実行にまたがるハッシュサブプランのハッシュテーブルのリークを回避しました。 (Andreas Karlsson, Tom Lane)
問い合わせがハッシュサブプランを十分な回数再実行する場合には、この誤りは深刻なメモリ膨張をもたらす可能性がありました。
プランナの何もしないドメインの型変換の取り扱いが改善しました。 (Tom Lane)
何もしないドメインの型変換が式から完全には除去されない一部の場合を修正しました。
REINDEX
がセッション終了シグナルで終了したときの、可能性の低いクラッシュを回避しました。
(Tom Lane)
EXPLAIN
でおそらくは誤ったハッシュ結合テーブルの統計の出力を防止しました。
(Konstantin Knizhnik, Tom Lane, Thomas Munro)
VACUUM VERBOSE
でヒープ切り捨て段階に対する経過時間の報告を修正しました。
(Tatsuhito Kasahara)
VACUUM VERBOSE
の出力で起こりうる削除されたBツリーインデックスページの過少計数を修正しました。
(Peter Geoghegan)
Bツリーインデックスでの最も古い削除されたページに対する誤った記録付けを修正しました。 (Peter Geoghegan)
これによる著しいユーザに見える影響はおそらく無いと思われますが、いつVACUUM
がインデックスクリーンアップのスキャンを省略できるかについて僅かに誤った判断を引き起こす可能性がありました。
TimelineHistoryReadとTimelineHistoryWriteの待機状態がタイムライン履歴ファイルを読み書きする全てのコードパスで確実に報告されるようにしました。 (Masahiro Ikeda)
プロセスのPSステータスで「waiting」が場合よっては2回表示されるのを回避しました。 (Masahiko Sawada)
ANALYZE
が拡張統計データに対してカタログタプルを置き換えるときの競合状態を回避しました。
(Dean Rasheed)
「冗長」な周回防止バキュームの不用意な省略を除去しました。 (Michael Paquier)
これは、autovacuumが同じバキュームジョブを繰り返し試みてはスキップするループに陥るかもしれないという稀な場合を回避します。
INCLUDEされた列がBツリーのピボットタプルから常に削除されることを保証しました。 (Peter Geoghegan)
この誤りは一部の稀な場合に空間を無駄にしますが、それ以外は無害です。
失敗したREINDEX CONCURRENTLY
の後に残る可能性がある無効なTOASTインデックスをうまく処理するようにしました。
(Julien Rouhaud)
失敗したREINDEX CONCURRENTLY
の後、有効なインデックスの依存関係が確実に残るようにしました。
(Michael Paquier)
これまでは古いインデックスがpg_depend
のリンクを全く伴わずに残されてしまう可能性があり、そのため、例えば親テーブルが削除された場合にそのインデックスは削除されないでしょう。
autovacuumが削除したばかりの一時スキーマにアクセスを試みた場合の失敗を回避しました。 (Tom Lane)
この障害はスーパーユーザが手動で一時スキーマを削除した場合だけ生じます。これは通常の使われ方ではありませんが機能すべきです。
クラッシュリカバリ時の早すぎるWALセグメントのリサイクルを回避しました。 (Jehan-Guillaume de Rorthais)
クラッシュリカバリ中にアーカイブされる準備ができたWALセグメントは、潜在的にアーカイブされずにリサイクルされました。
アーカイブリカバリ時の不適切なタイムラインのスキャンを回避しました。 (Kyotaro Horiguchi)
これはアーカイブストレージから存在しないWALファイルを取得しようとする多数の試行を除去できて、アーカイブのアクセスが遅い場合に役立ちます。
ロジカルデコーディングでの偽の「subtransaction logged without previous top-level txn record」(サブトランザクションが前のトップレベルトランザクションレコード無しに記録されました)エラーの検査を削除しました。 (Arseny Sher, Amit Kapila)
この状態は様々なシナリオで正当に到達できるため、検査を除きました。
WALデータの早すぎる除去のためにレプリケーションスロットのコピー後に起こりうる失敗を回避しました。 (Masahiko Sawada, Arseny Sher)
エラーのコードパスでレプリケーションスロットのio_in_progress_lock
が確実に解放されるようにしました。
(Pavan Deolasee)
これによりwalsenderが後にロックを待って固まってしまう可能性がありました。
ロジカルレプリケーションにより更新が発行されたときに生成列が確実に正しく処理されるようにしました。 (Peter Eisentraut)
同期スタンバイの管理で競合状態を修正しました。 (Tom Lane)
synchronous_standby_names
設定の変更の間、同期コミットを待機しているトランザクションを解放して良いかどうかについて誤った判断が行われる可能性のある時間が存在しました。
他にも、walsenderプロセスが終了して直ちに他のもので置き換えられた場合に、同様に誤判断の危険性がありました。
少数のエラー報告に欠けていたSQLSTATE値を追加しました。 (Sawada Masahiko)
イベントトリガ関数の通常関数としての実行を確実に拒絶するようにPL/pgSQLを修正しました。 (Tom Lane)
libpqでのsslmode=verify-full
を使ったときのメモリリークを修正しました。
(Roman Peshkurov)
接続開始時の証明書の検証がいくらかメモリリークする可能性がありました。 これはクライアントプロセスがその生存期間の間に多数のデータベース接続をオープンした場合に問題になると考えられます。
全てのプラットフォームで「-
」というだけの引数を「標準入力から読む」という意味で処理するように、ecpgを修正しました。
(Tom Lane)
psqlでの失敗した接続の再確立を試みたときのクラッシュを修正しました。 (Michael Paquier)
psqlの\gx
コマンドでファイル名引数のタブ補完を可能にしました。
(Vik Fearing)
ALTER ... DEPENDS ON EXTENSION
に対するpg_dumpの対応を加えました。
(Álvaro Herrera)
pg_dumpは以前はこのコマンドで加わった依存関係を無視していて、ダンプ/リストアやpg_upgradeのときに忘れられる原因になりました。
RLSポリシーオブジェクトのコメントをダンプするようにpg_dumpを修正しました。 (Tom Lane)
pg_dumpで、イベントトリガのリストアを最後まで後回しにするようにしました。 (Fabrízio de Royes Mello, Hamid Akhtar, Tom Lane)
これはイベントトリガが他のオブジェクトのリストアと干渉するかもしれない危険性を最小化します。
pg_basebackupが確実に有効なtarファイルを生成するようにしました。 (Robert Haas)
一部の場合にゼロの部分ブロックがファイル末尾に追加されてたようです。 これは一般的なtarのバージョンでは無害であると見られますが、POSIXファイル形式仕様としては不適切です。
pg_checksumsが異なるPostgreSQLメジャーバージョンに属するテーブル空間のサブディレクトリを読み飛ばすようにしました。 (Michael Banck, Bernd Helmle)
このようなサブディレクトリは実際には対象のデータベースクラスタに属しておらず、そのため処理されるべきではありません。
pg_checksumsと関連したプログラムでpg_internal.init
の一時的な複製を無視するようにしました。
(Michael Paquier)
createdbユーティリティで--encoding
、--lc-ctype
、および、--lc-collate
のクォート付けを修正しました。
(Michael Paquier)
contrib/lo
のlo_manage()
関数がトリガとしてでなく直接に呼び出した場合にクラッシュしていました。
(Tom Lane)
contrib/ltree
でltree
とlquery
の長さフィールドのオーバーフローを防止しました。
(Nikita Glukhov)
contrib/pageinspect
のbt_metap()
関数で、oldest_xact値が2^31-1を超えたときの失敗を回避しました。
(Peter Geoghegan)
このようなXIDは負の整数と報告されるようになりました。これは優れていませんがエラーが出ることは防げます。
v13では正常な報告を提供するため出力引数をint8
に拡張します。
contrib/sepgsql
でキャッシュ参照のリークを修正しました。
(Michael Luo)
Windowsでpg_ctl start
時の早すぎるpostmasterログファイルの作成を回避しました。
(Alexander Lakhin)
これまでのコードではpostmasterがそこに書き込みできない権限設定を持つファイルが作られるのを許す可能性がありました。
WindowsでUnix形式のロケール名を扱うときの失敗を回避しました。 (Juan José Santamaría Flecha)
Windowsで、PG_COLOR
による色付けに対応したプログラムについてコンソールをVT100互換モードに設定するようにしました。
(Juan José Santamaría Flecha)
これ無しでは、色付けオプションが実際には機能しません。
ereport()
の呼び出しで追加の括弧を要求しないようにしました。
(Andres Freund, Tom Lane)
configure時にlibxml2の場所を探すのに、可能であればpkg-configを使うようにしました。 (Hugh McMaster, Tom Lane, Peter Eisentraut)
pkg-configが無いまたはlibxml2の情報が無い場合は、これまで通りxml2-configを問い合わせます。
この変更は、PATH
にデフォルトでないlibxml2バージョンのxml2-configを置くことで、PostgreSQLにその別バージョンを使わせるビルドプロセスを壊す可能性があります。
代替に、XML2_CONFIG
をデフォルトでないxml2-configを指すように設定してください。
この方法は、より古い、あるいは、より新しいPostgreSQLでも動作するでしょう。
libpqとecpgに対するMakefileの依存関係を修正しました。 (Dagfinn Ilmari Mannsåker)
MSVCビルドで、Pythonのパス名において空白文字をうまく処理できるようにしました。 (Victor Wagner)
MSVCビルドで、Visual Studioバージョンの検出をより多くの言語設定で動作するように修正しました。 (Andrew Dunstan)
MSVCビルドで、Windows以外のビルドでは既にそうなっているように、3.0より新しいbisonバージョンでは-Wno-deprecated
を使うようにしました。
タイムゾーンデータファイルをtzdata release 2020aに更新にしました。モロッコとカナダのユーコンの夏時間法の変更と、上海の歴史的修正が含まれます。
現在の英語使用を反映してAmerica/GodthabゾーンがAmerica/Nuukに変更されましたが、旧名称も互換性リンクとして引き続き利用可能です。
また、initdbの知られているWindowsタイムゾーン名のリストを最近の追加が含まれるように更新し、Windowsプラットフォームでシステムタイムゾーン設定を正しく変換する確率を改善しました。