MyBatis migrations splits each SQL file into two sections:
- One for migrating forward one version
- One for migrating back one version
How does one roll back versions using Flyway?
MyBatis migrations splits each SQL file into two sections:
How does one roll back versions using Flyway?
This is supported since Flyway 5.0. Sadly it's a commercial only feature though.
https://flywaydb.org/documentation/command/undo
I've found the best way to do this is to just wipe the database clean, and migrate forward to the specific version that you wanted to revert back to.
As the FAQ suggests rollback scripts are nice in theory, but some migrations just can't be rolled back. (e.g. if a table is dropped, restoring the table DDL is easy, but restoring the data it contained can be difficult.)
I assume you need a rollback strategy, when e.g. a partner fails at production stage and his deployment is essential for your release.
You could name your flyway SQL scripts like these:
V< YourReleaseNumber >.000_< description >.sql
Now you can leave
V< YourReleaseNumber >.998_rollback.sql for rollback
and make V< YourReleaseNumber >.999_reenroll.sql to reenroll.
In your CI/CD Environment you need 2 more Jobs (manually triggered) after your deployment job. One for rollback, which runs the rollback process including flyway migrate. Other for reenroll.
You just have to care for the target configuration in flyway.
For your deployment job your target should be < YourReleaseNumber >.997
For your rollback job < YourReleaseNumber >.998
When you start a new release, make sure you won't run the rollback/reenroll script of the old release.
As said before a well tested, backup and restore strategy is the recommended solution.
(sry for bad english)
Found the answer in the FAQ: