问题 重试flyway失败的迁移


我正处于配置和充分理解flyway的过程中,我遇到了这种情况:

  • 我成功配置了一个与flyway一起工作的新项目。
  • 我成功地将测试数据库从版本0迁移到1.0.3。
  • 迁移到版本1.0.4无法执行。 (我试图添加已经存在的列,到目前为止没有问题,我的不好。)

但是,一旦我对相应的脚本进行了必要的更改,flyway就会继续显示以下消息:

 Current schema version: 1.0.4
 com.googlecode.flyway.core.migration.MigrationException: Migration to version 1.0.4 failed! Please restore backups and roll back database and code!

由于我不想恢复完整转储并再次应用每次迁移,只是为了使alter table脚本工作,我最终做的是对'schema_version'表的一些更改:

  • 第一,我删除了版本1.0.4的条目
  • 第二,我将版本1.0.3的'current_version'字段设置为1
  • 然后再次执行flyway:migrate命令

在此之后,最终应用了迁移并显示了成功消息,但是我不太确定这是否是处理这种情况的正确方法。我不确定它是否有权自行修改'schema_version'表,因为我认为它只能由flyway本身修改。

所以,在解释发生在我身上的事后,我的问题是:

有没有办法'重试'在flyway中应用失败的迁移,而不是自己修改'schema_version'表?

我不知道要执行此任务的任何命令?


2117
2017-08-12 16:29


起源



答案:


这在FAQ中得到了解答: http://flywaydb.org/documentation/faq.html#repair

即将推出的Flyway 2.0将包括修复命令。此代码已经检入SCM。

注意:这仅适用于Flyway的元数据表。您仍负责清除迁移失败的任何其他影响。

更新: Flyway 2.0现已发布。你可以抓住它 http://flywaydb.org


7
2017-08-13 08:26



这几乎掩盖了我的疑问,非常感谢你! - pablocmg
什么“你仍然有责任清理迁移失败的任何其他影响。”手段?我的意思是我必须采取哪些步骤来清理失败的表创建迁移。 - Piyush Kumar Baliyan
这取决于迁移脚本的功能。就像它掉落的东西一样,它不会再次成功掉落! - Piro


答案:


这在FAQ中得到了解答: http://flywaydb.org/documentation/faq.html#repair

即将推出的Flyway 2.0将包括修复命令。此代码已经检入SCM。

注意:这仅适用于Flyway的元数据表。您仍负责清除迁移失败的任何其他影响。

更新: Flyway 2.0现已发布。你可以抓住它 http://flywaydb.org


7
2017-08-13 08:26



这几乎掩盖了我的疑问,非常感谢你! - pablocmg
什么“你仍然有责任清理迁移失败的任何其他影响。”手段?我的意思是我必须采取哪些步骤来清理失败的表创建迁移。 - Piyush Kumar Baliyan
这取决于迁移脚本的功能。就像它掉落的东西一样,它不会再次成功掉落! - Piro


我不知道这是不是一个好主意,但如果migrate()失败,你可以尝试修复():

final Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setValidateOnMigrate(false);
flyway.setDataSource(dataSource());
try {
    flyway.migrate();
} catch (final Exception e) {
    logger.error("Flyway migration failed, doing a repair and retrying ...");
    flyway.repair();
    flyway.migrate();
}

3
2018-03-21 14:47