为什么在PostgreSQL枚举类型数组中允许空值?
我正在使用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元素
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