Wednesday, July 16, 2008

Re: [pgsql-es-ayuda] Crear un evento cada vez que se hace una UPDATE

2008/7/16 Alvaro Uría <fermat@rigel.deusto.es>:
> Hola,
>
> El 16/07/08 17:26, Jaime Casanova escribió:
>> On 7/16/08, Alvaro Uría <fermat@rigel.deusto.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
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

No comments: