Re: Trigger no actúa al eliminar en tabla padre

From: Rodrigo Ruiz <rruizf(at)gmail(dot)com>
To: Lazaro Rubén García Martinez <lgarciam(at)vnz(dot)uci(dot)cu>
Cc: Lista PostgreSQL <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Trigger no actúa al eliminar en tabla padre
Date: 2011-12-27 17:00:08
Message-ID: 4EF9F998.7020507@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.-

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message ruben avila galindo 2011-12-27 17:01:45 Re: Ubuntu o Centos?
Previous Message Mario Soto Cordones 2011-12-27 16:47:45 RE: Ubuntu o Centos?