He creado algunas tablas en postgres, he añadido una clave externa de una tabla a otra y configuré ON DELETE en CASCADE. Por extraño que parezca, tengo algunos campos que parecen estar violando esta restricción.Las claves externas en postgresql pueden ser violadas por el disparador
¿Es este comportamiento normal? Y si es así, ¿hay alguna manera de obtener el comportamiento que quiero (no es posible contravenir)?
Editar:
I orginaly creado la clave externa como parte de CREATE TABLE, simplemente usando
... REFERENCES product (id) ON UPDATE CASCADE ON DELETE CASCADE
El pgadmin3 código actual da es
ALTER TABLE cultivar
ADD CONSTRAINT cultivar_id_fkey FOREIGN KEY (id)
REFERENCES product (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;
Edición 2:
Para aclarar, tengo la sospecha de que las restricciones solo se verifican cuando se actualiza s/insertos suceden pero nunca se vuelven a mirar. Lamentablemente, no sé lo suficiente sobre postgres para saber si esto es cierto o cómo los campos pueden terminar en la base de datos sin que se ejecuten esos controles.
Si este es el caso, ¿hay alguna manera de verificar todas las claves foráneas y solucionar esos problemas?
Datos 3:
Una violación de la restricción puede ser causada por un gatillo defectuoso, ver más abajo
Sólo para una verificación de cordura ¿puede publicar la declaración que utilizó para crear el FK? –
¿En qué versión de PG estás? – Kuberchaun
Estoy usando la versión 8.3 –