Re: AYUDA CON TRIGGERS

Lists: pgsql-es-ayuda
From: Raúl Mero <rmero(at)marzam-online(dot)com>
To: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>, Alvaro Herrera <pgsql-es-ayuda-owner(at)postgresql(dot)org>
Subject: AYUDA CON TRIGGERS
Date: 2006-05-30 14:04:53
Message-ID: 447C5105.2020401@marzam-online.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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
--

Attachment Content-Type Size
rmero.vcf text/x-vcard 370 bytes

From: "Antonio Martinez" <amartinezal(at)azertia(dot)com>
To: <rmero(at)marzam-online(dot)com>
Cc: <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 14:45:53
Message-ID: 447C5AA1.10703@azertia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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. -----------------------------------------------------------------------


From: "Linder Poclaba" <linder(dot)poclaba(at)gmail(dot)com>
To: "Antonio Martinez" <amartinezal(at)azertia(dot)com>
Cc: rmero(at)marzam-online(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:17:00
Message-ID: 5aa69e1b0605300817p46705a16y5018e62998fcc410@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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
>


From: Raúl Mero <rmero(at)marzam-online(dot)com>
To: Linder Poclaba <linder(dot)poclaba(at)gmail(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:17:19
Message-ID: 447C61FF.9050203@marzam-online.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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
> <mailto: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
>
>

--

Attachment Content-Type Size
rmero.vcf text/x-vcard 370 bytes

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Raúl Mero <rmero(at)marzam-online(dot)com>
Cc: Linder Poclaba <linder(dot)poclaba(at)gmail(dot)com>, Antonio Martinez <amartinezal(at)azertia(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: AYUDA CON TRIGGERS
Date: 2006-05-30 15:24:23
Message-ID: 20060530152423.GA31547@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Raúl Mero escribió:
> 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????

No se pueden escribir funciones de trigger en SQL.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


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
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
> >
>
>
>
> --
>
>