Skip site navigation (1) Skip section navigation (2)

Despues de mucho batallar me salio el dicho log de elimanados

From: Marcelino Guerrero <mguerreroh(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Despues de mucho batallar me salio el dicho log de elimanados
Date: 2006-11-24 16:56:52
Message-ID: 45672454.8030009@gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Amigos,

Luego de mucho batallar me termine con el dicho log de registros eliminados, lo adjunto por si alguno de Uds lo pudiera 
necesitar y también si lo pudieran mejorar, aun hay un detalle que no me gusta, pero no tengo otra, quizás mas adelante 
me de mas tiempo y lo mejoro o alguno de Uds. lo puede hacer.

1.- Antes de eliminar cualquier registro o registros, necesito copiarlo a un esquema eliminados, donde deberá de existir 
una tabla con el mismo nombre de la tabla de donde se desea eliminar, pero con el prefijo "log_".

2.- La estructura del archivo los es sencilla:
	ord serial, para saber el orden.
	seq int4, es una secuencia para saber donde empieza el registro y donde termina
	campo varchar, aquí se grabara el nombre del campo
	contenido text, el contenido del campo.
	usuario varchar, el usuario que elimino el registro
	f_borrado timestamp, por defecto now()
3.- Los parámetros a enviar son:
	- tabla, nombre de la tabla
	- campo, que servirá para definir que registro o registros se eliminara
	- valor del campo, el valor del anterior
	- usuario, usuario que elimina el registro
	- campo id del detalle, en caso que se elimine varios registros se deberá de enviar un campo que identifique a cada uno 
de los registros en forma individual, hay que indicar que este es el nombre del campo mas no el valor, si fuera el caso 
de que se elimine un registro de un maestro osea un solo registro, se podría repetir el del "campo".

Saludos a todos y espero que esta función pueda ser de utilidad a alguna persona de la lista, agradeceré si pudieran 
comentarme si la perfeccionan, mejoran o le encuentran algún inconveniente.

Atte
Marcelino

CREATE OR REPLACE FUNCTION call_log("varchar", "varchar", "varchar", "varchar","varchar")
   RETURNS void AS
$BODY$

DECLARE
--  $1 tabla
--  $2 campo para el where
--  $3 valor del campo para el where
--  $4 usuario
--  $5 campo id del detalle
     princip RECORD;
     mviews RECORD;
	xcant int4;
	xcont int4;
	valor_campo2 varchar;
	nureg int2;
BEGIN
     FOR princip IN execute 'select count(' || $2 || ') as cant from ' || $1 || ' where ' || $2 || ' = ' || 
quote_literal($3) LOOP
         xcant = princip.cant;
     END LOOP;

     xcont = 1;
     nureg = 0;
     WHILE xcont <= xcant LOOP
           FOR princip IN execute 'select campo[' || xcont || '] from (select array(select ' || $5 || ' from ' || $1 || 
' where '
                                   || $2 || ' = ' || quote_literal($3) || ') as campo) as x' LOOP
               valor_campo2 = princip.campo;
               nureg = nureg + 1;
               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
                       execute 'insert into eliminados.log_' || $1 || ' (seq,campo,contenido,usuario) values(' || nureg 
|| ',' || quote_literal(mviews.campo)
                       || ', (select ' || mviews.campo || ' from ' || $1 || ' where ' || $2 || ' =' || quote_literal($3) ||
                       ' and ' || $5 || ' = ' || quote_literal(princip.campo) || '),' || quote_literal($4) || ')';
               END LOOP;


           END LOOP;
           xcont = xcont + 1;
     END LOOP;
     RETURN;
END$BODY$
   LANGUAGE 'plpgsql' VOLATILE;



Responses

pgsql-es-ayuda by date

Next:From: Sistemas C.M.P.Date: 2006-11-24 16:56:57
Subject: Obtener el nombre del host con plpgsql
Previous:From: Alvaro HerreraDate: 2006-11-24 16:54:52
Subject: Re: Result?==?iso-8859-1?Q?ado extrañ?==?iso-8859-1?Q?o en query a tablas pg_attribute, pg_class, pg_tables

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group