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

pg_dump

From: Raúl Andrés Duque <raulandresduque(at)hotmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: pg_dump
Date: 2006-11-27 14:04:36
Message-ID: BAY135-DAV87121E5587E7094EE835DBAE60@phx.gbl (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Cordial Saludo.

Tengo una duda sobre el pg_dump.

Cuando lo realizo y en ese momento estan transacciones en proceso ... qué 
pasa?
1. Bloquea?
2. Evita actualizaciones mientras se jecuta?
3. pueden quedar transacciones parciales en el archivo generado?

Atentamente,

RAUL DUQUE
Bogotá, Colombia

----- Original Message ----- 
From: "Marcelino Guerrero" <mguerreroh(at)gmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Friday, November 24, 2006 11:56 AM
Subject: [pgsql-es-ayuda] Despues de mucho batallar me salio el dicho log de 
elimanados


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;



---------------------------(fin del mensaje)---------------------------
TIP 10: visita nuestro canal de IRC #postgresql-es en irc.freenode.net


In response to

Responses

  • Re: pg_dump at 2006-11-27 14:19:14 from Alvaro Herrera
  • Re: pg_dump at 2006-11-27 14:20:27 from Martin Marques

pgsql-es-ayuda by date

Next:From: Alvaro HerreraDate: 2006-11-27 14:15:29
Subject: Re: numrow
Previous:From: Miguel Bernilla SánchezDate: 2006-11-27 14:03:26
Subject: Re[2]: numrow

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