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

Wie kann man nur eine Zeile für eine Tabelle zulassen?

Ein UNIQUE Einschränkung erlaubt mehrere Zeilen mit NULL Werte, weil zwei NULL Werte werden nie als gleich angesehen.

Ähnliche Überlegungen gelten für CHECK Einschränkungen. Sie lassen zu, dass der Ausdruck TRUE ist oder NULL (nur nicht FALSE ). Wieder NULL Werte bestehen die Prüfung.

Um das auszuschließen, muss die Spalte müssen definiert werden NOT NULL . Oder machen Sie ihn zum PRIMARY KEY da PK-Spalten definiert sind NOT NULL automatisch. Einzelheiten:

Verwenden Sie auch einfach boolean :

CREATE TABLE public.onerow (
   onerow_id bool PRIMARY KEY DEFAULT TRUE
 , data text
 , CONSTRAINT onerow_uni CHECK (onerow_id)
);

Der CHECK So einfach kann Constraint für einen boolean sein Säule. Nur TRUE ist erlaubt.

Sie können REVOKE (oder nicht GRANT ) das DELETE und TRUNCATE Privilegien von public (und alle anderen Rollen), um zu verhindern, dass die einzelne Zeile jemals gelöscht wird. Wie:

REVOKE DELETE, TRUNCATE ON public.onerow FROM public;