And*_*eKR 5 postgresql array check-constraints
我想设置一个 CHECK 约束来确保text[]
列的元素仅包含某些值。
设置一个例子:
CREATE TABLE foo(
countries text[]
);
INSERT INTO foo VALUES ('{"Morocco", "Mali", "Indonesia"}');
INSERT INTO foo VALUES ('{"Sokovia", "Mali"}');
Run Code Online (Sandbox Code Playgroud)
现在只允许“摩洛哥”、“马里”和“印度尼西亚”,因此第二行应该被约束拒绝。
我有一个“有效”的解决方案:
CHECK (array_length(
array_remove(
array_remove(
array_remove(
countries,
'Indonesia'
), 'Mali'
), 'Morocco'
), 1) IS NULL)
Run Code Online (Sandbox Code Playgroud)
但这不太可读。
我也尝试过这个:
CHECK ((
SELECT unnest(countries)
EXCEPT
SELECT unnest(array['Morocco', 'Mali', 'Indonesia'])
) IS NULL)
Run Code Online (Sandbox Code Playgroud)
但:
错误无法在检查约束中使用子查询
在检查约束中使用“包含于”运算符:
CHECK (countries <@ ARRAY['Morocco', 'Mali', 'Indonesia'])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2390 次 |
最近记录: |