使用PostgreSQL9.6我知道如何创建一个' not-null-array'带
的字符串withColumn()
但这允许元素为空,即我可以
插入示例值(' {NULL}')
有没有办法表达这一点(我知道它无效)
CREATE TABLE example (
foo TEXT[] NOT NULL
);
?
答案 0 :(得分:2)
使用功能:
trace[, mark := trace[.(dep = dep, id = id), on=.(label = dep, id < id),
list(list(na.omit(x.id))), by=.EACHI]$V1 ]
# if not found, use current id
trace[lengths(mark) == 0L, mark := as.list(id)]
检查约束中的:
create or replace function are_elements_not_null(arr anyarray)
returns boolean language sql immutable
as $$
select bool_and(elem is not null)
from unnest(arr) as elem
$$;
请注意,该列仍可以为null或可以包含空数组。如果要排除这些情况,请按以下方式扩展定义:
create table example(
foo text[] check(are_elements_not_null(foo))
);
insert into example values
(array[null]);
ERROR: new row for relation "example" violates check constraint "example_foo_check"
DETAIL: Failing row contains ({NULL}).
答案 1 :(得分:2)
自9.5版起更简单,并添加了array_position()
CREATE TABLE example (
foo TEXT[] NOT NULL check (array_position(foo, null) is null)
);
您可能还需要检查一个空数组:
CREATE TABLE example (
foo TEXT[] NOT NULL check (foo <> '{}' and array_position(foo, null) is null)
);