PostgreSQL 9.6.20 に関する技術情報

このリリースは 9.6.19 からの修正リリース(2020年11月12日リリース)です。

9.6.x からのアップデートではダンプ、リストアは不要です。
ただし、9.6.16よりも前のバージョンからアップデートする場合には、9.6.16 のリリース情報も参照してください。

PostgreSQL 9.6.19 から 9.6.20 への変更点

13.1、12.5、11.10、10.15、9.6.20、9.5.24 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。

  1. インデックス式およびマテリアライズドビュー定義内での、DECLARE CURSOR ... WITH HOLD と遅延トリガの駆動が禁止されました。 (Noah Misch) (13)(12)(11)(10)(9.6)(9.5)
  2. これらはアクセス制限の仕組みの抜け穴となっていて、テンポラリでない SQLオブジェクトを作る権限を持った攻撃者はスーパーユーザとして任意の SQL実行が可能でした。(CVE-2020-25695)

    これからは該当する操作について、それぞれ以下のエラーが生じます。

    ERROR:  cannot create a cursor WITH HOLD within security-restricted operation
    
    ERROR:  cannot fire deferred trigger within security-restricted operation
    
  3. pg_dump、pg_restore、clusterdb、reindexdb、vacuumdb の各コマンドにおける複合的な接続文字列パラメータの使用方法について修正されました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  4. pg_dump と pg_restore の -d パラメータや他コマンドの --maintenance-db パラメータには、単一のデータベース名ではなく、複合的な接続パラメータを含む接続文字列を与えることもできます。

    これらのコマンドが、並列処理や複数データベース処理などで、追加的な接続を開始する必要がある場合、指定した接続文字列が無視されて、通常の接続パラメータ(データベース名、ホスト、ポート、ユーザ名)が使われていました。

    デフォルトと異なる SSL や GSS のパラメータなど、接続文字列に何らか重要な情報が含まれている場合、この振る舞いのために接続失敗が生じる可能性がありました。さらに悪いことに、接続は成功するけれども意図通りに暗号化されていないというセキュリティ上の危険を伴う動作もあり得ました。(CVE-2020-25694)

    (以下コマンドで --jobs 指定があるとき失敗するという発生例が報告されました)
    $ pg_dump --dbname="sslmode=verify-ca sslrootcert=server-ca.pem \
       sslcert=client-cert.pem sslkey=client-key.pem \
       hostaddr=1.2.3.4 user=postgres dbname=app" \
       --format=directory --file=dump.dat --jobs=3 
    
  5. psqlの \connect コマンドが接続パラメータを再使用したとき、以前の接続文字列から上書きされていない全てのパラメータが確実に再使用されるようになりました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  6. これまでは、デフォルトでない SSL や GSS のオプションなどのパラメータが無視されて再接続に失敗することがありました。さらに悪いことに、再接続は成功するけれども意図通り暗号化されず、セキュリティ上の危険を伴う動作もあり得ました。(CVE-2020-25694)

  7. psql の \gset コマンドが特別に扱われる変数を変更してしまう動作が防止されました。 (Noah Misch) (13)(12)(11)(10)(9.6)(9.5)
  8. PROMPT1 などのプロンプトの変数にはコマンド実行結果を含めることができるため、安全でないサーバから意図せぬ SQL実行結果が返ることで、クライアント側で任意のシェルコマンドが実行されてしまう危険がありました。(CVE-2020-25696)

    (特別に扱われる変数を上書きしてしまう動作例)
    db1=# SELECT 'off' as "AUTOCOMMIT", '%`hostname`> ' as "PROMPT1"; \gset
     AUTOCOMMIT |    PROMPT1
    ------------+---------------
     off        | %`hostname`>
    (1 row)
    
    host1> \echo :AUTOCOMMIT
    off
    host1>
    
  9. レプリケーションプロトコルの意図せぬ動作が修正されました。 (Álvaro Herrera) (13)
  10. 13.0 以降で wal sender は START_REPLICATION に対してコマンド完了イベントを二つ報告します。これはドキュメントに記載されておらず、明らかに意図されたものではありません。しかしながら、wal receiver が一部のコードパスで余分なイベントを必要とすることが判明したため、二つのコマンド完了イベントが返る動作を正として修正され、そのようにドキュメント記載されました。

  11. チェックポイント時に SLRUディレクトリが適切に fsync されることが保証されました。 (Thomas Munro) (13)(12)(11)(10)(9.6)(9.5)
  12. これは OS のクラッシュによるデータ損失を防止します。SLRUディレクトリとして、トランザクション制御に使われる pg_xact (pg_clog)、pg_commit_ts、pg_subtrans、共有行ロック制御に使われる pg_multixact などが該当します。

  13. BYPASSRLS属性を伴うユーザに対する ALTER ROLE が修正されました。 (Tom Lane, Stephen Frost) (13)(12)(11)(10)(9.6)(9.5)
  14. BYPASSRLS属性の変更はスーパーユーザによってのみ行えます。しかし、パスワード変更など、他の ALTER ROLE操作は、通常のパーミッション検査によって許可されるべきです。これまでは誤って、BYPASSRLS属性を持ったユーザに対するすべての変更にスーパーユーザ権限が必要となっていました。

    (修正前の動作例: BYPASSRLS属性があると自身のパスワード変更に失敗)
    db1=# ALTER ROLE foo BYPASSRLS;
    ALTER ROLE
    db1=# \c db1 foo
    You are now connected to database "db1" as user "foo".
    db1=> ALTER ROLE foo PASSWORD 'newpass';
    ERROR:  must be superuser to change bypassrls attribute
    
  15. 子テーブルに対して ALTER TABLE ONLY ... DROP EXPRESSION が禁止されました。 (Peter Eisentraut) (13)
  16. これは生成列を通常の列にするコマンドですが、現在の実装では子テーブルに対して正しく処理できないため、当面は単にこれを禁止することになりました。

  17. ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER が子テーブルを再帰的に処理しないようになりました。 (Álvaro Herrera) (13)(12)(11)
  18. これまで ONLYフラグが無視されていました。

  19. LOCK TABLE が自己参照ビューに対しても成功するようになりました。 (Tom Lane) (13)(12)(11)
  20. これまでは無限再帰を理由としたエラー(ERROR: infinite recursion detected ...)が出ていましたが、禁止する実装上の理由はありませんでした。定義可能な自己参照ビューの pg_dump に失敗する問題が報告されていました。

  21. REINDEX CONCURRENTLY の前後でインデックス式のプランナ統計情報が維持されるようになりました。 (Michael Paquier, Fabrízio de Royes Mello) (13)(12)
  22. これは CONCURRENTLY ではない通常の REINDEX と同じ動作です。

  23. REINDEX CONCURRENTLY からの誤った進捗報告が修正されました。 (Matthias van de Meent, Michael Paquier) (13)(12)
  24. pg_stat_progress_create_index ビューに異なるテーブルやインデックスのOID が現れる動作が報告されました。

  25. ルールや更新可能ビューを通して依存する列が更新されたときに、生成列が確実に更新されるようになりました。 (Tom Lane) (13)(12)
  26. 以下のような定義のテーブルとビューに対して、

    CREATE TABLE t13 (id serial, idplus1 int GENERATED ALWAYS AS (id + 1) STORED);
    CREATE VIEW v13 AS SELECT * FROM t13;
    

    以下のような更新に失敗する場合が報告されました。

    UPDATE v13 SET id = 1000 WHERE id = 1;
    

    更新可能ビューを通した更新による列指定トリガの駆動に失敗する可能性もあり、本修正はこちらにも対応しています。

  27. 照合順序に依存したパーティション境界の式でのエラーが修正されました。 (Tom Lane) (13)(12)
  28. 以下のように照合順序(COLLATE)によって結果が変わる式を指定すると、これまではエラーになっていました。これからは、定義時点のデフォルト照合順序で境界条件の式が評価されるようになります。

    (従来の動作例)
    db1=# CREATE TABLE pt14 (b boolean, v text) PARTITION BY LIST (b);
    db1=# CREATE TABLE pt14_1 PARTITION OF pt14 FOR VALUES IN ('foo' < 'bar');
    ERROR:  could not determine which collation to use for string comparison
    HINT:  Use the COLLATE clause to set the collation explicitly.
    
  29. テキスト配列のハッシュ作成がサポートされました。 (Peter Eisentraut) (13)(12)
  30. 配列要素が照合順序に影響を受ける場合に配列のハッシュ作成が失敗していました。特に、テキスト配列の列をキーとしたハッシュパーティショニングの利用を妨げていました。

    これまでは以下のように行を挿入した時点でエラーが発生していました。これからはデフォルトの照合順序が適用されてエラーが回避されます。

    db1=# CREATE TABLE pt15 (ta text[], v text) PARTITION BY HASH (ta);
    db1=# CREATE TABLE pt15_0 PARTITION OF pt15 FOR VALUES
            WITH (MODULUS 2, REMAINDER 0);
    db1=# CREATE TABLE pt15_1 PARTITION OF pt15 FOR VALUES
            WITH (MODULUS 2, REMAINDER 1);
    db1=# INSERT INTO pt15 VALUES (ARRAY['abc'], 'val1');
    ERROR:  could not determine which collation to use for string hashing
    HINT:  Use the COLLATE clause to set the collation explicitly.
    
  31. データ型の異なる日付時刻の比較で、内部オーバーフローが防止されました。 (Nikita Glukhov, Alexander Korotkov, Tom Lane) (13)
  32. date型と timestamp型の比較で、date型の値が timestamp の有効範囲を超える場合にエラーが生じていました。また、timestamp型 と timestamptz型の比較で、タイムゾーンを適用すると有効範囲を超える場合にもエラーが生じていました。

    型キャストできない場合でも正しく比較ができるように修正されました。

    (修正前の動作: 修正後はいずれも true が返ります)
    db1=# SELECT '2202020-10-05'::date > '2020-10-05'::timestamp;
    ERROR:  date out of range for timestamp
    db1=# SET TimeZone = 'UTC-2';
    db1=# SELECT '4714-11-24 BC'::date < '2020-10-05'::timestamptz;
    ERROR:  date out of range for timestamp
    db1=# SELECT '4714-11-24 BC'::timestamp < '2020-10-05'::timestamptz;
    ERROR:  timestamp out of range
    
  33. to_date() と to_timestamp() におけるマイナス年から紀元前日付への1年ずれた変換が修正されました。 (Dar Alathar-Yemen, Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  34. また、マイナス年と明示的な BC指定は打ち消し合って、紀元後の年になります。このことがドキュメントにも明記されました。

    (誤動作例: 正しくは「0001-01-01 BC」)
    db1=# SELECT to_date('-1-01-01','yyyy-mm-dd');
        to_date
    ---------------
     0002-01-01 BC
    (1 row)
    
    (誤動作例: 修正後はマイナス年と BC が打ち消し合って紀元後の年になる)
    db1=# SELECT to_timestamp('-44-02-01 11:12:13 BC', 'YYYY-MM-DD HH24:MI:SS BC');
              to_timestamp
    ---------------------------------
     0045-02-01 11:12:13+09:18:59 BC
    (1 row)
    
  35. jsonpath の .datetime() メソッドが ISO 8601 書式のタイムスタンプに対応しました。 (Nikita Glukhov) (13)
  36. これは SQL標準では必須ではありませんが、to_json() 関数は Javascript互換のtimestamp書式を生成するため、対応するのが適切と判断されました。

    ISO 8601 書式は「T」を使った「2017-03-10T12:34:56+3:10」といったものです。

  37. archive_mode が 'always' であるときスタンバイサーバが WALタイムラインヒストリファイル(.historyファイル)をアーカイブするように修正されました。 (Grigory Smolkin, Fujii Masao) (13)(12)(11)(10)(9.6)(9.5)
  38. これまではプライマリサーバからストリーミングレプリケーションで取得した本ファイルをアーカイブしませんでした。その結果、スタンバイサーバの PITRリカバリに失敗する可能性がありました。

  39. kqueue() システムコールを使うプラットフォームで、早すぎる postmasterダウンを判定をするときの境界条件的な場合が修正されました。 (Thomas Munro) (13)
  40. postmasterダウン後の動作が適切ではありませんでした。

  41. ソートキーが揮発的な式であるときの、誤ったインクリメンタルソートのプランの生成を回避するように修正されました。 (James Coleman) (13)
  42. 本障害により、SQL実行時に以下のエラーが出ることがありました。

    ERROR:  ORDER/GROUP BY expression not found in targetlist
    
  43. プランナが GEQO によるプラン作成でパーティション毎の結合を検討するときにクラッシュする可能性があり、修正されました。 (Tom Lane) (13)(12)
  44. TOASTデータの展開で無限ループや破損データ出力をする可能性があり、修正されました。 (Tom Lane) (13)
  45. クリーンアップのみを行う VACUUM で、B-treeインデックスのエントリ数のカウントについて修正されました。 (Peter Geoghegan) (13)
  46. 結果として、プランナ統計情報の pg_class.reltuples が誤って 0 となる可能性がありました。

  47. BRINインデックスに挿入される前に、データが確実に TOAST展開されるように、修正されました。 (Tomas Vondra) (13)(12)(11)(10)(9.6)(9.5)
  48. インデックスエントリは 行外の TOASTポインタを含むことができませんが、BRIN では考慮されていませんでした。この結果、「ERROR: missing chunk number 0 for toast value NNN」といったエラーが発生する可能性がありました。

    既存のインデックスでこのようなエラーに遭遇した場合には、REINDEX で修正できます。

  49. INCLUDEカラムを持つインデックスでのバッファ付き GiSTインデックス構築が動作するように修正されました。 (Pavel Borisov) (13)(12)
  50. CREATE INDEX で格納オプションに buffering=on を指定していたり、インデックスサイズが effective_cache_size 設定値に達した場合に、バッファ付きインデックス構築が行われます。

    本障害でクラッシュを引き起こす可能性がありました。

  51. pg_hba_file_rules ビューでの getnameinfo() の移植性のない使用が修正されました。 (Tom Lane) (13)(12)(11)(10)
  52. FreeBSD 11、そしておそらく他のプラットフォームでは、このエラーのためにビューのアドレスとネットマスクの列が常に null になっていました。

  53. パラレルワーカの起動時に debug_query_string が NULL の場合のクラッシュが回避されました。 (Noah Misch) (13)(12)(11)
  54. 上記の debug_query_string は PostgreSQL実装内のグローバル変数名です。

  55. OLD を返す BEFORE ROW UPDATE トリガについて修正されました。 (Amit Langote, Tom Lane) (13)(12)
  56. OLD を返す BEFORE ROW UPDATEトリガは更新を抑止するために使われます。このようなトリガが、削除されていたり見つからない列を持つテーブルについてOLD を返した場合、これらの列が NULL として読み取られてしまうため、クラッシュ、予期しない CHECK制約の失敗、または正しくない RETURNING の出力が発生する可能性がありました。

    トリガ作成後に列を削除したり、非NULLのデフォルト値を持つ列を追加したりした場合にこれらの問題が報告されました。

  57. XML出力モードでの EXPLAIN 出力で、インクリメンタルソートプランのタグが正しく対応するように修正されました。 (Daniel Gustafsson) (13)
  58. 開始タグと終了タグが一致しない不正なXMLが出力されていました。

  59. PostgreSQLプロトコルにおけるメッセージ送出で、共有メモリキューを介して非常に大きなペイロードを転送する場合の余計なエラーが回避されました。 (Markus Wanner) (13)(12)(11)(10)(9.6)(9.5)
  60. 以下のエラーが発生して失敗する可能性がありました。

    ERROR:  invalid memory alloc request size .....
    

    修正により、真に失敗する必要には、メッセージ送出におけるサイズ超過の問題と分かるエラーメッセージが出るようになっています。

  61. SQL言語で書かれた関数で、いくつかのケースで結果データ型強制の省略が修正されました。 (Tom Lane) (13)
  62. 関わるデータ型によっては、誤った結果やクラッシュにつながる可能性がありました。

    (障害動作例: 関数内で型を明示していない場合に戻り値が壊れています)
    db1=# CREATE TYPE typ33 AS (a float, b float);
    db1=# CREATE FUNCTION f33() RETURNS SETOF typ33 AS $$
            SELECT 1, 2 UNION SELECT 3, 4 ORDER BY 1;
          $$ language sql immutable;
    
    db1=# SELECT f33();
            f33
    -------------------
     (5e-324,1e-323)
     (1.5e-323,2e-323)
    (2 rows)
    
  63. JITコード生成におけるテンプレート関数属性の不適切な処理が修正されました。 (Andres Freund) (13)(12)(11)
  64. 以前は関数の属性だけをコピーして、パラメータの属性はコピーしていませんでしたが、これが s390x でクラッシュの原因となることが示されており、他のプラットフォームでもその他の問題がある可能性がありました。

  65. PPC で compare_exchange と fetch_add 操作用に生成されるコードが改善されました。 (Noah Misch) (13)
  66. 行レベルセキュリティ(RLS)ポリシーでのリレーションキャッシュのメモリリークが修正されました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  67. index_get_partition() の境界条件的なケースでのメモリリークが修正されました。 (Justin Pryzby) (13)(12)
  68. SIGHUP処理で、再起動をしないと新しいGUC変数の値が適用できないと判断した場合の小さなメモリリークが修正されました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  69. PL/pgSQL の CALL処理でのメモリリークが修正されました。 (Pavel Stehule, Tom Lane) (13)(12)(11)
  70. Windows 版の libpq では、WSAStartup() をプロセスごとに一度だけ呼び出し、WSACleanup() は全く呼び出さないようになりました。 (Tom Lane, Alexander Lakhin) (13)(12)(11)(10)(9.6)(9.5)
  71. 以前の libpq は、接続開始時に WSAStartup() を呼び出し、接続のクリーンアップ時に WSACleanup() を呼び出していました。しかし、 WSACleanup() を呼び出すと、他のプログラム操作に干渉する可能性があるようです。特に、期待された出力を標準出力に出力する際にまれに失敗することが観測されています。WSACleanup() の呼び出しを省略しても悪影響はなさそうなので、呼び出さなくなりました。

    これにより、プログラムが一連のデータベース接続を実行する際にDLL のロードとアンロードが繰り返されることによるパフォーマンスの問題も解消されます。

  72. Windows用の ecpgライブラリのスレッドごとの初期化ロジックが修正されました。 (Tom Lane, Alexander Lakhin) (13)(12)(11)(10)(9.6)(9.5)
  73. マルチスレッドの ecpg アプリケーションでは、不適切なロックが原因でまれに誤動作が発生する可能性がありました。

  74. ecpg でのビット文字列 B'...' と X'...' の誤ったリテラル処理が修正されました。 (Shenhao Wang) (13)
  75. Windowsでは、psql が バッククォートコマンドの出力をバイナリモードではなくテキストモードで読み込むようになりました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  76. これにより、改行を適切に扱えるようになりました。

  77. pg_dump が拡張の設定テーブルに関する列ごとの情報を確実に収集するようになりました。 (Fabrízio de Royes Mello, Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  78. これに失敗すると --inserts を指定したときにクラッシュしたり、COPY を使用してテーブルのデータを再ロードする際に(通常は正しいのですが)列指定の無い COPYコマンドとなる場合がありました。

  79. pg_upgrade で対象クラスタ内にテーブル空間のディレクトリが既に存在するかどうかを確認するようになりました。 (Bruce Momjian) (13)(12)(11)(10)(9.6)(9.5)
  80. contrib/pgcrypto の潜在的なメモリリークが修正されました。 (Michael Paquier) (13)(12)(11)(10)(9.6)(9.5)
  81. contrib/pgcrypto に起こりそうもない失敗ケースのチェックが追加されました。 (Daniel Gustafsson) (13)(12)(11)(10)(9.6)(9.5)
  82. アメリカがサマータイムを遵守していない場合にも動作するように、最近追加された timetz のテストケースが修正されました。 (Tom Lane) (13)(12)(11)(10)
  83. タイムゾーンデータファイルが tzdata release 2020d に更新されました。 (13)(12)(11)(10)(9.6)(9.5)
  84. フィジー、モロッコ、パレスチナ、カナダのユーコン準州、マッコーリー島、南極のケーシー基地の夏時間法の変更に加えて、フランス、ハンガリー、モナコ、パレスチナの歴史的修正が含まれます。

  85. タイムゾーンライブラリのコピーが IANA tzcode リリース2020d と同期されました。 (Tom Lane) (13)(12)(11)(10)(9.6)(9.5)
  86. この変更は、アップストリームで zicコマンドのデフォルトの出力オプションがfat から slim へ変更されたことへの対応です。v13 より前のブランチでは引き続き fatモードを選択しているため、これは単なる見た目を整えるための修正です。この変更により、strftime() が失敗しない限り errno が変更されないことも保証されます。

  87. SLRUログの並列切り捨てによるデータ損失の可能性があり、修正されました。 (Noah Misch) (12)(11)(10)(9.6)(9.5)
  88. これはごく稀に発生する障害で、後の xid の周回で明らかになるか、または「ERROR: could not access status of transaction」エラーを引き起こしていました。

  89. パーティションテーブルに対する ALTER TABLE SET NOT NULL コマンドの実行時、対象となるカラムがすでに NOT NULL としてマークされている場合は、不要な再帰処理を回避するようになりました。 (Tom Lane) (12)
  90. これにより、並列実行された pg_restore での潜在的なデッドロックが回避されるようになりました。

  91. 継承を使用した CREATE TABLE LIKE の式の処理を修正しました。 (Tom Lane) (12)(11)(10)(9.6)(9.5)
  92. CREATE TABLE が LIKE と従来の継承の両方を使用する場合、CHECK制約の列参照と LIKE の親テーブルからの式インデックスに誤った番号が付けられることがよくあり、間違った結果や奇妙なエラーメッセージが出力されていました。 同じことが、その機能を備えたブランチの 生成列(GENERATED) の式でも発生する可能性がありました。

    本障害の結果、間違った列のマージが行われ、データ挿入時に以下のような列の型が違うというエラーが生じました。CREATE TABLE時のアサート失敗も報告されています。

    ERROR:  attribute 1 of type record has wrong type
    
  93. パーティションテーブルに対する DROP INDEX CONCURRENTLY が禁止となりました。 (Álvaro Herrera, Michael Paquier) (12)(11)
  94. この処理は必ず失敗していて、以下のような紛らわしいエラーメッセージが出力されていました。

    ERROR:  DROP INDEX CONCURRENTLY must be first action in transaction
    

    エラーメッセージは以下のように変更されました。

    ERROR:  cannot drop partitioned index "《インデックス名》" concurrently
    
  95. 挿入または更新されたタプルを正しいパーティションにルーティングするときに、デフォルトのパーティション制約を再確認するようになりました。 (Amit Langote, Álvaro Herrera) (12)
  96. これにより、挿入と同時にパーティションが追加された場合に競合が発生する問題が修正されました。

  97. 論理レプリケーションワーカで、不正なキャッシュ無効化ロジックにより発生していた relation 0 キャッシュルックアップ失敗の不具合が修正されました。 (Tom Lane) (12)(11)(10)
  98. この障害が発生する可能性は低いため、実際の影響は小さく、発生した場合もワーカプロセスが再起動されるだけです。

  99. 論理レプリケーションワーカが冗長な pingリクエストを送信しないようになりました。 (Tom Lane) (12)(11)(10)
  100. スマートシャットダウン中は、すべての(フォアグラウンドの)クライアントセッションが完了するまで、バックグラウンドプロセスを終了しないようになりました。 (Tom Lane) (12)(11)(10)(9.6)
  101. この変更前は、postmaster が既存の並列ワーカーを終了し、新しい(並列)ワーカーの起動を拒否するため、並列クエリ処理は中断されていました。また、自動バキュームが機能しなくなり、存続しているクライアントセッションが大量のデータ変更を行うと、長期的に深刻な影響を与える可能性がありました。

  102. postmaster がシグナルを処理している間、スタック領域の再帰的な消費を行わないようになりました。 (Tom Lane) (12)(11)(10)(9.6)
  103. この変更前には、並列処理を多用すると、並列ワーカープロセスの作成を要求する同時シグナルが多すぎるため、postmaster がクラッシュすることが確認されています。

  104. SIGQUITシグナルが原因で終了するときは、atexit ハンドラを実行しないようになりました。 (Kyotaro Horiguchi, Tom Lane) (12)(11)(10)(9.6)(9.5)
  105. ほとんどのサーバープロセスはすでにこの慣行に従っていましたが、アーカイバプロセスは見落とされていました。クライアントの起動パケットをまだ待っている状態のバックエンドも、同様にこの慣行に従っていませんでした。

  106. 定数であることが明らかなグループ化列を参照する副問合せ条件に対する誤った最適化が、回避されました。 (Tom Lane) (12)(11)(10)(9.6)(9.5)
  107. 定数サブクエリ出力列は、一部のグループ化セットにのみ表示されるグループ化列である場合、実際には一定ではありませんでした。

    これにより、グループ化セットを含む問い合わせで誤った結果が返ることがありました。

  108. SQL関数のインライン化によって、ハッシュ可能なサブプラン比較式の形が変更された場合に失敗しないようになりました。 (Tom Lane) (12)(11)(10)(9.6)(9.5)
  109. 問い合わせの実行でクラッシュする動作が報告されていました。

  110. インデックスを構築または再構築している間、同時更新による新しい HOTチェインの発生を許容するようになりました。 (Anastasia Lubennikova, Álvaro Herrera) (12)(11)(10)(9.6)(9.5)
  111. この修正前は、HOT のエラーのために親タプルを見つけられない可能性がありました。その結果、インデックス作成に対して以下のエラーがもたらされました。

    ERROR:  failed to find parent tuple for heap-only tuple at (XX,YY) in table "tbl"
    
  112. インデックス条件が満たされないときの並列Bツリーインデックススキャンで、予期せぬエラーや誤った結果が生じることがあり、修正されました。 (James Hunter) (12)(11)(10)
  113. インデックス列に対する INリストと別の条件とを与える、以下の障害再現手順が確認されています。最後の SELECT結果が変動してしまいます。

    db1=# CREATE TABLE t63 AS SELECT generate_series(1,999999) i;
    db1=# ALTER TABLE t63 SET (parallel_workers=2, autovacuum_enabled=off);
    db1=# CREATE INDEX ON t63 (i);
    db1=# SET parallel_leader_participation=off;
    db1=# SET min_parallel_table_scan_size=0;
    db1=# SET enable_bitmapscan=off;
    db1=# SET enable_indexonlyscan=off;
    db1=# SET enable_seqscan=off;
    db1=# SELECT COUNT(1) FROM t63 WHERE i > 555 AND i IN (
            333,334,335, …中略… ,664,665,666) ORDER BY 1;
    
  114. BRINインデックスのスキャン中に並行して行われるインデックスの要約の解除が正しく行われるようになりました。 (Alexander Lakhin, Álvaro Herrera) (12)(11)(10)(9.6)(9.5)
  115. これまではインデックスのスキャンでインデックス破損と誤認した以下のようなエラーが生じるおそれがありました。

    ERROR: corrupted BRIN index: inconsistent range map
    
  116. 複数列 GINインデックスのスキャンで「ERROR: lost saved point in index」が稀に生じることがあり、修正されました。 (Tom Lane) (12)(11)(10)(9.6)(9.5)
  117. 不必要なエラー発生が防止されたのに加えて、メッセージ文面も「ERROR: failed to re-find tuple within index 《インデックス名》」に変更されました。

  118. イベントトリガが ALTER TABLE 操作を監視するときに、解放済みメモリ使用の危険性があり、修正されました。 (Jehan-Guillaume de Rorthais) (12)(11)(10)(9.6)(9.5)
  119. これによりクラッシュを引き起こす可能性があります。

  120. 一貫性のない移動集約のデータ型に関する誤ったエラーメッセージが修正されました。 (Jeff Janes) (12)(11)(10)(9.6)(9.5)
  121. CREATE AGGREGATE に指定する関数のデータ型が一致していない場合に以下のようなメッセージが出ますが、そこで示すデータ型が誤っていました。

    ERROR:  moving-aggregate implementation returns type 《データ型》, but plain implementation returns type 《データ型》.
    
  122. 並列ワーカが非常に長いエラーメッセージを報告するときのハングアップが回避されました。 (Vignesh C) (12)(11)(10)(9.6)(9.5)
  123. libpq が .pgpassファイルの任意の長さの行をサポートするようになりました。 (Tom Lane) (12)(11)(10)(9.6)(9.5)
  124. これは主に、非常に長いセキュリティトークンをパスワードとして使用できるようにする場合に役立ちます。

  125. 並列で実行する pg_restore が、パーティションテーブルを参照する外部キーに対して、正しい順序で処理するようになりました。 (Álvaro Herrera) (12)
  126. 以前は、必要なインデックスがすべて配置される前に外部キー制約を復元しようとして、エラーが発生する可能性がありました。

  127. configure のテストプログラムで exit() ではなく return を使用するようになりました。 (Peter Eisentraut) (9.6)(9.5)
  128. これにより一部の開発環境における configure の失敗を回避しました。