Control de versiones de bases de datos PostgreSQL con apgdiff

Se liberó una versión de la base de datos y se puso esa versión en producción y luego se hicieron modificaciones estructurales en desarrollo, pero fueron tantos que no se sabe con exactitud lo que se cambió”, esto casi seguro nos ha pasado a varios. Es decir un escenario muy común es tener una versión de la base de datos en producción y otra en desarrollo. Para los que trabajan con PostgreSQL (donde me incluyo :D), existen algunas herramientas para llevar el control de las versiones, personalmente he utilizado apgdiff, la cual esta desarrollada en java y es bien sencilla de utilizar, en resumen lo que hace es analizar dos script de bases de datos PostgreSQL y retorna las diferencias entre el primero y el segundo, donde esas diferencias son las que se aplican  para llevar a cabo los cambios en la base de datos. Ejemplificando el uso de apgdiff:Como siempre para los ejemplos utilizo DellStore2, lo primero que se hace  es tener una backup inicial de la estructura de la base de datos, esta sería la estructura que tengo en producción:

pg_dump --host localhost --port 5432 -U postgres  --format plain --schema-only  -f  tmp/dellv1.sql dell

Luego en desarrollo modifico la base de datos agregando los objetos que necesite en este caso se agregaron un esquema, una tabla dentro de ese esquema y una función en plpgsql al esquema public, luego realizamos un backup de esa estructura con los cambios.

pg_dump --host localhost --port 5432 -U postgres  --format plain --schema-only  -f  tmp/dellv2.sql dell

Una vez exportada la bases de datos modificada se le dice al apgdiff que detecte los cambios realizados para aplicarlos en producción, ejemplo:


java -jar apgdiff-2.4.jar dellv1.sql dellv2.sql > cambios.sql

y se obtiene el archivo cambios.sql con el siguiente contenido:

CREATE SCHEMA esquema2;

SET search_path = public, pg_catalog;

CREATE OR REPLACE FUNCTION funcion1() RETURNS boolean
LANGUAGE plpgsql
AS $$begin
return true;
end;$$;

SET search_path = esquema2, pg_catalog;

CREATE TABLE tabla1 (
columna1 boolean,
column2 text
);

Con ese script cambios.sql luego lo podemos aplicar con los cambios nuevos a producción y listo :D, aclarar que aquí solo se guardan los cambios estructurales, no de datos, por si agregamos tablas nuevas con nomencladores se deben exportar dichos valores, y aplicarlos también.   Como ven es sencilla de utilizar y muy útil apgdiff.

saludos y nos vemos en otra 😀

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s