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;