Flywayes una herramienta open-source para migrar entre base de datos.

Es una herramienta muy sencilla de usar que puede usars desde línea de comandos, desde su API Java, o desde Maven y Graddle.

Además ofrece Plugins para herramientas como Spring Boot, Grails, Paly, SBT, Grunt,…

Soporta un gran número de bases de datos: Oracle, SQL Server (including Amazon RDS and Azure SQL Database, DB2, MySQL (including Amazon RDS, Azure Database & Google Cloud SQL), MariaDB, PostgreSQL (including Amazon RDS, Azure Database, Google Cloud SQL & Heroku),Redshift, CockroachDB, SAP HANA, Sybase ASE, H2, HSQLDB, Derby and SQLite.

Sus comandos son: Migrate, Clean, Info, Validate, Undo, Baseline and Repair.

Veamos cómo se usa desde línea de comandos:

Una vez descargada y descomprimida la herramienta (descargar) configuraré el fichero %FLYWAY%/conf/flyway.conf por ejemplo:

En el directorio %FLYWAY%/sql/ crearé un SQL (V1__Create_person_table.sql) (prefijo V1__)

Y desde %FLYWAY%/ ejecutaré >flyway migrate

Si todo ha ido bien veré:

Flyway crea una tabla flyway_schema_history en la que va almacenando el historial de migraciones, por tanto sabe los scripts que he ejecutado (aquí se explica su funcionamiento: https://flywaydb.org/getstarted/how).

Tras esto podría hacer una segunda migración, en este caso haré los INSERTs:, al directorio /sql le añado el fichero V2__Add_people.sql: (fijaos en el prefjjo V2__)

Y ejecuto:

Flyway detecta que el segundo script no se ha lanzado y lo ejecuta:

También puedo ejecutar flyway info que me da info sobre el estado de la migración:

Con Flyway también puedo hacer UNDO de migraciones, para esto crearé un fichero con el prefijo U (+ el número de la versión a la que hacer UNDO)__

En el ejemplo previo:

U2__Add_people.sql: DELETE FROM PERSON;

Y

U1__Create_person_table.sql: DROPTABLEPERSON;

Para lanzar el UNDO >flyway undo

que como resultado da:

Y con el info:

Flyway también puede usarse desde Maven:

Primero configuraré el plugin de Maven:

En este caso crearé un directorio src/main/resources/db/migration donde iré poniendo mis scripts (src/main/resources/db/migration/V1__Create_person_table.sql)

Lo ejecutaré con:

Flyway tiene 3 versiones, una Community con licencia Apache2 y 2 comerciales: