sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo permitir solo una fila para una tabla?

UN UNIQUE la restricción permite múltiples filas con NULL valores, porque dos NULL los valores nunca se consideran iguales.

Se aplican consideraciones similares a CHECK restricciones Permiten que la expresión sea TRUE o NULL (simplemente no FALSE ). De nuevo, NULL los valores superan el control.

Para descartar eso, la columna debe ser definido NOT NULL . O conviértalo en la PRIMARY KEY ya que las columnas PK están definidas NOT NULL automáticamente. Detalles:

Además, solo use boolean :

CREATE TABLE public.onerow (
   onerow_id bool PRIMARY KEY DEFAULT TRUE
 , data text
 , CONSTRAINT onerow_uni CHECK (onerow_id)
);

El CHECK la restricción puede ser así de simple para un boolean columna. Solo TRUE está permitido.

Es posible que desee REVOKE (o no GRANT ) el DELETE y TRUNCATE privilegios de public (y todos los demás roles) para evitar que se elimine la única fila. Me gusta:

REVOKE DELETE, TRUNCATE ON public.onerow FROM public;