Por que no PostgreSQL enum type array valores nulos são permitidos?

Sep 17 2020

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

3 a_horse_with_no_name Sep 17 2020 at 14:17

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