[Pgsql-ayuda] como crear delete recursivo?

Antonio Castro acastro@ciberdroide.com
Wed, 29 Jan 2003 10:39:42 +0100 (CET)


On Tue, 28 Jan 2003, Claudia Paricia Villa wrote:

> hola espero puedan ayudarme.
>=20
> tengo una tabla con tareas
> tareas(id), quien la creo (p_id).
> una tareas puede crear varias subtareas y una subtareas a su ves puede=20
> crear a  otras subtareas
>=20
> proyectos=3D# select id,nombre,p_id from tareas;
>    id   |          nombre           |  p_id
> --------+---------------------------+--------
>  100018 | tarea 1                   |     99
>  100019 | subtarea 1.1              | 100018
>  100020 | tarea 2                   |     99
>  100021 | subtarea 1.2              | 100018
>  100022 | subtarea 1.1.1            | 100019
>  100023 | subtarea 2.1              | 100020
>  100024 | tarea 1                   |    100
>  100025 | subtarea 1.2.1            | 100021
>  100026 | subtarea 1.1 de proy 2    | 100024
>  100027 | subtarea se ni proyecto 2 |    102
> (10 rows)
> al borrar una tareas necesito borrar a todas  sus subtareas y las=20
> subtareas de esas subtareas.

Para mi esto es m=E1s un tema de programaci=F3n que de Postgres pero la sol=
uci=F3n
m=E1s facil que a mi se me ocurre si se asume una estructura en forma de
arbol es borrar una tarea y luego borrar a todos los huerfanos. Se itera
las veces que sean necesarias mientras queden huerfanos. No es recursivo
pero funciona igual de bien y resulta sencillo.=20

En vez de ir borrando puedes ir marcandolos todos primero y luego pides=20
confirmaci=F3n y los borras en de de una transacci=F3n para garantizar que=
=20
se hace todo o no se hace nada.


Un saludo

Antonio Castro

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+
        /\     /\      Ciberdroide Inform=E1tica (Tienda de Linux)
          \\W//            <<< http://www.ciberdroide.com >>>
=09 _|0 0|_                                                   =20
+-oOOO--(___o___)--OOOo----------------------------------------------------=
+=20
|  . . . . U U . . . . Antonio Castro Snurmacher  acastro@ciberdroide.com  =
| =20
|  . . . . . . . . . .                                                     =
|=20
+()()()----------()()()----------------------------------------------------=
+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** =
|
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>>            =
|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--=
+