声明一个类型为' not-null-string'的列。 postgresql中的数组

时间:2017-08-08 19:42:43

标签: postgresql

使用PostgreSQL9.6我知道如何创建一个' not-null-array'带

的字符串
withColumn()

但这允许元素为空,即我可以

插入示例值(' {NULL}')

有没有办法表达这一点(我知道它无效)

CREATE TABLE example (
    foo TEXT[] NOT NULL
);

2 个答案:

答案 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)
);