Re: trigger de auditoria

From: Mario Soto Cordones - Venezuela <msotocl(at)gmail(dot)com>
To: juanky(dot)moral(at)gmail(dot)com
Cc: Lista postgreslq Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: trigger de auditoria
Date: 2005-09-20 16:18:59
Message-ID: e9b17cde0509200918a669dbe@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

OK, eso era pero no logro que :
el
NEW. || cols.nombre o NEW. cols.nombre me traigan el valor, solo me
traen NEW.id_estado , es decir el campo mas no el valor, ahora bien si
coloco NEW.id_estado, si me trae en nuevo valor, pero esa no es la
idea ya que quiero que esta funcion me sirva para todas las tables del
sistema, de lo contratio tendria que hacer esta funcion por cada
tabla.

Saludos

El 20/09/05, Juanky Moral<juanky(dot)moral(at)gmail(dot)com> escribió:
> No es el FOR lo que te falla: te falta el END LOOP.
>
> LOOP
> statements
> END LOOP;
>
> El 20/09/05, Mario Soto Cordones - Venezuela<msotocl(at)gmail(dot)com> escribió:
> > Hola Lista
> >
> > tengo un trigger que me gatilla la siguiente funcion,
> >
> > CREATE OR REPLACE FUNCTION auditorias.ausubgrupo () RETURNS TRIGGER
> > AS '
> > DECLARE
> > CONSULTA varchar;
> > fecha timestamp;
> > tipo varchar;
> > cols record;
> > usuario varchar;
> > id integer;
> > pid integer;
> > columna varchar;
> > BEGIN
> > select into fecha current_timestamp(0);
> > select into usuario inet_client_addr();
> > select into pid pg_backend_pid();
> >
> > IF TG_OP = ''INSERT'' THEN
> > tipo:=''A'';
> > select into id new.oid;
> > END IF;
> > IF TG_OP = ''UPDATE'' THEN
> > tipo:=''M'';
> > select into id old.oid;
> > END IF;
> >
> > FOR cols IN select attname as nombre, attnum as numero from pg_attribute
> > where attrelid = TG_RELID
> > and NOT attisdropped
> > and attnum > 0
> > LOOP
> >
> > IF NEW. || cols.nombre || <> OLD. || cols.nombre || THEN
> > CONSULTA := ''INSERT INTO auditorias.audit
> > values (1 ,'' || quote_literal(tipo)
> > || '','' || quote_literal(fecha)
> > || '','' || quote_literal(usuario)
> > || '','' || quote_literal(TG_RELNAME)
> > || '','' || id
> > || '','' || quote_literal(cols.nombre)
> > || '','' || quote_literal(cols.nombre)
> > || '','' || quote_literal(cols.nombre)
> > || '','' || pid
> > || '')'';
> >
> > EXECUTE CONSULTA;
> > END IF;
> >
> >
> > RETURN NEW;
> >
> >
> > END;
> > '
> >
> > LANGUAGE plpgsql;
> >
> > Esta funcion es una adaptacion de una que santiago c. envio alguna vez
> > a la lista, pero al ejecutar la sentencia que me gatilla esta, me
> > arroja un error indicando la linea del ciclo for, pero el for esta
> > bien.
> >
> > Lo quie quiero es colocar en un record las columnas de la tabla que
> > me gatilla el trigguer para que dinamicamente el vea que columna es la
> > que esta siendo modificada y asi se registre el evento
> >
> >
> >
> > Saludos
> >
> > ---------------------------(fin del mensaje)---------------------------
> > TIP 6: ¿Has buscado en los archivos de nuestra lista de correo?
> >
> > http://archives.postgresql.org/pgsql-es-ayuda
> >
>
>
> --
> Juanky Moral - www.juancarlosmoral.es
> "Tendré que moverme más rápido: el horizonte brilla eléctrico."
> (Horizonte Eléctrico - Los Deltonos )
>

--
cordialmente,

Ing. Mario Soto Cordones

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-09-20 16:50:37 Re: existe conexion pero no veo las db/schemas en el pgadmin
Previous Message Alvaro Herrera 2005-09-20 16:08:02 Re: existe conexion pero no veo las db/schemas en el pgadmin