PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come consentire solo una riga per una tabella?

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;