このリリースは 9.5.14 からの修正リリース(2018年11月8日リリース)です。
9.5.x からのアップデートではダンプ、リストアは不要です。
しかしながら、9.5.13 より前のバージョンからアップデートを行う場合は 9.5.13 に関する技術情報を参照してください。
PostgreSQL 9.5.14 から 9.5.15 への変更点
11.1、10.6、9.6.11、9.5.15、9.4.20、9.3.25 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。
- pg_dump が CREATE TRIGGER ... REFERENCING コマンドを出力するときに遷移テーブル名を確実にクォートするようになりました。 (Tom Lane) (11)(10)
- 各パーティションの子インデックスを作るときに、パーティションインデックスに対して指定されたテーブルスペースを適用するようになりました。 (Álvaro Herrera) (11)
- 複数バッチ動作のパラレルハッシュ左外部結合で NULL の扱いが修正されました。 (Andrew Gierth, Thomas Munro) (11)
- 定数テスト式を持った CASE句の中にある配列型のキャスト式の不正な処理が修正されました。 (Tom Lane) (11)
- 最近に追加した列が欠けた不正なタプル展開が修正されました。 (Andrew Dunstan, Amit Langote) (11)
- CALLの引数リストで、名前付けされた引数やデフォルト値が付与された引数での誤りが修正されました。 (Tom Lane, Pavel Stehule) (11)
- 「ORDER BY 列」を伴う STRICTな集約で、STRICT検査が修正されました。 (Andrew Gierth, Andres Freund) (11)
- recheck_on_update の最適化が無効にされました。 (Tom Lane) (11)
- 親テーブル(=パーティションテーブル)のトリガによるパーティション作成が防止されました。 (Amit Langote) (11)(10)
- ON COMMIT DELETE ROWS を一時パーティションテーブルに適用する場合の問題が修正されました。 (Amit Langote) (11)(10)
- Windows において、U+FFFF より上の Unicode文字に対してエラーを起こさないように、文字クラス検査が修正されました。 (Tom Lane, Kenji Uno) (11)(10)(9.6)(9.5)(9.4)(9.3)
- 既に受け取っている NOTIFY や SIGTERM割り込みの処理を、クライアント入力を待つより前に実行するようになりました。 (Jeff Janes, Tom Lane) (11)(10)(9.6)(9.5)
- 繰り返して SP-GiSTインデックスをスキャンする場合のメモリリークが修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)(9.3)
- 既存のレプリケーションスロットに対応するには低すぎる wal_level が設定されているときには、サーバ起動しないようになりました。 (Andres Freund) (11)(10)(9.6)(9.5)(9.4)
- 各 PQnotifies() を呼ぶ前に PQconsumeInput() を呼ぶように psql が修正され、libpq のドキュメントのサンプルも修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)
- pg_verify_checksums で、どのファイルをチェックサム検査すべきかの判断が修正されました。 (Michael Paquier) (11)
- contrib/pg_stat_statements でpg_read_all_statsロールが pg_stat_statements_reset() を実行することが禁止されました。 (Haribabu Kommi) (10) (11)
- 赤黒木のサポート関数のプレフィックスが rb ではなく rbt に変更されました。 (Tom Lane) (11)
- macOS 10.14 でのビルドの問題が修正されました。 (Tom Lane) (11)(10)(9.6)(9.5)(9.4)(9.3)
- MSVC でのビルドとリグレッションテストのスクリプトが最近の Perlバージョンで動作するように修正されました。 (Andrew Dunstan) (11)(10)(9.6)(9.5)(9.4)(9.3)
- Windows で Administratorアカウントによるリグレッションテストが可能になりました。 (Andrew Dunstan) (11)(10)(9.6)(9.5)
- タイムゾーンデータファイルが tzdata release 2018g に更新されました。 (11)(10)(9.6)(9.5)(9.4)(9.3)
- has_*_privilege() 関数群が、稀なケースでエラーになる障害が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- pg_get_partition_constraintdef() が、不正なリレーション OID を渡されたときに、エラーを出すのではなく NULL を返すように修正されました。 (Tom Lane) (10)
- 長い文字列に対して正規表現でマッチングする関数や分割する関数を使うとき、O(N^2) オーダーで遅延するのを回避するように修正されました。 (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)
- 標準の複数文字演算子のパース処理が修正されました。 (Andrew Gierth) (10)(9.6)(9.5)
- + や - 文字による長い文字列の字句解析で O(N^3) オーダーでの遅延を回避するように修正されました。 (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)
- 外側の問い合わせが逆向きにスキャンされているときの SubPlans の誤った実行が修正されました。 (Andrew Gierth) (10)(9.6)(9.5)(9.4)(9.3)
- カーソルを巻き戻した後に「UPDATE/DELETE ... WHERE CURRENT OF ...」コマンドがエラーになる動作が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- EvalPlanQual が条件実行される InitPlans を適切に扱えるように修正されました。 (Andrew Gierth, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- ウィンドウ関数、LIMIT、OFFSET を含む副SELECT のパラレルワーカへのプッシュができなくなりました。 (Amit Kapila) (10)(9.6)
- 外部テーブルに所有されているシーケンスが、そのテーブルに対する ALTER OWNER で確実に処理されるようになりました。 (Peter Eisentraut) (10)(9.6)(9.5)(9.4)(9.3)
- 配列データ型の出力関数 array_out() が結果文字列用に過大なメモリを確保していたものが、修正されました。 (Keiichi Hirobe) (10)(9.6)(9.5)(9.4)(9.3)
- xmltable関数で問い合わせの間のメモリリークがあり、修正されました。 (Andrew Gierth) (10)
- 内部実装関数 ApplyLogicalMappingFile() がマッピングファイルを伴って実行されたとき、ファイルを確実に閉じるように修正されました。 (Tomas Vondra) (10)(9.6)(9.5)(9.4)
- ロジカルデコーディングで割り当てられたカタログテーブルが繰り返し書き直される場合に処理できるように修正されました。 (Andres Freund) (10)(9.6)(9.5)(9.4)
- SQL実行にて EXECUTEコマンドなどのユーティリティコマンドが無限再帰を起こした場合にバックエンドがクラッシュする動作が回避されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- ホットスタンバイを初期化する時に、プライマリでの二相トランザクションで生じる重複した XID に対応できるようになりました。 (Michael Paquier, Konstantin Knizhnik) (10)(9.6)(9.5)(9.4)(9.3)
- 入れ子の ALTER TABLE を扱えるようにイベントトリガが修正されました。 (Michael Paquier, Álvaro Herrera) (10)(9.6)(9.5)
- 親プロセスのトランザクションと文の開始タイムスタンプがパラレルワーカに伝播するようになりました。 (Konstantin Knizhnik) (10)(9.6)(9.5)
- 拡張された値のパラレルワーカへの転送が修正されました。 (Tom Lane, Amit Kapila) (10)(9.6)
- WALファイル再利用のロジックがスタンバイサーバで正しく動作するように修正されました。 (Michael Paquier) (10)(9.6)(9.5)
- リカバリ中のコミットタイムスタンプ追跡の処理が修正されました。 (Masahiko Sawasa, Michael Paquier) (10)(9.6)(9.5)
- ブートストラップとスタンドアローンバックエンドのプロセスで、また、initdb で、random() 関数のシードを時刻やプロセスID でランダムに設定するようになりました。 (Noah Misch) (10)(9.6)(9.5)(9.4)(9.3)
- DSA(動的共有メモリ領域)の処理で共有メモリ破壊の可能性があり、修正されました。 (Thomas Munro) (10)
- DSM(動的共有メモリ)の割り当てが割り込み可能になりました。 (Chris Travers) (10)(9.6)(9.5)(9.4)
- 初期化関数でシステムキャッシュにアクセスを試みる拡張モジュールを読み込むときに発生する、パラレルワーカでのエラーが回避されました。 (Thomas Munro) (10)(9.6)
- full_page_writes を動的に on に変える処理を適切に行うようになりました。 (Kyotaro Horiguchi) (10)(9.6)(9.5)
- SP-GiST の再スキャンでメモリ二重解放によるクラッシュの可能性があり、修正されました。 (Andrew Gierth) (10)(9.6)
- ELFベースのBSDプラットフォームや HP-UX、Solaris で、src/port と src/common の関数の誤ったリンクが防止されました。 (Andrew Gierth, Tom Lane) (10)
- GINページの再圧縮処理を WALから再生するときにバッファオーバーランの可能性があり、修正されました。 (Alexander Korotkov, Sivasubramanian Ramasubramanian) (10)(9.6)(9.5)(9.4)
- ブロックサイズをデフォルトよりも小さくしていた場合の、ハッシュインデックスのメタページのバッファオーバーランが回避されました。 (Dilip Kumar) (10)
- ハッシュインデックスでページチェックサムの更新が行われないことがあり、修正されました。 (Amit Kapila) (10)
- レプリケーションスロットのディレクトリに対する fsync が行われておらず、修正されました。 (Konstantin Knizhnik, Michael Paquier) (10)(9.6)(9.5)(9.4)
- wal_sender_timeout を遅いサーバで使った場合の予期せぬタイムアウトが修正されました。 (Noah Misch) (10)(9.6)(9.5)(9.4)
- ホットスタンバイのプロセスが確実に正しいWAL整合状態到達点を用いるようになりました。 (Alexander Kukushkin, Michael Paquier) (10)(9.6)(9.5)(9.4)(9.3)
- サーバ起動中にマスタプロセス(postmaster)が fastシャットダウン要求を受け取ったとき、バックグラウンドワーカが適切に停止されるようになりました。 (Alexander Kukushkin) (10)(9.6)(9.5)
- ページの可視性フラグ、凍結済フラグを変更する WAL を再生するときに、空き領域マップを更新するようになりました。 (Álvaro Herrera) (10)(9.6)
- 問い合わせ終了時、または、タプルカウント上限に到達した時の、パラレル問い合わせ用リソースの早すぎる解放を回避するようになりました。 (Amit Kapila) (10)(9.6)
- SIGQUIT を処理するときに atexit() によるコールバックを実行しないようになりました。 (Heikki Linnakangas) (10)(9.6)(9.5)(9.4)(9.3)
- 外部サーバのユーザマッピングを拡張の要素として記録しないようになりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- loggerプロセス(組み込みのロガー)が CSV ログファイルを開く際に、失敗しにくくなりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- libpq に複数のターゲットホスト名が指定されている場合、1度に1つずつ名前解決をするようになりました。 (Tom Lane) (10)
- libpq の接続タイムアウト処理がホスト名またはIPアドレスごとに正しく適用されるように修正されました。 (Tom Lane) (10)
- pg_dump の --no-publications オプションがパブリケーションテーブルを無視するように修正されました。 (Gilles Darold) (10)
- pg_dump で親テーブルがダンプから除外されているときには、その子テーブルの IDENTITY のシーケンスも除外するようになりました。 (David Rowley) (10)
- pg_dump が異なるオブジェクト名をソートする際に起こり得る一貫性の欠如が修正されました。 (Jacob Champion) (10)(9.6)(9.5)(9.4)(9.3)
- pg_restore が DISABLE/ENABLE TRIGGER コマンドを出力する際にテーブル名をスキーマ修飾するようになりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- pg_upgrade が拡張に属するイベントトリガを正しく処理するように修正されました。 (Haribabu Kommi) (10)(9.6)(9.5)(9.4)(9.3)
- pg_upgrade のクラスタ状態チェックがスタンバイサーバで正しく動作するように修正されました。 (Bruce Momjian) (10)(9.6)(9.5)(9.4)(9.3)
- すべての contrib/cube 関数に cube型の次元数の制限が適用されるようになりました。 (Andrey Borodin) (10)(9.6)(9.5)(9.4)(9.3)
- contrib/postgres_fdw では、変数を持たない ORDER BY句をリモートサーバへ送信しないようになりました。 (Andrew Gierth) (10)(9.6)
- contrib/unaccent の unaccent() 関数が、関数と同じスキーマにある非アクセントテキスト検索辞書を使用するように修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- btree比較関数が INT_MIN を返せるようになりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- 共有無効化のメッセージ処理における再帰障害が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- SPI_connect() 及び SPI_finish() の中に SPI のグローバル変数を保存および復元するようになりました。 (Chapman Flack, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- 潜在的にアラインメント調整されたページバッファの使用を避けるようになりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- Make src/port/snprintf.c の結果が、C99 標準の snprintf() の結果の定義に沿うようになりました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- i386 アーキテクチャにおいて clang コンパイラを使ってビルドする際は、-msse2 オプションが必須になりました。 (Andres Freund) (10)(9.6)(9.5)(9.4)(9.3)
- configrue における strerror_r() 結果型の検知が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)
- Visual Studio 2015 と Visual Studio 2017 でのビルドがサポートされるようになりました。 (Michael Paquier, Haribabu Kommi) (9.5)(9.4)(9.3)
- ALLOCSET_DEFAULT_SIZES および関連のマクロが旧バージョン系列にも提供されました。 (Tom Lane) (9.5)(9.4)(9.3)
この見逃しは、ダンプのリストアや pg_upgrade実行で権限の無いユーザがスーパーユーザ権限を得るようにする攻撃を可能にしていました。(CVE-2018-16850)
これまでは、子インデックスは常にデフォルトテーブルスペースに作られていました。
ハッシュキーに NULL値を伴う外側リレーションの行が、結合結果から抜け落ちていました。本障害のため enable_parallel_hash = on のときに、誤った問い合わせ結果が返る可能性がありました。
以下のような奇妙な動作が発生していました。
(enum_range関数は配列 '{e,f,g}' を返すので '{a,b,c,d,e,f,g}' が正しい結果) db=# CREATE TYPE typ_efg AS ENUM ('e', 'f', 'g'); db=# SELECT CASE 'foo'::text WHEN 'foo' THEN ARRAY['a', 'b', 'c', 'd'] || enum_range(NULL::typ_efg)::text[] ELSE ARRAY['x', 'y'] END; array ----------------------- {a,b,c,d,foo,foo,foo} (1 row)
本障害により、最近に追加された列をもつテーブルの制約トリガ動作でクラッシュをひき起こすことが知られています。また、その他の症状を示す可能性もあります。
(知られている障害発生パターン) db=# CREATE TABLE leader (a int PRIMARY KEY, b int); db=# CREATE TABLE follower (a int REFERENCES leader ON DELETE CASCADE, b int); db=# INSERT INTO leader VALUES (1, 1), (2, 2); db=# ALTER TABLE leader ADD c int; db=# ALTER TABLE leader DROP c; db=# DELETE FROM leader; server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
CALLでそのような引数をもつプロシージャを実行するときに、エラーが発生する動作が報告されていました。
STRICTな集約とは NULLを処理対象から除外する動作をするものです。ORDER BY を付与したときこの動作が働きませんでした。
(1 が返るのが正しいが、NULLが返っていた) db=# SELECT min(x ORDER BY y) FROM (VALUES(1, NULL)) AS d(x,y); min ----- (1 row)
これはバージョン11から登場した最適化機能ですが、クラッシュをひき起こすとがあり、ひとまず無効化されました。
クラッシュをひき起こすことがありました。理想的にはこのような使い方も可能とすべきですが当面は禁止とされました。トリガ駆動時に以下のようなエラーが出るようになります。
ERROR: cannot ALTER TABLE "..." because it is being used by active queries in this session ERROR: cannot CREATE TABLE .. PARTITION OF "..." because it is being used by active queries in this session
このような一次パーティションテーブルを作るときに以下のようなエラーが発生していました。
db1=# CREATE TEMP TABLE t10 (id int, v text) PARTITION BY RANGE (id) ON COMMIT DELETE ROWS; ERROR: could not open file "base/16543/t3_45678": No such file or directory
この障害はテキスト検索、contrib/ltree、contrib/pg_trgm に影響があります。絵文字に対して pg_trgm の関数を実行して以下エラーが出る例が報告されました。
ERROR: invalid multibyte character for locale
以前はより早くに処理されていたのが、9.6.3、9.5.7 のリリースから本修正前まででは、後回しに処理されるようになっていました。
SP-GiST を使った排他制約が一つのコマンドで多数の新たなインデックスエントリを受け付ける場合に、大きなリーク量が生じることが知られています。
これは psql が NOTIFYメッセージ受信を次コマンドまで報告しないケースを修正します。
一部ケースでチェックサムを持つと想定されないファイルについて、問題報告されることがありました。
pg_read_all_stats は全ての統計情報が参照できるという意味であるため、データを変更できることは不適切でした。変更の反映には導入先の各データベースで以下コマンド実行が必要です。
ALTER EXTENSION pg_stat_statements UPDATE;
Ruby の関数との名前衝突を回避します。PL/Ruby を導入する場合に問題がありました。
PL/Perl と PL/Tcl のビルドに失敗していました。対応として、configureスクリプトが CPPFLAGS に -isysroot を加えるようになりました。そのほか、macOS むけにビルドスクリプトがいくつか修正されました。
Perlは最早カレントディレクトリをデフォルトではサーチパスに含めず、本修正はこれに対応したものです。
Administratorアカウントから駆動したとしても安全であるように、実行プロセスは制約された権限で動作するようになっています。
チリ、フィジー、モロッコ、ロシア(ヴォルゴグラード)の夏時間法の変更と、中国、ハワイ、日本、マカオ、北朝鮮の歴史的修正が含まれています。
これら関数はオブジェクトの不正な OID与えられたときエラーではなく NULLを返すことが期待されていますが、一部においてそうなっていませんでした。さらに、has_column_privilege() 関数は一部プラットフォームでクラッシュする可能性がありました。
この障害によりパースエラーや不正な優先順位が生じる可能性がありました。演算子の後に数値の + や -、あるいはコメント開始記号の -- や /* が続いている場合に誤認されるケースがありました。
(報告された障害動作例) db=# CREATE FUNCTION f26(a int) RETURNS int LANGUAGE sql AS $$ SELECT a; $$; db=# SELECT f26(a => -1); f ---- -1 (1 row) db1=# select f(a =>-1); ERROR: column "a" does not exist
カーソルを使って FETCH BACKWARD で結果を取得する場合に誤った SELECT結果が返る動作が報告されていました。実行プランとして逆向きスキャンが選ばれる場合にも問題が起きる可能性があります。
複数のリレーション(特に親テーブルを継承した複数のテーブルなど)をスキャンするカーソルは、手前のリレーションに巻き戻された場合に誤動作を起こす可能性がありました。
同時更新をしたときに、なかなか再現しないクラッシュや誤った問い合わせ結果が生じていました。CASE や COALESCE の中にある無関係な副SELECT を含む更新SQL(例えば以下のような形状)で該当します。
WITH d(val) AS (SELECT 'Val'::text FROM generate_series(1,1)) UPDATE t30 SET v = COALESCE(v, (SELECT val FROM d)) WHERE id = 1;
このような場合、行順序の変化により不確定な結果となって、ワーカごとに異なる応答を得ることから、整合性に欠けた振る舞いが生じることがありました。
所有者変更はこのようなシーケンスにも伝播すべきでしたが、外部テーブルについて見逃されていました。
特に多次元配列のときに確保サイズが大きくなっていました。
これまでファイル記述子のリークがあり、結果としてロジカルデコーディングでのエラーをひき起こしていました。
(エラー例) ERROR: 53000: exceeded maxAllocatedDescs (492) while trying to open file "pg_logical/mappings/map-4000-4eb-1_60DE1E08-5376b5-537c6b" LOCATION: OpenTransientFile, fd.c:2161
VACUUM FULL や CLUSTER コマンドで以下のようなエラーが生じる可能性がありました。
ERROR, "could not map filenode "base/16543/19876" to relation OID"
これまでスタンバイで以下のエラーが出ることがありました。
FATAL: out-of-order XID insertion in KnownAssignedXids
本障害について、イベントトリガが働く状態で入れ子のパーティションテーブルを作成するときのクラッシュが報告されました。
これにより、transaction_timestamp() などの関数がワーカ上で実行されたときの誤動作が防止されます。
配列型の値などが該当します。SQL実行時に Bus error によるクラッシュが発生していました。
archive_mode の設定によってはスタンバイで一部の本来削除可能なWALファイルの削除に失敗することがありました。
コミットタイムスタンプ追跡が有効または無効に変更されると、それを記録していないトランザクションに対してコミットタイムスタンプを取得しようとしてリカバリに失敗することがありました。
(本障害でリカバリ起動に失敗した報告例) FATAL: could not access status of transaction 3003911820 DETAIL: Could not read from file "pg_commit_ts/6FEE" at offset 557056: Success.
この変更により、常に同じランダムシードを使うことで生じる名前衝突によって、initdb が POSIX共有メモリが無効であると誤って判断するのを回避できます。
主として問い合わせの並列処理で問題が不具合が発生します。
SQLのパラレル処理とキャンセルで無限ループが生じる可能性がありました。
本障害により以下のエラーが発生するケースが報告されました。
ERROR: invalid cache ID: 11 LOG: worker process: parallel worker for PID 12345 (PID 12354) exited with exit code 1
off から on に変えた後もフルページ書き出しが行われない動作が報告されました。
バックエンドのアドレス空間にロードされた共有ライブラリは、関数のリンク先に意図しているそれらが持つコピーではなく、バックエンドにあるバージョンを使う可能性がありました。両関数実装が一致していない場合、この振る舞いのために障害がひき起こされます。
クラッシュが発生する例が報告されています。
本障害によりデータ破壊の可能性があります。
該当する場合、本障害によりデータ破壊をひき起こす可能性があります。
サーバ側(WAL送出側)の遅延をタイムアウト判定に含めないように調整されました。
この修正は、スタンバイサーバが WALリプレイでデータベース整合状態に達した直後の誤動作を防止します。
スタンバイサーバのクラッシュ後の起動で、以下メッセージが出て失敗する動作が報告されました。
PANIC: WAL contains references to invalid pages DETAIL: xlog redo at AB3/50323E78 for Btree/DELETE: 182 items
これまで FSM(空き領域マップ)は重要なデータではないと考えられていましたが、FSM が古くなりすぎるとサーバがスタンバイからプライマリに昇格した後、パフォーマンスが大幅に低下する可能性がありました。
呼び出し側が後で逆向きスキャンを求める場合を考慮する必要がありました。
シグナルを受けてハングアップする可能性がありました。
拡張のスクリプトで CREATE USER MAPPING を実行すると、ユーザのマッピングに対して予期せぬ拡張依存関係が作成されました。ロールは拡張の要素にすることはできないため、ユーザマッピングも含めるべきではありませんでした。
これまではファイルを開けなかった場合にそれを報告しようとして無限再帰ループに陥る可能性がありました。
これにより、リスト内の手前にあるサーバに正常に接続できる場合の不要な障害や接続遅延を防止します。
以前は、次の対象ホストに切り替える際にタイマーがリセットされないことがあり、設定よりも早くタイムアウトとなる可能性がありました。
pg_dump で本オプションが機能していませんでした。
これにより制限された検索パスでリストアを実行する場合の障害を回避します。
以前の pg_upgrade はイベントトリガが拡張に属することを維持できせんでした。
以前は、一部の cube 関連関数が cube_in(cube型の入力関数)で拒否される値を生成する可能性があり、ダンプ/リストアの失敗をひき起こしました。
use_remote_estimate = on の場合に「ORDER BY 0」がリモートで実行されて、「ERROR: ORDER BY position 0 is not in select list」が生じるケースがありました。
これまでは search_path を使用して辞書を探していましたが、search_path が制限的な設定であるとき失敗する可能性がありました。
これまでは、データ型固有の比較関数が INT_MIN を返すことを禁止していました。これにより関数の呼び出し元は、比較結果を否定するだけでソート順を逆転させることができました。しかし、POSIX はそのような制限を設けていないので、memcmp() や strcmp() などの結果を直接返す比較関数では、これは安全ではありませんでした。少なくとも最新のバージョンの memcmp() は INT_MIN を返すことがあり、誤った並べ替え順序が発生します。
この制限は削除されました。ソート順を逆にする場合は、INVERT_COMPARE_RESULT() マクロを使用する必要があります。
この障害で VACUUM FULL によって処理されたばかりのシステムカタログやインデックスへのアクセスに失敗することがあります。以下のエラーが報告されました。FATALが生じることもあります。
ERROR: could not read block 3 in file "base/16384/2662": read only 0 of 8192 bytes
本修正で、待機イベントである LockAcquire に対する新しい結果コードが追加されました。このイベントの外部呼出し元に影響を与える可能性があります。しかし、これは非常に珍しい使われ方でのみ発生する問題です。
これにより、1つの SPI を使用する関数が、別の関数を呼び出すときに起こり得る干渉を防ぎます。
新しく UNION型の PGAlignedBlock、PGAlignedXLogBlock を設けて、これらを 単なる char配列の代わりに使用して、コンパイラがアラインメントを外れた開始アドレスにバッファを置くことがないようになりました。これにより一部プラットフォームでのクラッシュを回避します。問題がなかったプラットフォームでもパフォーマンス向上が期待できます。
これまでは C99 以前の振る舞いをしていました。主にWindowsなど、このコードが使われているプラットフォームでは、呼び出しコードが C99 のセマンティクスを前提としていた場合にバッファオーバーランを検出できない可能性がありました。
configure スクリプトの修正です。これにより浮動小数点のオーバーフローチェックが失敗することを回避できます。
以前のリリースでは、Linux 上で icc を使ってビルドする際、間違った結果となりました(恐らく他の組み合わせでも)。これにより、システムから報告されたエラーに対して libpq が有用なエラーメッセージを返さない動作が生じました。
これらのマクロは 9.6 以降は存在していましたが、古いバージョンにも追加して、固有のコーディングなしで拡張機能を利用したいという要望がありました。