lunes, 4 de octubre de 2010

Another PostgreSQL Diff Tool: Comparación de esquemas en PostgreSql.

Esta utilidad nos ayuda en la tarea de actualización de esquemas, la cual lo hace mediante la comparación de dos archivos de la estructura de la base de datos, como resultado se obtiene las sentencias necesarias (DDL) para actualizar la base antigua.

Another PostgreSQL Diff Tool (apgdiff), esta escrito en Java, es una aplicación para la linea de ordenes, su versión actual es la 2.2.1 y su tipo de licencia es MIT.

Su sintaxis de uso es:
java -jar apgdiff-<version> [options] <old_dump> <new_dump>
Básicamente necesita dos parámetros para ejecutarse, el primero es el dump del esquema de la base de datos original (podria ser la que esta en producción), el segundo es el dump del esquema de la nueva base de datos (la de desarrollo).

Ejemplo de uso:
jurasec@jurasec:~$ apgdiff test_produccion.sql test_desarrollo.sql

CREATE SEQUENCE clientes_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;

CREATE TABLE clientes (
id integer DEFAULT nextval('clientes_id_seq'::regclass) NOT NULL,
descripcion text,
contacto text
);

ALTER TABLE articulos ADD COLUMN fecha_registro timestamp without time zone DEFAULT now();

ALTER TABLE clientes ADD CONSTRAINT clientes_pkey PRIMARY KEY (id);

La base de datos original solo tienen una tabla:
CREATE TABLE articulos (
    id integer NOT NULL,
    descripcion text,
    precio numeric(15,2)
);

ALTER TABLE articulos ALTER COLUMN id SET DEFAULT nextval('articulos_id_seq'::regclass);
La salida puede ser redireccionada a un archivo:
jurasec@jurasec:~$ apgdiff test_produccion.sql test_desarrollo.sql > test_ddl_diff.sql
Apgdiff no soporta todas las sentencias DDL actualmente (por ejemplo los parametros SET, GRANT, REVOKE, CREATE TYPE, ALTER SEQUENCE, etc), por lo tanto hay que tener en cuenta cuales son las que si están soportadas, para evitar cualquier tropiezo. Puedes usar la opción --output-ignored-statements, para ver que sentencias fueron ignoradas por apgdiff al crear el archivo de las DDL de actualización.

Para Debian, Ubuntu y Gentoo, existen paquetes para instalarlo directamente desde sus repositorios, también puede ser descargado desde sourceforge.

Para más información visitar su página.