Por que no PostgreSQL enum type array valores nulos são permitidos?
Estou trabalhando com um banco de dados PostgreSQL e uso uma matriz de um tipo enum como uma das colunas.
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;
O enumpermite adicionar apenas valores válidos que ele contém, mas também posso adicionar nullelementos a ele.
Então, para evitar salvar nullelementos no BD, adicionei um filtro no aplicativo, mas gostaria de saber se existe uma definição no PostgreSQL que não permita adicionar nullelementos array?
PS Vi aqui a sugestão de adicionar função como parte da definição da coluna, mas não foi isso que perguntei.
Respostas
Você pode adicionar uma restrição de verificação para evitar elementos com valores NULL.
alter table my_table
add constraint no_null_element
check (cardinality(my_column) = cardinality(array_remove(my_column, null)));
Uma solução mais limpa seria um relacionamento normalizado de um para muitos com uma coluna de chave estrangeira definida como not null