On 26/12/11 19:28, Lazaro Rubén García Martinez wrote:
Es natural que si eliminas el padre se elimine todo en cascada, por ejemplo 
supón que tienes el asiento con id 1 y es referenciado desde una tupla con id 2 
en la tabla linea_asiento, entonces al tener una relación recursiva sobre la 
misma tabla línea_asiento si la clave foránea de asiento no acepta nulos en la 
tabla linea_asiento, donde quiera que tengas una relación recursiva donde la 
llave foránea de linea_asiento sea la 2, tendrías también la llave foránea de 
asiento o sea la 1.

Lo otro, que sucedería si al eliminar un asiento, este es referenciado desde la 
tabla linea_asiento, en una tupla que es el nodo raíz en tu jerarquía de la 
tabla recursiva, o sea que pasaría con todas las tuplas dependientes de ella?

Espero que te haya podido ayudar.

Saludos.



Lazaro, si elimino un asiento, se eliminan en cascada todas las lineas asociadas y si esas lineas son padres a la vez de otras líneas, estas últimas también debiesen ser eliminadas, de hecho los constraint están creados para satisfacer lo expuesto antes. El problema está en la siguiente situación, tengo un asiento generado desde otro asiento y requiero eliminarlo, las líneas de ese asiento deben devolver montos a las líneas del asiento original. Si yo elimino línea por línea, el trigger funciona perfecto, sin embargo si yo elimino el asiento, las líneas efectivamente se borran sin embargo el trigger sobre la tabla de líneas no se ejecuta, por lo tanto los montos no son devueltos a las líneas originales. Me imagino, pues no entiendo mucho, que como es una eliminación en cascada no se ejecuta un delete ordinario sobre las líneas y por ello no se ejecuta el trigger. La solución pasaría por hacer la misma operación en un trigger en el evento delete del asiento, pero me parece poco práctico hacer la tarea dos veces, yo imagino que será posible se ejecute el trigger sobre las lineas cuando estas son eliminadas en cascada y que algo estaré pasando por alto.

Saludos cordiales.-
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a