PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como permitir apenas uma linha para uma tabela?


Um UNIQUE restrição permite várias linhas com NULL valores, porque dois NULL os valores nunca são considerados iguais.

Considerações semelhantes se aplicam a CHECK restrições. Eles permitem que a expressão seja TRUE ou NULL (só não FALSE ). Novamente, NULL os valores passam da verificação.

Para descartar isso, a coluna deve ser definido NOT NULL . Ou transforme-a em PRIMARY KEY já que as colunas PK são definidas NOT NULL automaticamente. Detalhes:

Além disso, basta usar boolean :
CREATE TABLE public.onerow (
   onerow_id bool PRIMARY KEY DEFAULT TRUE
 , data text
 , CONSTRAINT onerow_uni CHECK (onerow_id)
);

O CHECK restrição pode ser tão simples para um boolean coluna. Apenas TRUE é permitido.

Você pode querer REVOKE (ou não GRANT ) o DELETE e TRUNCATE privilégios de public (e todas as outras funções) para evitar que uma única linha seja excluída. Curti:
REVOKE DELETE, TRUNCATE ON public.onerow FROM public;