Flyway: herramienta para migración de bases de datos

Cuando empezamos un nuevo proyecto, seguramente nos veremos en la necesidad de trabajar con una base de datos, y consecuentemente, tenemos que encontrar una manera de gestionar los cambios que necesitamos hacer sobre la misma. Por ejemplo:

  • Como creamos una base de datos desde cero?
  • Cuál es el estado de la base de datos en un determinado entorno?
  • Como saber si un script ya fue ejecutado?

Para ayudarnos con este tipo de problemas, existen las herramientas de migración de base de datos. Entre las más conocidas tenemos a Liquibase y Flyway, ambas son open-source.

Con este tipo de herramientas podemos crear bases de datos desde cero, saber en qué estado está cada base de datos de cada entorno, saber qué cambios se aplicaron en la base de datos , etc.

Flyway

Para este blog, nos enfocaremos en conocer mejor como funciona esta herramienta. No es que sea mejor que Liquibase, porque aunque tienen diferencias, ambas cumplen su función, y pueden integrarse fácilmente con Maven o Ant.

Entre las bases de datos soportadas tenemos a Oracle, SQL Server, MySQL, PostgreSQL, Derby, por citar a algunas.

Como funciona Flyway

Asumiendo que estamos en un escenario, donde tenemos una base de datos vacía, sobre la cual necesitamos empezar a migrar nuestros scripts

empty_db

Flyway para saber en qué estado está una base de datos, se basa en una tabla de metadatos, llamada schema_version. Al ejecutar Flyway, buscara esta tabla, y como en este escenario la base de datos esta vacía, la creara automáticamente.

En sucesivas ejecuciones de la herramienta, esta tabla será usada para mantener el estado de la base de datos.

schema version

Luego Flyway escanea la carpeta o directorio, que se le ha indicado como «source» de los scripts de migración, y los ira ejecutando sobre la base de datos.

Las migraciones están ordenadas basadas en su número de versión, y ese es el orden en el cual serán aplicadas. Si encuentra una migración cuyo número de versión es menor o igual al que está indicado como actual en la tabla schema_version, simplemente la ignora y continua con el siguiente script.

migrations

Luego podemos consultar la tabla de metadatos en la base de datos, y ver cómo lleva el control de los scripts ya migrados

eco_db

 

 

 

 

En este caso correspondiente a un proyecto real, usando PostgreSQL, el nombre dado a cada script se definió de la siguiente manera:

  • Fecha y hora de creación del script, como numero de versión del script
  • Seguido del separador del nombre de versión __
  • Comentario del objetivo del script

Por ejemplo: V201501081530__User_data_model.sql, donde V201501081530 es el numero de version del script, luego tenemos el separador (doble guion bajo __) que necesita Flyway para interpretar hasta que parte del nombre del script debe considerar como el numero de versión, y la tercera y última parte, el nombre del script.

Como integrar Flyway en nuestro proyecto

Esta herramienta puede ser configurada e integrarse fácilmente en nuestro desarrollo, y toda su funcionalidades están basadas en 6 comandos básicos: Migrate, Clean, Info, Validate, Baseline and Repair.

Asimismo, también puede ser integrada con otras herramientas como Maven, Gradle o Ant. Por ende si estamos usando Maven en nuestro proyecto, podemos crear las Maven tasks combinando estos comandos anteriormente mencionados, y facilitar nuestro trabajo, para ir corriendo las migraciones, limpiar la base completamente, etc, en nuestro entorno de desarrollo.

También podemos usar un API Java provista por la herramienta, que podemos usar para correr nuestros scripts de migración, o realizar tareas de DevOps en la base de datos.

En el caso presentado aquí, la decisión de usar Flyway fue basada en el hecho que para el desarrollo del proyecto, se usaba Java, Maven y PostgreSQL, y no teniamos demasiado tiempo para escribir los scripts de migración para la base de datos.

Esta herramienta, por la manera en que se integra y funciona, fue realmente práctica y resolvio las necesidades, fundamentalmente porque los scripts de migración se creaban como archivos de sentencias SQL, que podían ser ejecutadas directamente, sin necesidad de agregar ninguna notación en particular para que funcionaran con Flyway.

Links de referencia

Homepage

 

Get in Touch