UNIQUE
ограничението позволява множество редове с NULL
стойности, защото две NULL
стойностите никога не се считат за еднакви.
Подобни съображения важат за CHECK
ограничения. Те позволяват изразът да бъде TRUE
или NULL
(само не FALSE
). Отново NULL
стойностите преминават проверката.
За да изключите това, колонататрябва бъде дефиниран NOT NULL
. Или го направете PRIMARY KEY
тъй като PK колоните са дефинирани NOT NULL
автоматично. Подробности:
Освен това просто използвайте boolean
:
CREATE TABLE public.onerow (
onerow_id bool PRIMARY KEY DEFAULT TRUE
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
CHECK
ограничението може да бъде толкова просто за boolean
колона. Само TRUE
е разрешено.
Може да искате REVOKE
(или не GRANT
) DELETE
и TRUNCATE
привилегии от public
(и всички други роли), за да предотвратите изтриването на един ред. Като:
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;