为什么在PostgreSQL枚举类型数组中允许空值?

为什么在PostgreSQL枚举类型数组中允许空值?,postgresql,Postgresql,我正在使用PostgreSQL数据库,并使用枚举类型的数组作为列之一 CREATE TYPE my_type_enum AS ENUM ('value1', 'value2', 'value3'); ALTER TABLE "my_table" ADD COLUMN IF NOT EXISTS "my_column" my_type_enum ARRAY; enum允许我只添加它包含的有效值,但我也可以向其中添加null元素 因此,为了防止将null元素

我正在使用PostgreSQL数据库,并使用枚举类型的数组作为列之一

CREATE TYPE my_type_enum AS ENUM ('value1', 'value2', 'value3');
ALTER TABLE "my_table" ADD COLUMN IF NOT EXISTS "my_column" my_type_enum ARRAY;
enum
允许我只添加它包含的有效值,但我也可以向其中添加
null
元素

因此,为了防止将
null
元素保存到数据库中,我在应用程序中添加了一个过滤器,但我想知道PostgreSQL中是否有一个不允许将
null
元素添加到
数组中的定义

另外,我看到了在列定义中添加函数的建议,但这不是我所要求的。

另一种方法

如果数组长度(arrayname,1)>0,则 交易
如果结束

您可以添加检查约束以防止元素具有空值

alter table my_table
  add constraint no_null_element 
  check (cardinality(my_column) = cardinality(array_remove(my_column, null)));

更干净的解决方案是一个规范化的一对多关系,外键列定义为
notnull