auditoria: capturar el registro del primer campo de una tabla

From: Cesar Carbonara <cesar(dot)carbonara(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: auditoria: capturar el registro del primer campo de una tabla
Date: 2009-02-22 12:57:07
Message-ID: 51260c480902220457vcbc2674ic937afac41022877@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Angelo Astorga 2009-02-22 19:46:37 Cambiando Postgresql 7.4.3 a 8.1.11 !!!
Previous Message Gabriel Hermes Colina Zambra 2009-02-22 05:11:04 Re: SQL Manager for PostgreSQL