リリース日: 2018-02-08
このリリースは9.3.20に対し、各種不具合を修正したものです。 9.3メジャーリリースにおける新機能については、E.77を参照してください。
9.3.Xからの移行ではダンプ/リストアは不要です。
しかしながら、9.3.18よりも前のバージョンからアップグレードする場合には、E.59を参照してください。
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
は、このようなタプルの除去に、それらが無効なタプルであるのに、失敗していました。これにより様々なデータ破損動作がひき起こされます。
一部のLSN取得で不十分なバッファロックを修正しました。 (Jacob Champion, Asim Praveen, Ashwin Agrawal)
これらの誤りにより同時データ読み込みで誤動作のおそれがありました。 起こりうる結果は完全には解明されていません。
ALTER TABLE NO INHERIT
でツリーから削除されている幾つかの子テーブルに伴って同時発生する継承ツリー上の問い合わせでの不要な失敗を回避しました。
(Tom Lane)
LATERAL
副問い合わせ内のVALUES
内の相関サブSELECT
での失敗を修正しました。
(Tom Lane)
LATERAL副問い合わせ内の入れ子になったUNION ALL
を伴う一部の場合での「could not devise a query plan for the given query(与えられた問合せに対してクエリプランを生成できませんでした)」プランナエラーを修正しました。
(Tom Lane)
他の権限検査関数と同様に、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しか理解しないことを示すメッセージが返されます。 現時点では本変更による違いは生じませんが、これをバックパッチすることで将来のマイナープロトコル更新の導入を高速化できるでしょう。
極端に深く入れ子になった集合演算のプラン作成時のスタックオーバーフローによるクラッシュを防止しました。 (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
の出力でユーザに見える違いがある点に注意してください。
ecpgで正しい長さを持たない指示子の配列を検出してエラーを出すようにしました。 (David Rader)
同一のコピー元と宛先のポインタでmemcpy()
を使うことで、contrib/hstore
でlibcアサートが発生するのを回避しました。
(Tomas Vondra)
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
の別名にすぎません)。