Un UNIQUE
la contrainte autorise plusieurs lignes avec NULL
valeurs, car deux NULL
les valeurs ne sont jamais considérées comme identiques.
Des considérations similaires s'appliquent à CHECK
contraintes. Ils permettent à l'expression d'être TRUE
ou NULL
(mais pas FALSE
). Encore une fois, NULL
les valeurs dépassent le contrôle.
Pour exclure cela, la colonne doit être défini NOT NULL
. Ou faites-en la PRIMARY KEY
puisque les colonnes PK sont définies NOT NULL
automatiquement. Détails :
Aussi, utilisez simplement boolean
:
CREATE TABLE public.onerow (
onerow_id bool PRIMARY KEY DEFAULT TRUE
, data text
, CONSTRAINT onerow_uni CHECK (onerow_id)
);
Le CHECK
la contrainte peut être aussi simple pour un boolean
colonne. Seulement TRUE
est autorisé.
Vous voudrez peut-être REVOKE
(ou non GRANT
) le DELETE
et TRUNCATE
privilèges de public
(et tous les autres rôles) pour empêcher la suppression de la ligne unique. Comme :
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;