Re: Regla sobre tabla

From: Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: Pgsql-Es-Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Regla sobre tabla
Date: 2005-03-24 14:35:40
Message-ID: 3e7daec105032406352b9d5cd7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias Jaime y Roberto.

On Thu, 24 Mar 2005 01:41:27 -0500, Jaime Casanova
<systemguards(at)gmail(dot)com> wrote:
> On Wed, 23 Mar 2005 15:07:51 -0500, Juan Pablo Espino
> <jp(dot)espino(at)gmail(dot)com> wrote:
> > Que tal, saludos a todos.
> >
> > Me preguntaba si era posible aplicarle reglas a las tablas
> > directamente, asi que intente lo siguiente.
> >
> > CREATE OR REPLACE RULE prueba AS
> > ON DELETE TO journey DO INSTEAD DELETE FROM journey
> > WHERE journey.anio = 2001;
> >
> > Ejecute las instrucciones y todo bien:
> >
> > Query returned successfully with no result in 130 ms.
> >
> >
> > Bueno la tabla journey tiene dos columnas, disco y anio, entonces pues
> > la regla debe eliminar solo la fila en donde journey.anio = 2001, pero
> > lamentablemente parece que no es asi y este fue el resultado
> >
> > ERROR: infinite recursion detected in rules for relation "journey"
> >
> La regla dice cuando borre una fila en la tabla journey en su lugar
> borre de la tabla journey (la misma tabla) los registros con anio =
> 2001. Pero al ejecutarse la regla estas borrando registros, por lo
> tanto se ejecuta la regla otra vez y asi sucesivamente hasta el
> infinito. Postgres en vez de dejarte sufrir detecta esto y te lo
> advierte, ese es el mensaje.
>
> > me gustaria saber por que sucede esto y si hay alguna forma de usar
> > las reglas directamente sobre las tablas, esto es sin necesidad de
> > crear una vista a la tabla, salduos y muchas gracias.
> >
> Si, pero no de la forma en que lo haces, imagina por ejemplo:
>
> CREATE OR REPLACE RULE prueba AS
> ON DELETE TO journey DO INSTEAD
> UPDATE journey set estado = 'E' WHERE journey.anio = 2001;
>
> De todas formas para hacer cosas asi puedes usar triggers, como
> consejo te dire evita el sistema de reglas (por que no es Standard) a
> menos que lo consideres la unica alternativa.
>
> atentamente,
> Jaime Casanova
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Leonardo Boet Sánchez 2005-03-24 14:42:22 pl_java
Previous Message Edwin Quijada 2005-03-24 14:35:12 RE: Varias cuestiones relacionadas con PostgreSQL