Re: AYUDA CON TRIGGERS

From: "Linder Poclaba" <linder(dot)poclaba(at)gmail(dot)com>
To: rmero(at)marzam-online(dot)com
Cc: "Antonio Martinez" <amartinezal(at)azertia(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org, "Alvaro Herrera" <pgsql-es-ayuda-owner(at)postgresql(dot)org>
Subject: Re: AYUDA CON TRIGGERS
Date: 2006-05-30 15:30:35
Message-ID: 5aa69e1b0605300830r3b53a895s21f15b771d4572a7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yo use PL/pgSQL y no me dio problemas aqui te dejo para que lo veas:

CREATE OR REPLACE FUNCTION accion_usuario() RETURNS TRIGGER AS $$
DECLARE
id_u int;
tiempo timestamp;
id_b int;
BEGIN
IF(TG_OP = 'INSERT') OR (TG_OP = 'UPDATE') OR (TG_OP = 'DELETE') THEN
SELECT usesysid INTO id_u from pg_user where usename =
current_user;
tiempo := 'now';
INSERT INTO bitacora(id_usuario,usuario,ip_pc,fecha_inicio)
values (id_u,current_user,inet_client_addr(),tiempo);
SELECT max(id_bitacora) INTO id_b FROM bitacora;
INSERT INTO accion(accion,tabla,base_datos,id_bitacora) values
(TG_OP,TG_RELNAME,current_database(),id_b);
END IF;
IF (TG_OP = 'INSERT') OR (TG_OP = 'UPDATE')THEN
RETURN NEW;
END IF;
IF (TG_OP = 'DELETE') THEN
RETURN OLD;
END IF;

END;
$$ LANGUAGE plpgsql;

SELECT max(id_bitacora) INTO id_b FROM bitacora; esta sentencia la puedes
cambiar y creo que es lo mas conveniente a utilizar

SELECT last_value into id_b FROM bitacora_id_bitacora_seq;

Espero que te sirva :)

On 5/30/06, Raúl Mero <rmero(at)marzam-online(dot)com> wrote:
>
> pero como harias el procedimeitno o funcion es que yo lo hago en SQL y me
> da problem o es que tengo que utilizar PL/pgSQL????
>
>
>
>
> Linder Poclaba escribió:
>
> CREATE TRIGGER nombre_trigger BEFORE INSERT OR UPDATE OR DELETE ON usuario
> FOR EACH ROW EXECUTE PROCEDURE inserta_auditoria();
>
> hice algo parecido hace unos días, ojo que los usuarios que se conecten a
> la base de datos tienes que tener los privilegios para realizar las acciones
> insert, update y delete ahh también sobre las secuencias.
>
> On 5/30/06, Antonio Martinez <amartinezal(at)azertia(dot)com> wrote:
> >
> > Te mando documentacion sobre los triggers en la primera te explica el
> > comportamiento de los mismos con ejemplo en C, me parece mas util lo del
> > comportamiento
> >
> > http://www.postgresql.org/docs/8.1/interactive/triggers.html
> >
> >
> > La segunda es mas bien un ejemplo en SQL que se parece mas a lo tuyo, te
> > viene como declarar la funcion y asociarla al trigger con un ejmplo.
> >
> >
> > http://www.postgresql.org/files/documentation/books/aw_pgsql/node166.html
> >
> > Y creo que lo que tu quieres hacer se parece bastante a esto ultimo,
> > creo que con crear un trigger tipo BEFORE INSERT OR UPDATE OR DELETE.
> >
> > Suerte si tienes mas dudas pregunta, yo no he trabajado con trigger con
> > comando SQL pero si con triggers con lenjage Java y creo la mecanica de
> > creación y eso mas o menos es la misma.
> >
> > antuan.
> >
> >
> >
> >
> >
> >
> >
> >
> > Raúl Mero wrote:
> >
> > > hola una pregunta tengo una funcion llamada inserta_auditoria() en
> > > lenguaje SQL
> > > esta graba todos los comando pposibles cuando uno se conecta a la base
> >
> > > como el el usuario, la base que se conecta, etc.
> > > ahora tengo dos tablas una usuario y la otra llamada auditoria_log el
> > > problema es el siguiente como hago que cuando haga algun cambio en la
> > > tabla usuario esta dispare este trigger y me grabe los acontecimeitno
> > > en la tabla auditoria_log pues llevo intentando y nada
> > >
> > > PD: por si acaso como dato yo administro la base en windows por medio
> > > de PgAdmin III
> > >
> > > gracias
> > > --
> > >
> > >---------------------------(fin del mensaje)---------------------------
> >
> > >TIP 5: ¿Has leído nuestro extenso FAQ?
> > >
> > > http://www.postgresql.org/files/documentation/faqs/FAQ.html
> > >
> > >
> >
> >
> >
> > -----------------------------------------------------------------------
> > Este mensaje y los documentos, que en su caso, lleve anexos, pueden contener
> > informacion confidencial y atañe exclusivamente a las personas a las que va
> > dirigido. Cualquier opinion en el contenida, es exclusiva de su autor y no
> > representa necesariamente la opinion de AZERTIA. Si usted no es el
> > destinatario de este mensaje, considerese advertido de que lo ha recibido
> > por error y que cualquier uso, difusion o copia estan prohibidos legalmente.
> > Si ha recibido este mensaje por error, le rogamos que nos lo comunique por
> > la misma via o al telefono 93 207 55 11 y proceda a destruirlo
> > inmediatamente.
> >
> > This email is confidential and intended solely for the use of the
> > individual to whom it is addressed. Any views or opinions presented are
> > solely those of the author and do not necessarily represent those of
> > AZERTIA. If you are not the intended recipient, be advised that you have
> > received this email in error and that any use, dissemination, forwarding,
> > printing, or copying of this email is strictly prohibited. If you have
> > received this email in error please notify it to AZERTIA by telephone on
> > number +34 93 207 55 11.
> > -----------------------------------------------------------------------
> >
> > ---------------------------(fin del mensaje)---------------------------
> > TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
> >
> > http://archives.postgresql.org/pgsql-es-ayuda
> >
>
>
>
> --
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message lein gutierrez 2006-05-30 17:09:57 Re: problema de compilacion de postgresql a nivel fuente
Previous Message Alvaro Herrera 2006-05-30 15:24:23 Re: AYUDA CON TRIGGERS