リリース日: 2018-02-08
このリリースは10.1に対し、様々な不具合を修正したものです。 10メジャーリリースにおける新機能については、E.6を参照してください。
10.Xからの移行ではダンプ/リストアは不要です。
しかしながら、contrib/cube
の~>
演算子を使っているなら、これに関する下記の項目を参照してください。
また、10.1よりも前のバージョンからアップグレードする場合、E.5を参照してください。
複数の式を含むパーティションキーの処理を修正しました。 (Álvaro Herrera, David Rowley)
この障害はクラッシュ、または、注意深く作りこまれた入力による任意バックエンドメモリの露出をひき起こします。 (CVE-2018-1052)
pg_upgradeで作られる全ての一時ファイルが全ユーザ読み取り可にならないようにしました。 (Tom Lane, Noah Misch)
pg_upgradeは、通常は一時ファイルを実行ユーザのみ読み書きできるように制限します。
しかし、ユーザのumask
設定が許している場合には、pg_dumpall -g
の出力を含む一時ファイルがグループ読み取り可や全ユーザ読み取り可、さらには書き込み可になっていました。
複数ユーザがいるマシンでの典型的な使用では、umask
および作業ディレクトリのパーミッションを本問題を防ぐのに足りるだけ厳しくしているはずですが、本障害でデータベースパスワードを衆目に晒してしまうようにpg_upgradeを使う人々もいるでしょう。
(CVE-2018-1053)
KEY SHAREロック中に更新されたタプルのバキュームを修正しました。 (Andres Freund, Álvaro Herrera)
一部のケースでVACUUM
は、このようなタプルの除去に、それらが無効なタプルであるのに、失敗していました。これにより様々なデータ破損動作がひき起こされます。
新たなオーバーフローページを追加した後、ハッシュインデックスのメタページをダーティと印付けするのに失敗しており、これを修正しました。 (Lixian Zou, Amit Kapila)
バキュームがGINインデックスの挿入ペンディングリストを常にクリーンアップするようにしました。 (Masahiko Sawada)
これには無効なインデックスエントリが確実に削除される必要あります。 旧来コードは誤っていて、他プロセスが同時にクリーンアップを実行しているときにバキュームがクリーンアップ処理を飛ばすのを許し、その結果、インデックスに無効なエントリが置き去りにされる危険がありました。
一部のLSN取得で不十分なバッファロックを修正しました。 (Jacob Champion, Asim Praveen, Ashwin Agrawal)
これらの誤りにより同時データ読み込みで誤動作のおそれがありました。 起こりうる結果は完全には解明されていません。
出力がGROUPING SETS
で使われる副問い合わせの平坦化を伴う場合における誤った問い合わせ結果を修正しました。
(Heikki Linnakangas)
booleanまたは配列型のパーティションキーに対するリストパーティショニング制約の処理を修正しました。 (Amit Langote)
ALTER TABLE NO INHERIT
でツリーから削除されている幾つかの子テーブルに伴って同時発生する継承ツリー上の問い合わせでの不要な失敗を回避しました。
(Tom Lane)
複数セッションがCREATE INDEX CONCURRENTLY
を実行しているときの偽性のデッドロックエラーを修正しました。
(Jeff Janes)
VACUUM FULL
の中で、pg_class
のテーブルサイズ属性をより早くに更新するようにしました。
(Amit Kapila)
初期ハッシュサイズを定めるのにpg_class
統計を使うので、
これはテーブルのハッシュインデックスを再構築するときの劣った振る舞いを防ぎます。
ゼロ列に対するUNION
/INTERSECT
/EXCEPT
を修正しました。
(Tom Lane)
TYPE指定されたテーブルとパーティションでIDENTITY列を禁止しました。 (Michael Paquier)
今のところ、これらの場合はサポートされない機能として扱われます。
IDENTITY列に挿入するとき適切なデフォルト値を適用するにあたり様々な失敗があり、これを修正しました。 (Michael Paquier, Peter Eisentraut)
いくつかの場合、特にCOPY
およびALTER TABLE ADD COLUMN
で、期待されるデフォルト値が適用されず代わりにNULL値が挿入されました。
継承ツリーが外部子テーブルを含むときのエラーを修正しました。 (Etsuro Fujita)
一つの継承ツリーに通常テーブルと外部テーブルが混在していると、UPDATE
およびDELETE
問い合わせに対して誤ったプランが作られました。
これは一部の場合、特に外部子テーブルに行単位トリガがあるときに、目に見えるエラーをひき起こしました。
LATERAL
副問い合わせ内のVALUES
内の相関サブSELECT
での失敗を修正しました。
(Tom Lane)
LATERAL副問い合わせ内の入れ子になったUNION ALL
を伴う一部の場合での「could not devise a query plan for the given query(与えられた問合せに対してクエリプランを生成できませんでした)」プランナエラーを修正しました。
(Tom Lane)
関数従属性統計がboolean列に使われるようにしました。 (Tom Lane)
これまではboolean列に対する拡張統計を宣言できて収集もされましたが、プランナがそれらを適用しませんでした。
グルーピング列において複数行を返す関数を含む副問い合わせにより出力されたグループの数の過小評価を回避しました。 (Tom Lane)
SELECT DISTINCT unnest(foo)
のような場合に、10.0では以前のリリースと比べてより少ない出力行数見積を得ていて、望ましくないプラン選択になる可能性がありました。
以前の見積処理に戻しました。
ロジカルレプリケーションのワーカでのトリガ使用を修正しました。 (Petr Jelinek)
クラッシュしたトランザクションに対するディスクファイルを正しくクリーンアップするようにロジカルデコーディングを修正しました。 (Atsushi Torikoshi)
ロジカルデコーディングでは多数のWALレコードを生成するトランザクションに対してWALレコードがディスクに溢れ出すことがあります。 通常はこれらのファイルはトランザクションのコミットまたはアボートのレコードが到着した後にクリーンアップされますが、そのようなレコードがずっと見つからない場合に削除をするコードは不適切な動作をしました。
大きなトランザクションを実行しているときのwalsenderのタイムアウト失敗と割り込み応答失敗を修正しました。 (Petr Jelinek)
レプリケーションオリジンを削除するときの競合状態を修正しました。 削除処理が無期限に待たされる可能性がありました。 (Tom Lane)
pg_read_all_stats
ロールのメンバがpg_stat_replication
ビューでwalsender統計を見れるようにしました。
(Feike Steenbergen)
pg_stat_activity
ビューでベースバックアップを送出しているwalsendersをアクティブと見せるようにしました。
(Magnus Hagander)
pg_hba_file_rules
ビューでのscram-sha-256
認証メソッドの報告を修正しました。
(Michael Paquier)
これまでscram-sha256
と出力されていて、これが正しい綴りであるようにユーザを混乱させる可能性がありました。
他の権限検査関数と同様に、has_sequence_privilege()
をWITH GRANT OPTION
検査をサポートするように修正しました。
(Joe Conway)
UTF8エンコーディングを使ったデータベースで、異なるエンコーディングを主張するあらゆるXML宣言を無視するようにしました。 (Pavel Stehule, Noah Misch)
XML文字列は常にデータベースエンコーディングで格納されますので、libxmlを他エンコーディングの宣言で動作させることは誤った結果をもたらします。
いずれにせよUTF8以外のエンコーディングでは非ASCIIのXMLデータのサポートは保証されませんので、バグ互換のために以前の動作を維持します。
本変更はxpath()
と関連関数のみに影響があります。
他のXMLコードパスは既にこのように動作します。
将来のマイナープロトコルバージョンに対する前方互換性を提供します。 (Robert Haas, Badrul Chowdhury)
今までPostgreSQLサーバは3.0より新しいバージョンのプロトコルを使った要求を単に拒絶していました。 そのため、プロトコルバージョン番号のメジャー部分とマイナー部分に機能的な違いがありませんでした。 クライアントがエラーにならずにバージョン3.xを要求できるようにしました。 サーバは3.0しか理解しないことを示すメッセージが返されます。 現時点では本変更による違いは生じませんが、これをバックパッチすることで将来のマイナープロトコル更新の導入を高速化できるでしょう。
SCRAMチャンネルバインドに対応したクライアント(v11以降のlibpqなど)がv10 サーバに接続できるようにしました。 (Michael Paquier)
v10はこの機能を持たず、これを使うかどうかの接続時ネゴシエーションが誤って行われていました。
ConditionVariableBroadcast()
のライブロックを回避しました。
(Tom Lane, Thomas Munro)
繰り返し不運なタイミングが生じると、ある条件変数に対する全ての待機を起こそうと試みているプロセスが無限ループする可能性がありました。 v10では条件変数の使用法が制限されてるため、これは並列インデックススキャンとレプリケーションスロット上の一部処理でのみ影響します。
サブトランザクションがアボートするときに条件変数に対する待機を正しくクリーンアップするようにしました。 (Robert Haas)
postmasterプロセスが終了したなら、条件変数を待っている子プロセスが直ちに終了するようにしました。 (Tom Lane)
複数のGatherノードを使う並列問い合わせでのクラッシュを修正しました。 (Thomas Munro)
削除された、あるいは、half-deadのインデックスページを処理するときの並列インデックススキャンでのハングアップを修正しました。 (Amit Kapila)
並列ビットマップヒープスキャンが共有メモリセグメントを割り当てできない場合のクラッシュを回避しました。 (Robert Haas)
パラレルワーカプロセスの開始失敗をうまく扱えるようにしました。 (Amit Kapila, Robert Haas)
これまで並列問い合わせは、fork()
の失敗や他の低確率な問題の結果でワーカが開始できない場合に、無期限にハングアップすることがありました。
並列問い合わせの開始時にパラレルワーカが一つも得られないときの不要な失敗を回避しました。 (Robert Haas)
パラレルワーカからのEXPLAIN
統計の収集を修正しました。
(Amit Kapila, Thomas Munro)
パラレルワーカに渡された問い合わせ文字列が正しくNULL終端するようにしました。 (Thomas Munro)
パラレルワーカからpostmasterログ出力にゴミが吐き出されるのを防ぎます。
__int128
を使うときの安全でないアライメント想定を回避しました。
(Tom Lane)
典型的にはコンパイラは__int128
変数は16バイト境界に配置されるものと想定しますが、私たちのメモリ割り当て基盤はそれを保証するように作られていません。
また、MAXALIGN設定を増やすことは複数の理由で実現不能と見られます。
コンパイラに小さいアライメントを想定するように伝えられる場合に限って__int128
を使用できるようにコードを修正しました。
これまで知られているこの問題の症状は一部の並列集約問い合わせでのクラッシュだけです。
極端に深く入れ子になった集合演算のプラン作成時のスタックオーバーフローによるクラッシュを防止しました。 (Tom Lane)
マージ結合の内側の要素であるインデックススキャンのEvalPlanQual再チェックを行うときのクラッシュを回避しました。 (Tom Lane)
これは選択された行の一部に同時に更新が行われているときに、結合の更新またはSELECT FOR UPDATE
をした場合にのみ発生します。
テーブルに対する拡張統計が定義されているけれど計算不能であるときのautovacuumでのクラッシュを修正しました。 (Álvaro Herrera)
pg_hba.conf
にあらわれるLDAP URLの一部タイプに対するNULLポインタクラッシュを修正しました。
(Thomas Munro)
単純ハッシュテーブルの過度な成長によるout of memoryエラーを防止しました。 (Tomas Vondra, Andres Freund)
PL/pgSQL文書内のINSTR()
関数のサンプルを修正しました。
(Yugo Nagata, Tom Lane)
これらの関数はOracle®互換であると述べられていますが、それは厳密ではありませんでした。 特に負の第3パラメータの解釈に不一致がありました。 Oracleは負値は対象部分文字列を開始できる最終位置を示すものと考えますが、サンプル関数は終わりにできる最終位置であると解釈していました。 また、Oracleは第4パラメータに対するゼロまたは負値でエラーを出しますが、サンプル関数はゼロを返しました。
本サンプルコードはOracleの振る舞いにより正確に一致するように修正されました。 このコードをアプリケーション内にコピーしていたユーザはそのコピーを更新したいでしょう。
アーカイブ出力フォーマットでACL(パーミッション)、コメントおよびセキュリティラベルの項目を確実に識別可能にするようにpg_dumpを修正しました。 (Tom Lane)
ACLアーカイブエントリの「tag」部分は通常は単に関連したオブジェクトの名前です。
これをそうでなくてオブジェクトタイプで始まるようにして、ACLをコメントとセキュリティラベルのアーカイブ項目で既に使われている慣習に一致させます。
また、データベース全体に対するコメントとセキュリティラベルの項目を、もし在るなら、これらも習慣に従うように、タグがDATABASE
で始まるように修正しました。
これはタグがLARGE OBJECT
で始まるかどうかでラージオブジェクト関連の項目を識別しようとするコードでの誤った一致を防ぎます。
スキーマのみ、または、データのみのダンプで、スキーマでなくデータとして項目を誤って分類してしまい、望ましくない結果になる可能性がありました。
この変更によりpg_restore --list
の出力でユーザに見える違いがある点に注意してください。
pg_rewindのcopy_file_range
関数を同名の新たなLinuxシステムコールとの衝突を回避するために名前変更しました。
(Andres Freund)
この変更はより新しいglibcバージョンでのビルド失敗を防ぎます。
ecpgで正しい長さを持たない指示子の配列を検出してエラーを出すようにしました。 (David Rader)
contrib/cube
のcube
~>
int
演算子の振る舞いをKNN検索と互換性を持つように変更しました。
(Alexander Korotkov)
第2引数(次元選択)の意味が、様々な次元数のキューブを処理するときでも、どの値が選択されたかを予測できるように変更されました。
これは非互換の変更ですが、本演算子のこの点はKNN検索で習慣となっていたため、現状のままではむしろ使い物になりません。 この更新の導入後は、この演算子を使う全ての式インデックスやマテリアライズドビューを再構築/リフレッシュする必要があります。
同一のコピー元と宛先のポインタでmemcpy()
を使うことで、contrib/hstore
でlibcアサートが発生するのを回避しました。
(Tomas Vondra)
contrib/pageinspect
でタプルのNULLビットマップの誤った表示を修正しました。
(Maksim Milyutin)
contrib/pageinspect
のhash_page_items()
関数からの誤った出力を修正しました。
(Masahiko Sawada)
contrib/postgres_fdw
で、リモート結合を伴うプランを作成する時の「outer pathkeys do not match mergeclauses」(外側パスキーがマージ句と一致しません)というプランナエラーを回避しました。
(Robert Haas)
contrib/postgres_fdw
で、GROUP BY
項目が重複したときのプランナエラーを回避しました。
(Jeevan Chalke)
macOSでPostgresを自動起動する方法の現代的なサンプルを提供しました。 (Tom Lane)
contrib/start-scripts/osx
のスクリプトは10年以上の間、非推奨とされた基盤を使っていて、ここ数年のmacOSリリースではもはや全く動作しません。
新しいlaunchd基盤を使ったスクリプトを含む新たなサブディレクトリcontrib/start-scripts/macos
を追加しました。
Windowsでビルド時に設定で指定するOpenSSLライブラリの誤選択を修正しました。 (Andrew Dunstan)
libperlのMinGWビルドバージョンのリンクに対応しました。 (Noah Misch)
これはいくつかの一般的なWindowsむけPerl配布物でPL/Perlをビルド可能にします。
32bitのlibperlが-D_USE_32BIT_TIME_T
を要するかを検査するようにMSVCビルドを修正しました。
(Noah Misch)
利用可能なPerl配布物は何を除いているかについて一貫性に欠けていて、そのことの信頼できる報告手段も不足しています。 そのため、ビルド時の実際に使われているライブラリが何をするかのテストに依存します。
Windowsでpostmaster起動にてクラッシュダンプハンドラをより早く導入するようにしました。 (Takayuki Tsunakawa)
これにより起動時初期の従来ダンプを生成しなかった障害で、コアダンプ取得が可能になるでしょう。
Windowsでpostmaster起動時の早い時点でメッセージを出力するときの、文字エンコーディング変換関連のクラッシュを回避しました。 (Takayuki Tsunakawa)
既存のNetBSDのMotorola68KのスピンロックのコードをOpenBSDむけにも使用するようにしました。 (David Carlier)
Motorola 88Kのスピンロック対応を加えました。 (David Carlier)
タイムゾーンデータファイルをtzdata release 2018cに更新しました。
ブラジル、サントメ・プリンシペの夏時間法の変更、ボリビア、日本、南スーダンの歴史的な修正が含まれます。
US/Pacific-New
ゾーンは削除されました(これはいずれにせよAmerica/Los_Angeles
の別名にすぎません)。