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;