Un UNIQUE il vincolo consente più righe con NULL valori, perché due NULL i valori non sono mai considerati uguali.
Considerazioni simili si applicano a CHECK vincoli. Consentono all'espressione di essere TRUE o NULL (solo non FALSE ). Di nuovo, NULL i valori superano il controllo.
Per escluderlo, la colonna deve essere definito NOT NULL . Oppure impostala come PRIMARY KEY poiché le colonne PK sono definite NOT NULL automaticamente. Dettagli:
Inoltre, usa semplicemente boolean :
CREATE TABLE public.onerow (
onerow_id bool PRIMARY KEY DEFAULT TRUE
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
Il CHECK il vincolo può essere così semplice per un boolean colonna. Solo TRUE è consentito.
Potresti voler REVOKE
(o non GRANT ) il DELETE e TRUNCATE privilegi da public (e tutti gli altri ruoli) per evitare che la singola riga venga mai eliminata. Come:
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;