Perché in PostgreSQL sono consentiti valori null di array di tipo enum?

Sep 17 2020

Sto lavorando con un database PostgreSQL e utilizzo un array di un tipo enum come una delle colonne.

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;

Il enumdà me aggiungere solo valori validi che essa contiene, ma ho anche possibile aggiungere un nullelementi ad esso.

Quindi, per evitare di salvare nullelementi nel DB, ho aggiunto un filtro nell'app, ma mi chiedo se in PostgreSQL esiste una definizione per non consentire l'aggiunta di nullelementi array?

PS Ho visto qui il suggerimento di aggiungere la funzione come parte della definizione della colonna, ma non è quello che ho chiesto.

Risposte

3 a_horse_with_no_name Sep 17 2020 at 14:17

È possibile aggiungere un vincolo di controllo per evitare elementi con valori NULL.

alter table my_table
  add constraint no_null_element 
  check (cardinality(my_column) = cardinality(array_remove(my_column, null)));

Una soluzione più pulita sarebbe una relazione uno-a-molti normalizzata con una colonna di chiave esterna definita come not null