Warum sind in PostgreSQL-Aufzählungstypen Array-Nullwerte zulässig?

Sep 17 2020

Ich arbeite mit einer PostgreSQL-Datenbank und verwende ein Array eines Aufzählungstyps als eine der Spalten.

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;

Das enumgibt mir die Möglichkeit, nur gültige Werte hinzuzufügen, die es enthält, aber ich kann auch nullElemente hinzufügen .

Um das Speichern von nullElementen in der Datenbank zu verhindern , habe ich der App einen Filter hinzugefügt. Ich frage mich jedoch, ob es in PostgreSQL eine Definition gibt, die das Hinzufügen von nullElementen nicht zulässt array.

PS Ich habe hier den Vorschlag gesehen, eine Funktion als Teil der Spaltendefinition hinzuzufügen, aber das habe ich nicht gefragt.

Antworten

3 a_horse_with_no_name Sep 17 2020 at 14:17

Sie können eine Prüfbedingung hinzufügen, um Elemente mit NULL-Werten zu verhindern.

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

Eine sauberere Lösung wäre eine normalisierte Eins-zu-Viele-Beziehung zu einer Fremdschlüsselspalte, definiert als not null