PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

NOT NULL-Einschränkung für eine Reihe von Spalten

@Igor hat recht und ein paar OR 'ed Ausdruck sind schnell und einfach.

Für eine lange Liste von Spalten (a , b , c , d , e , f , g im Beispiel), ist dies kürzer und genauso schnell:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>hier fummeln
Alte SQL-Geige.

Wie funktioniert es?

Eine ausführlichere Form des Obigen wäre:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW ist hier redundante Syntax.

Testen einer ROW Ausdruck mit IS NULL nur meldet TRUE wenn jede einzelne Spalte ist NULL - und genau das wollen wir ausschließen.

Es ist nicht möglich, diesen Ausdruck einfach mit (a,b,c,d,e,f,g) IS NOT NULL umzukehren , denn das würde testen, ob jede einzelne Spalte IS NOT NULL ist . Negieren Sie stattdessen den gesamten Ausdruck mit NOT . Voilá.

Weitere Details im Handbuch hier und hier.

Ein Ausdruck der Form:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

würde dasselbe erreichen, weniger elegant und mit einer großen Einschränkung:funktioniert nur für Spalten mit passendem Datentyp , während die Prüfung auf eine ROW Ausdruck funktioniert mit any Spalten.