herramienta DIFF

From: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: herramienta DIFF
Date: 2012-05-23 07:23:00
Message-ID: CAHQFj71mYi4_w2W-Ske7EjnCs0r08fjrNkGMA6PzqQr3zwyQ5g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

hola lista, necesito una sugerencia basado en su experiencia, actualmente
estamos desarrollando una db en postgres, el equipo esta conformado por 3
personas, un analista-diseñador, un programador java-ejb y un gerente de
proyecto, el gerente pasa los requerimientos al analista, el analista
diseña las tablas y prueba la db con la ayuda de synfony 1.4 e insertar
datos de prueba (datos basura), el programador por necesidad puede crear
campos ( ej: necesita la resolución y/o formato de una imagen subida), el
analista puede accede a la db del programador comparar con su db, crear los
nuevos campos que definió en programador, pero también necesita copiar los
datos de algunas tablas como el menu dinámico que define el programador y
otras, cuando tiene una versión unificada el analista envía un informe con
los nuevos cambios y un backup completo de la db, el programador restaura
el bacuk completo y crea en el aplicativo java los cambios, cuando esta
lista una funcionalidad instala la versión en el equipo de gerente del
proyecto, este prueba e inserta datos mas acorde a la realidad, puede
cambiar el orden y/o nombre de menú, en conclucion hay 3 db que todos
los días cambian los datos, lo ideal es sincronizar semanalmente las db, no
estamos en la misma ciudad y ya intentamos con un servidor vps , pero es
muy lento con pgadmin, *que herramienta para comparar
y/o sincronizar schema y datos en prostgres me recomiendad ?* que se ajuste
a mis necesidades, no importa si compara las db en ejecución o un archivo
del backup, ya eh probado Datanamic (Schema/Data)Diff for PostgreSQL 2011,
pero tuve problemas con las secuencias , el problema de secuencias ya lo
solucione (solucion adjunta) , ademas es
una herramienta propietaria, la versión de prueba esta por vencer
y también me esta obligando a trabajar en windows y me gustaría tener una
herramienta libre (windows y/o linux), mas potente y tal vez aportar al
proyecto.

*solución al problema de secuencia , *
*definición: *
db_origen= base de datos con la estructura mas actualizada y datos
incompletos
db_destino= base de datos con la estructura des-actualizada y datos
completos
en la db_destino pruede haber datos importantes
mi objetivo es no perder ningún dato por eso cruzo los datos de la
db_destino a la db_origen para tener en db_origen todos los datos,
al sincronizar las dbs debido a que los id ya esta definidos no me
incrementa la secuencia, pero si inserta los datos
*solucion:*
* buscar en el catalogo el nombre de la tabla , campo y secuencia
(vista_actualizar_seq)
* crear un sql que busque el mayor valor del campo y asigne el setval a la
secuencia de ese campos (vista_actualizar_seq2)
* exportar los datos de la vista vista_actualizar_seq2 y ejecutar el script
generado.

CREATE OR REPLACE VIEW vista_actualizar_seq AS
SELECT c.oid, n.nspname AS esquema, c.relname AS tabla, a.attname AS
campo, format_type(a.atttypid, a.atttypmod) AS format_type,
pg_get_userbyid(c.relowner) AS propietario, ( SELECT
"substring"(pg_get_expr(d.adbin, d.adrelid), 1, 128) AS "substring"
FROM pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND
a.atthasdef) AS modificadores, ( SELECT
split_part("substring"(pg_get_expr(d.adbin, d.adrelid), 1, 128),
''''::text, 2) AS split_part
FROM pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND
a.atthasdef) AS seq
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_attribute a ON a.attrelid = c.oid
WHERE c.relkind = 'r'::"char" AND n.nspname <> 'pg_catalog'::name AND
n.nspname <> 'information_schema'::name AND n.nspname !~ '^pg_toast'::text
AND pg_table_is_visible(c.oid) AND a.attnum > 0 AND (( SELECT
"substring"(pg_get_expr(d.adbin, d.adrelid), 1, 128) AS "substring"
FROM pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef)) ~~*
'%nextval%'::text
ORDER BY n.nspname, c.relname;

CREATE OR REPLACE VIEW vista_actualizar_seq2 AS
SELECT ((((('SELECT pg_catalog.setval( "'::text ||
vista_actualizar_seq.seq) || '", ( select max('::text) ||
vista_actualizar_seq.campo::text) || ') from '::text) ||
vista_actualizar_seq.tabla::text) || ' ),true);'::text AS sql
FROM vista_actualizar_seq;

--
Raul Andres Gutierrez Alejo

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2012-05-23 14:56:32 RE: Consumir TXT Tabulado de Oracle para Postgresql
Previous Message Alejandro Carrillo 2012-05-22 22:00:45 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Recuperar borrado físico de registro.