リリース日: 2018-08-09
このリリースは9.3.23に対し、各種不具合を修正したものです。 9.3メジャーリリースにおける新機能については、E.77を参照してください。
PostgreSQLコミュニティは9.3.Xリリースシリーズに対するアップデートのリリースを、2018年9月を過ぎたらすぐに停止する予定です。 早めに新しいリリースのブランチに更新することを推奨します。
9.3.Xからの移行ではダンプ/リストアは不要です。
しかしながら、9.3.23より前のバージョンからアップグレードする場合にはE.54を参照してください。
接続試行の間でlibpqの状態の完全リセットに失敗していたものを修正しました。 (Tom Lane)
dblink
やpostgres_fdw
の権限の無いユーザが、サーバ実行OSユーザが所有する~/.pgpass
ファイルなどのサーバ側認証情報を利用するのを防ぐ狙いの検査をすり抜けるおそれがありました。
ローカル接続上のpeer認証を許可しているサーバは特に攻撃されやすいです。
postgres_fdw
セッションに対するSQLインジェクションなどの他の攻撃も可能です。
この方法によるpostgres_fdw
への攻撃には指定の接続パラメータで外部サーバオブジェクトを作れることが必要ですが、dblink
に対してはアクセス可能な任意のユーザがこの問題を悪用できます。
他のありえそうな攻撃シナリオは考えにくいですが、一般にはlibpqを使ったアプリケーションに対して接続パラメータを指定できる攻撃者は悪さをすることが可能です。
この問題を報告したAndrew Krasichkovに感謝します。
(CVE-2018-10915)
「nailed」な(固定された)システムカタログに対するrelfrozenxid
値およびrelminmxid
値の更新が適時に処理されるようにしました。
(Andres Freund)
過度に楽観的なキャッシュ方式は、これらの更新が他のセッションから参照されることを妨げるおそれがあり、偽性のエラー、および/または、データ破損をひき起こしました。
古くなったキャッシュデータが既存セッションのみならず新たなセッションにまで持続する可能性があるため、この問題はpg_authid
などの共有カタログにおいて著しくより悪質です。
昇格したばかりのスタンバイがリカバリ後の最初のチェックポイントを完了する前にクラッシュする場合について修正しました。 (Michael Paquier, Kyotaro Horiguchi, Pavan Deolasee, Álvaro Herrera)
本障害により、続くWALをリプレイする際にサーバが一貫性をもったデータベース状態に到達していないと認識する状態になって、再起動を妨げました。
全てゼロのBツリーのページを再利用するときに、でたらめなWALレコードの出力を回避しました。 (Amit Kapila)
この誤りはアサート失敗としてあらわれました。また、潜在的にホットスタンバイサーバで不要な問い合わせキャンセルをひき起こす可能性がありました。
多数のリレーションを削除するトランザクションに対するWALリプレイ性能を改善しました。 (Fujii Masao)
この変更は共有バッファをスキャンする回数を減らすので、共有バッファ設定が大きいときに最も恩恵があります。
スタンバイサーバのWALリプレイにてロック解放の性能を改善しました。 (Thomas Munro)
インデックス作成が途中で失敗した後に、テーブルのキャッシュされたインデックスリストが正しく再構築されるようにしました。 (Peter Geoghegan)
これまでは、失敗したインデックスのOIDがリストに残る可能性があり、同セッション内で後に問題をひき起こしました。
複合型列に関する同値クラスの誤った最適化を修正しました。 (Tom Lane)
この障害により、複合列のインデックスがその列でのマージ結合に対してソート順を提供できることが認識できませんでした。
SQL標準のFETCH FIRST
構文を、標準で期待されている通り、パラメータ($
)が使えるように修正しました。
(Andrew Gierth)
n
getObjectDescription
の出力で、一部のオブジェクト名をスキーマ修飾するのに失敗していたものを修正しました。
(Kyotaro Horiguchi, Tom Lane)
照合順序、符号化方式変換、および、テキスト検索オブジェクトの名前が、されるべきケースでスキーマ修飾されませんでした。
COPY FROM
の現在行番号カウンタを32ビットから64ビットに拡張しました。
(David Rowley)
これは4G行を超える入力に対して二つの問題を回避します。
COPY FROM WITH HEADER
が先頭行のみならず4G行毎に1行を捨ててしまっていました。
また、エラー報告が誤った行番号を示す可能性がありました。
ecpgのpgtypes
ライブラリに文字列解放関数を追加しました。
これにより、Windowsにおけるモジュールにまたがるメモリ管理の問題が回避できます。
(Takayuki Tsunakawa)
Windowsでは、与えられたメモリチャンクに対するfree
呼び出しがメモリをmalloc
した同じDLLから行われているのではない場合、クラッシュが起こりえます。
pgtypes
ライブラリはときどき呼び出し側が解放することを想定した文字列を返しますが、この使い方に従うことが不可能になっていました。
free
をラップするPGTYPESchar_free()
関数を追加して、アプリケーションがこの使い方に従えるようにしました。
Windowsでecpgのlong long
変数対応を修正しました。
strtoll
/strtoull
を非標準に宣言する、あるいは全く宣言しない、他のプラットフォームにおいても修正しました。
(Dang Minh Huong, Tom Lane)
PL/pgSQLでSQLステートメントタイプの誤識別を修正しました。 RULEの変更がステートメント内部セッションの文脈の変化をひき起こすときに該当します。 (Tom Lane)
この誤りはアサート失敗、あるいは稀な場合にINTO STRICT
オプションでの期待される強制の失敗をもたらします。
stdin
がターミナルでないときWindowsでエコー出力が適切に無効化されるように、クライアントプログラムでのパスワードプロンプト表示を修正しました。
(Matthew Stickney)
ダンプでのリスト値になっているGUC変数値のクォート間違いをさらに修正しました。 (Tom Lane)
以前のpg_dump出力におけるsearch_path
および他のリスト値変数のクォート処理の修正は、空文字列リスト要素に対して誤動作をして、長いファイルパスが切り捨てられる危険性がありました。
pg_upgradeが古いサーバがクリーンにシャットダウンされたことを検査するようにしました。 (Bruce Momjian)
これまでの検査ではimmediateモードでのシャットダウンについてだまされる可能性がありました。
contrib/ltree
のlca()
関数での入力配列が空であったときのクラッシュを修正しました。
(Pierre Ducroquet)
不適切なエラーコードが報告されるかもしれない様々なエラー処理コードパスを修正しました。 (Michael Paquier, Tom Lane, Magnus Hagander)
プログラムが既存のシステムライブラリディレクトリにあるものではなく、ビルドされたばかりのライブラリ(libpq.so
など)に確実にリンクするように、Makefileを調整しました。
(Tom Lane)
これにより、PostgreSQLライブラリの古いコピーを提供するプラットフォームでビルドするときの問題を回避します。
タイムゾーンデータファイルをtzdata release 2018eに更新しました。 北朝鮮の夏時間(DST)法の変更に加え、チェコスロバキアの歴史的修正が含まれます。
この更新には、アイルランドおよび過去の何年間かのでのナミビアやチェコスロバキアにおける「daylight savings」の再定義が含まれます。
これらの管区では法律上、夏に標準時間、冬にDST(訳注:daylight saving timeを通常「夏時間」としているがここでは文脈上DSTとする)であると述べられていて、そのためDSTオフセットは標準時間の1時間後でなく1時間前です。
このことは、実際のUTCオフセットや使われるタイムゾーン略記法のいずれにも影響を与えませんが、唯一の影響として、これらの場合はpg_timezone_names
ビューのis_dst
が冬に真、夏に偽となります。