Trigger de Auditoria

From: WILLIAM PARRA <wilparra(at)yahoo(dot)com>
To: msotocl(at)gmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Trigger de Auditoria
Date: 2006-11-20 15:24:06
Message-ID: 925468.30171.qm@web56612.mail.re3.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buen día compañeros de lista:

Verificando dentro de mis curiosidades que bajo de la lista (Mi propio LOG), vi un codigo para crear la auditoria a cualesquiera tabla. El post fupe enviado por Mario Soto Cordones desde Venezuela.

No sé si esté haciendo usufructo de la propiedad intelectual de quienes elaboraron el código, en cuyo caso, me abtendría de usarlo, no obstante, al tratar de probarlo, me saca el siguiente error:

ERROR: record "old" is not assigned yet
Detail: The tuple structure of a not-yet-assigned record is indeterminate.

Y el código es el Siguiente

CREATE OR REPLACE FUNCTION AUDITOR_TABLAS () 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);
-- INSERTA LA IP DEL EQUIPO DEL USUARIO
select into usuario inet_client_addr();
--select into usuario user;
--select into pid pg_backend_pid();
pid := 1111;
IF TG_OP = ''INSERT'' THEN
tipo:=''I'';
select into id new.oid;
END IF;
IF TG_OP = ''UPDATE'' THEN
tipo:=''U'';
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 attnum > 0
and NOT attisdropped
LOOP

IF NEW. || cols.nombre || <> OLD. || cols.nombre || THEN
CONSULTA := ''INSERT INTO auditoria
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;
--INSERT INTO auditoria (TIPO,FECHA,USUARIO,TABLA,CAMPO,NOMBRE1,NOMBRE2,NOMBRE3,PID)
-- values (tipo,fecha,usuario,TG_RELNAME,id,cols.nombre,cols.nombre,cols.nombre,pid);
END IF;
END LOOP;
RETURN NEW;
END;
'
LANGUAGE plpgsql;

--
--
--

Si alguien tiene idea de que se trata el error, y como puede ser la forma de solucionarlo, Les estaría altamente agradecido.

La versión del Postgresql que uso es la 8.0. La cadena de version dice Postgresql 8.0.2.

Gracias

William Enrique Parra Alba
Ingeniero De Sistemas
Universidad Pedagógica y Tecnológica de Colombia
/\ /\
/ //\\ \
\ \\// /
/ / \ \
\/ \/
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-11-20 15:41:05 Re: desglosar una funcion FuncExpr
Previous Message Victor Lopez 2006-11-20 14:52:09 Re: SI en postgreSQL ... NO en PHP