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

时间:2020-09-17 06:53:06

标签: 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中是否存在不允许将null元素添加到{{1}中的定义}?

P.S。我看到here建议添加功能作为列定义的一部分,但这不是我要的。

2 个答案:

答案 0 :(得分:3)

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

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

更清洁的解决方案是将一对多关系标准化,并将外键列定义为not null

答案 1 :(得分:-1)

另一种方式

IF array_length(arrayname,1)> 0然后 交易 END IF;