ページの先頭行へ戻る
Enterprise Postgres 17 リリース情報

2.2.29 boolean型の列をパーティションキーに持つ表に対し、IS NOT句を含む問い合わせの実行結果の変更

非互換

boolean型の列をパーティションキーに持つリストパーティショニングを行っており、その表に対しIS NOT句を含む問い合わせを実行した場合の実行結果を変更します。

Fujitsu Enterprise Postgres 16以前では、"IS NOT TRUE"と"IS FALSE"、"IS NOT FALSE"と"IS TRUE"が等価として扱われており、NULLに対する考慮が漏れていました。

Fujitsu Enterprise Postgres 16以前の場合
postgres=# CREATE TABLE boolpart (a bool) PARTITION BY LIST (a);
CREATE TABLE
postgres=# CREATE TABLE boolpart_t PARTITION OF boolpart FOR VALUES IN ('true');
CREATE TABLE
postgres=# CREATE TABLE boolpart_f PARTITION OF boolpart FOR VALUES IN ('false');
CREATE TABLE
postgres=# CREATE TABLE boolpart_null PARTITION OF boolpart FOR VALUES IN (null);
CREATE TABLE
postgres=# INSERT INTO boolpart VALUES (true), (false), (null);
INSERT 0 3
postgres=# SELECT * FROM boolpart WHERE a IS NOT TRUE AND a IS NOT FALSE;
 a
---
(0 rows)
Fujitsu Enterprise Postgres 16 SP1の場合
postgres=# SELECT * FROM boolpart WHERE a IS NOT TRUE AND a IS NOT FALSE;
 a
---

(1 row)

対処方法

ありません。