Re: Intento de hacer una especie de Log (solucion)

From: Marcelino Guerrero <mguerreroh(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Intento de hacer una especie de Log (solucion)
Date: 2006-11-13 20:00:49
Message-ID: 4558CEF1.6050807@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Amigos,

Les comento que después de varios tropezones, he podido hacer lo que estaba solicitando (quizás un poco mas o menos)
pero aquí va lo que hice:

1.- Estructura de tabla de log (lo llamo así).

CREATE TABLE eliminados.log_cargo
(
ord int4 NOT NULL DEFAULT nextval('eliminados.log_usuarios_ord_seq'::text),
seq int4,
campo varchar(50),
contenido text,
usuario varchar(20),
f_borrado timestamp DEFAULT now()
)
WITHOUT OIDS;
ALTER TABLE eliminados.log_cargo OWNER TO postgres;

La intención es grabar el del campo y el contenido de este de la Tabla de donde se eliminan registros, creo que los
nombres están bastante claros

2.- El siguiente es el procedimiento que hace que cada nombre de campo y su contenido se graben en la tabla log.

CREATE or replace FUNCTION prueba2(varchar,varchar,varchar,varchar) RETURNS void AS '

DECLARE

mviews RECORD;
xcont int2;
BEGIN
xcont =0;
FOR mviews IN select atributo.attname as campo from pg_attribute atributo, pg_class clase, pg_tables tablas
where atributo.attrelid=clase.relfilenode and atributo.attstattarget = \'-1\' and
clase.relname=tablas.tablename and tablas.tablename = $1 order by atributo.attname LOOP
xcont = xcont + 1;
execute \'insert into eliminados.log_\' || $1 || \' (seq,campo,contenido,usuario) values(\' || xcont || \',\'
|| quote_literal(mviews.campo)
|| \', (select \' || mviews.campo || \' from cargo where \' || $2 || \' =\' || quote_literal($3) || \'),\' ||
quote_literal($4) || \')\';
END LOOP;

RETURN;
END'
LANGUAGE 'plpgsql';

Si alguien pudiera perfeccionarlo y también enviármelo se lo agradeceria mucho, esta es una primera prueba de hacer
funciones en Postgres asi que gustosamente recibire sus comentarios.

Slds

Raul Andres Duque escribió:
> Marcelino,
>
> Se me ocurre que puedes utilizar el trigger que te menciona Edwin.
>
> Para el tema de saber que usurio hace la operación, sólo lo sabe la
> aplicación, para el motor solo existe el usuario us_report y us_mant. Lo
> que puedes hacer es que en el momento de establcer la sesión, crees una
> tabla temporal que te va a guardar el usuario (de la aplicacion) y que
> el trigger consulte esa tabla.
>
> Atentamente,
>
> RAUL DUQUE
> Bogotá, Colombia
>
> ----- Original Message ----- From: "Marcelino Guerrero"
> <mguerreroh(at)gmail(dot)com>
> To: "Edwin Quijada" <listas_quijada(at)hotmail(dot)com>
> Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
> Sent: Thursday, November 09, 2006 9:54 AM
> Subject: Re: [pgsql-es-ayuda] Intento de hacer una especie de Log
>
>
> Edwin,
>
> Te comento lo siguiente, utilizamos un usuario para el sistema en forma
> global, esto quiere decir que para reportes es
> un usuario digamos us_report y us_mant para ingresos, modificaciones o
> consultas, la única forma de saber de que usuario
> se trata es por variables del sistema, entonces habría que enviarle como
> parámetro el usuario, debido a esto es que
> pensé hacerlo en un procedimiento.
>
> Espero se a de utilidad este ultimo dato.
>
> Grcs
>
>
> Edwin Quijada escribió:
>> Puedes hacerlo con un trigger en tiempo de borrado en la fase de
>> Before y enviarlo a otra tabla, si es lo que desas
>>
>>
>>
>> *-------------------------------------------------------*
>> *-Edwin Quijada
>> *-Developer DataBase
>> *-JQ Microsistemas
>> *-809-747-2787
>> * " Si deseas lograr cosas excepcionales debes de hacer cosas fuera de
>> lo comun"
>> *-------------------------------------------------------*
>>
>>
>>
>>
>>
>>> From: "Marcelino Guerrero" <mguerreroh(at)gmail(dot)com>
>>> To: pgsql-es-ayuda(at)postgresql(dot)org
>>> Subject: [pgsql-es-ayuda] Intento de hacer una especie de Log
>>> Date: Wed, 8 Nov 2006 13:16:09 -0500
>>>
>>> He tomado un sistema que ya esta hecho y necesito hacer un par de
>>> cambios, por ejemplo cada vez que hacen una eliminacion el registro
>>> eliminado desaparece de la tabla, claro hasta cierto punto esto esta
>>> bien, pero no hay forma de hacer una auditoria de quien elimino y
>>> cuando lo hizo.
>>>
>>> Por lo tanto he pensado hacer lo siguiente:
>>>
>>> 1.- crear una tabla con el nombre log_algo.
>>> 2.- esta tabla tendra 3 campos: fecha, campo llamdo log de tipo text,
>>> usuario que borro registro
>>> 3.- la idea es hacer un insert en el que se adicione la sumatoria de
>>> todos los campos en el campo log
>>>
>>> Ahora la gran pregunta es hay alguna forma de hacer esto, osea hacer
>>> un insert que adicione en el campo log la sumatoria de los campos,
>>> por ej. insert into log_algo values (fecha, select c1+c2+c3.... from
>>> algo where <condicion>, usuario)
>>>
>>> Esto lo necesito asi, ya que si por a o b motivos se necesita cambiar
>>> la tabla original (se que no se deberia, pero recuerden que es un
>>> sistema que recien lo tomo y tiene sus errores) no me gustaria que los
>>> campos nuevos no aparezcan en este supuesto log.
>>>
>>> Bueno amigos espero sus comentarios o sugerencias y agradezco su
>>> atencion a este largo mensaje.
>>>
>>> Slds
>>
>> _________________________________________________________________
>> ¿Cuánto vale tu auto? Tips para mantener tu carro. ¡De todo en MSN
>> Latino Autos! http://latino.msn.com/autos/
>>
>>
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 1: para suscribirte y desuscribirte, visita
> http://archives.postgresql.org/pgsql-es-ayuda
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2006-11-13 20:30:32 Re: Postgre y windows
Previous Message Edwin Quijada 2006-11-13 19:51:13 RE: Desde Paraguay con Postgresql