Re: Crear un evento cada vez que se hace una UPDATE

From: "Jaime Casanova" <jcasanov(at)systemguards(dot)com(dot)ec>
To: Alvaro Uría <fermat(at)rigel(dot)deusto(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Crear un evento cada vez que se hace una UPDATE
Date: 2008-07-16 22:16:39
Message-ID: 3073cc9b0807161516i9279ce2ra04999a44081c726@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2008/7/16 Alvaro Uría <fermat(at)rigel(dot)deusto(dot)es>:
> Hola,
>
> El 16/07/08 17:26, Jaime Casanova escribió:
>> On 7/16/08, Alvaro Uría <fermat(at)rigel(dot)deusto(dot)es> wrote:
>>> En Postgres, la he creado tal que,
>>>
>>> validNotBefore timestamp NOT NULL default '0000-00-00 00:00:00',
>>> validNotAfter timestamp NOT NULL default '0000-00-00 00:00:00',
>>
>> te dejo hacer eso? esa fecha no es valida en postgres...
>
> He copiado del fichero original donde lo escribí, y después de mandarlo
> me he acordado de que hubo cosas que tuve que modificar.
>
> En lugar de esa fecha, puse una en el pasado (1970-blablabal :-)
>

eso me lo creo mas...

>
> Con ánimo de aprender, ¿por qué no se podría hacer con una "CREATE RULE"?
>

de poder puedes, pero las reglas (RULE) en realidad son como macros
que se expanden en linea (o al menos es una forma de explicarlo) y eso
hace que puedan surgir problemas si una regla que se expande te agrega
dos llamadas a la misma funcion volatil (randim(), nextval(), etc)
cuando tu solo esperabas una...

> Por otro lado, ¿cómo haríais el trigger? (entendería un STFW o RTFM,
> pero bastante de eso ya lo he hecho y necesito una guía para "la primera
> vez")
>
> ¿El trigger sería algo así? (generalmente, la update es a un solo
> registro, por lo que el "for each" supongo que se ejecutaría una sola vez)
>
> CREATE TRIGGER tresource_update AFTER UPDATE ON TResource
> FOR EACH ROW EXECUTE PROCEDURE update_stamp(uploaded);
>

BEFORE UPDATE si lo haces AFTER ya habras grabado el registro y ya
nada puedes hacer sino actualizarlo con UPDATE...

quedaria asi:
CREATE TRIGGER tresource_update BEFORE UPDATE ON TResource
FOR EACH ROW EXECUTE PROCEDURE update_stamp();

> ¿Y el procedure?
>
> CREATE OR REPLACE FUNCTION update_stamp() returns trigger as $$
> begin
> return now();
> end;
> $$ language plpgsql;
>
>

CREATE OR REPLACE FUNCTION update_stamp() returns trigger as $$
begin
NEW.uploaded = current_timestamp;

return NEW;
end;
$$ language plpgsql;

> Saludos, y gracias.
> Alvaro Uría
>
>

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Guayaquil - Ecuador
Cel. (593) 87171157

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message César Piñera García 2008-07-16 23:16:11 RE: De informix a Postgresql
Previous Message alejandrob 2008-07-16 21:30:55 Reinstalacion