Rodrigo... Insisto....
Debes sentarte y analizar cada proceso que ejecutas y el orden de las operaciones que realizas.
Cada vez veo nuevas inconsistencias, pero debes ser tu, con los conceptos que hemos aplicado, la persona que debe analizar como hacer uso de las herramientas en tu propio problema. Tu mas que nadie, sabes cmo funciona tu sistema y que es lo que debes hacer.
Hay algo que no me cuadra...
tienes dos triggers bajo la acción
before delete on nino
Por que no unes los 2 triggers en uno?
Código sql:
Ver originalCREATE OR REPLACE FUNCTION eliminar_antes_de_nino() RETURNS TRIGGER AS
$$
DECLARE
nino record;
padres record;
BEGIN
DELETE FROM actividad WHERE OLD.id_nino=id_nino;
DELETE FROM beneficio WHERE OLD.id_nino=id_nino;
DELETE FROM educacion WHERE OLD.id_nino=id_nino;
DELETE FROM nino_vive_en WHERE OLD.id_nino=id_nino;
DELETE FROM salud WHERE OLD.id_nino=id_nino;
DELETE FROM trabajo WHERE OLD.id_nino=id_nino;
SELECT INTO nino id_familia,COUNT(id_familia) AS numhijos FROM familia_x_hijos WHERE id_nino=OLD.id_nino GROUP BY id_familia;
IF nino.numhijos = 0 THEN
SELECT INTO padres rut_padre,rut_madre FROM familia WHERE id_familia=nino.id_familia;
DELETE FROM familia WHERE id_familia=nino.id_familia;
DELETE FROM padre WHERE rut_padre=padres.rut_padre;
DELETE FROM madre WHERE rut_madre=padres.rut_madre;
END IF;
DELETE FROM familia_x_hijos WHERE OLD.id_nino=id_nino;
RETURN OLD;
END;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER borrar_todo_antes_de_nino BEFORE
DELETE ON nino
FOR each ROW EXECUTE PROCEDURE eliminar_antes_de_nino();
Espero esta vez si te funcione.