Saludos Había estado utilizando, para auditoría de datos, lo siguiente... Del lado del lenguaje (php): create temp table audit_tmp (usuario varchar(30), ip inet, ocurrencia timestamp default now()); insert into audit_tmp values ('".$_SESSION['login']."', '".$_SERVER['REMOTE_ADDR']."');
Del lado de la BD: CREATE FUNCTION auditoria() RETURNS "trigger" AS $$ BEGIN IF (TG_OP = 'DELETE') THEN INSERT INTO auditor (id, op, tbl, usr, ip) VALUES (OLD.id,TG_OP,TG_RELNAME,(SELECT usuario FROM audit_tmp ORDER BY ocurrencia LIMIT 1),(SELECT ip FROM audit_tmp ORDER BY ocurrencia LIMIT 1)); RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO auditor (id, op, tbl, usr, ip) VALUES (NEW.id,TG_OP,TG_RELNAME,(SELECT usuario FROM audit_tmp ORDER BY ocurrencia LIMIT 1),(SELECT ip FROM audit_tmp ORDER BY ocurrencia LIMIT 1)); RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO auditor (id, op, tbl, usr, ip) VALUES (NEW.id,TG_OP,TG_RELNAME,(SELECT usuario FROM audit_tmp ORDER BY ocurrencia LIMIT 1),(SELECT ip FROM audit_tmp ORDER BY ocurrencia LIMIT 1)); RETURN NEW; END IF; END; $$ LANGUAGE plpgsql; De manera que guardo en una tabla: el ID del registro que se está guardando/eliminando, el tipo de operación, la tabla, el usuario y desde dónde. Esto me ha funcionado bien, para un pequeño sistema, gracias a que todas las tablas tienen una relación sencilla y me permitía ponerle a todas un campo llamado ID por igual. Ahora, tengo en mis manos el dasarrollo de un sistema cuyas tablas no puedo ponerles al campo clave el mismo nombre. Puedo establecer el campo clave como primer campo, o construir su nombre para que termine en _id (por ejemplo). Me pregunto sí es posible establecer en la función para que lea el primer campo de la tabla? o alguna otra ide de cómo puedo adaptar el sistema de auditoria? Desde ya, gracias -- -- Cesar A. Carbonara R. C.I. Nº V.11.952.572 -- Usuario Linux 377997 www.gulmer.org.ve Debian... todo lo que siempre has querido