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;