非互換
boolean型の列をパーティションキーに持つリストパーティショニングを行っており、その表に対しIS NOT句を含む問い合わせを実行した場合の実行結果を変更します。
Fujitsu Enterprise Postgres 16以前では、"IS NOT TRUE"と"IS FALSE"、"IS NOT FALSE"と"IS TRUE"が等価として扱われており、NULLに対する考慮が漏れていました。
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)
postgres=# SELECT * FROM boolpart WHERE a IS NOT TRUE AND a IS NOT FALSE; a --- (1 row)
対処方法
ありません。