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