リリース日: 2018-02-08
このリリースは9.6.6に対し、各種不具合を修正したものです。 9.6メジャーリリースにおける新機能については、E.17 を参照してください。
9.6.Xからの移行ではダンプ/リストアは不要です。
しかしながら、contrib/cube
の~>
演算子を使っているなら、これに関する下記の項目を参照してください。
また、9.6.6よりも前のバージョンからアップグレードする場合は、E.11を参照して下さい。
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
は、このようなタプルの除去に、それらが無効なタプルであるのに、失敗していました。これにより様々なデータ破損動作がひき起こされます。
バキュームがGINインデックスの挿入ペンディングリストを常にクリーンアップするようにしました。 (Masahiko Sawada)
これには無効なインデックスエントリが確実に削除される必要あります。 旧来コードは誤っていて、他プロセスが同時にクリーンアップを実行しているときにバキュームがクリーンアップ処理を飛ばすのを許し、その結果、インデックスに無効なエントリが置き去りにされる危険がありました。
一部のLSN取得で不十分なバッファロックを修正しました。 (Jacob Champion, Asim Praveen, Ashwin Agrawal)
これらの誤りにより同時データ読み込みで誤動作のおそれがありました。 起こりうる結果は完全には解明されていません。
出力がGROUPING SETS
で使われる副問い合わせの平坦化を伴う場合における誤った問い合わせ結果を修正しました。
(Heikki Linnakangas)
ALTER TABLE NO INHERIT
でツリーから削除されている幾つかの子テーブルに伴って同時発生する継承ツリー上の問い合わせでの不要な失敗を回避しました。
(Tom Lane)
複数セッションがCREATE INDEX CONCURRENTLY
を実行しているときの偽性のデッドロックエラーを修正しました。
(Jeff Janes)
継承ツリーが外部子テーブルを含むときのエラーを修正しました。 (Etsuro Fujita)
一つの継承ツリーに通常テーブルと外部テーブルが混在していると、UPDATE
およびDELETE
問い合わせに対して誤ったプランが作られました。
これは一部の場合、特に外部子テーブルに行単位トリガがあるときに、目に見えるエラーをひき起こしました。
LATERAL
副問い合わせ内のVALUES
内の相関サブSELECT
での失敗を修正しました。
(Tom Lane)
LATERAL副問い合わせ内の入れ子になったUNION ALL
を伴う一部の場合での「could not devise a query plan for the given query(与えられた問合せに対してクエリプランを生成できませんでした)」プランナエラーを修正しました。
(Tom Lane)
クラッシュしたトランザクションに対するディスクファイルを正しくクリーンアップするようにロジカルデコーディングを修正しました。 (Atsushi Torikoshi)
ロジカルデコーディングでは多数のWALレコードを生成するトランザクションに対してWALレコードがディスクに溢れ出すことがあります。 通常はこれらのファイルはトランザクションのコミットまたはアボートのレコードが到着した後にクリーンアップされますが、そのようなレコードがずっと見つからない場合に削除をするコードは不適切な動作をしました。
大きなトランザクションを実行しているときのwalsenderのタイムアウト失敗と割り込み応答失敗を修正しました。 (Petr Jelinek)
他の権限検査関数と同様に、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しか理解しないことを示すメッセージが返されます。 現時点では本変更による違いは生じませんが、これをバックパッチすることで将来のマイナープロトコル更新の導入を高速化できるでしょう。
パラレルワーカプロセスの開始失敗をうまく扱えるようにしました。 (Amit Kapila, Robert Haas)
これまで並列問い合わせは、fork()
の失敗や他の低確率な問題の結果でワーカが開始できない場合に、無期限にハングアップすることがありました。
パラレルワーカからのEXPLAIN
統計の収集を修正しました。
(Amit Kapila, Thomas Munro)
__int128
を使うときの安全でないアライメント想定を回避しました。
(Tom Lane)
典型的にはコンパイラは__int128
変数は16バイト境界に配置されるものと想定しますが、私たちのメモリ割り当て基盤はそれを保証するように作られていません。
また、MAXALIGN設定を増やすことは複数の理由で実現不能と見られます。
コンパイラに小さいアライメントを想定するように伝えられる場合に限って__int128
を使用できるようにコードを修正しました。
これまで知られているこの問題の症状は一部の並列集約問い合わせでのクラッシュだけです。
極端に深く入れ子になった集合演算のプラン作成時のスタックオーバーフローによるクラッシュを防止しました。 (Tom Lane)
pg_hba.conf
にあらわれるLDAP URLの一部タイプに対するNULLポインタクラッシュを修正しました。
(Thomas Munro)
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/postgres_fdw
で、リモート結合を伴うプランを作成する時の「outer pathkeys do not match mergeclauses」(外側パスキーがマージ句と一致しません)というプランナエラーを回避しました。
(Robert Haas)
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のMotorola 68KのスピンロックのコードをOpenBSDむけにも使用するようにしました。 (David Carlier)
Motorola 88Kのスピンロック対応を加えました。 (David Carlier)
タイムゾーンデータファイルをtzdata release 2018cに更新しました。
ブラジル、サントメ・プリンシペの夏時間法の変更、ボリビア、日本、南スーダンの歴史的な修正が含まれます。
US/Pacific-New
ゾーンは削除されました(これはいずれにせよAmerica/Los_Angeles
の別名にすぎません)。