2012-08-12 50 views
7

我和我来到了这个情况:重试飞路刚刚在配置和充分理解迁徙路线的过程中失败的迁移

  • 我成功地配置一个新的项目,迁徙路线的工作。
  • 我成功迁移测试数据库从0版本1.0.3。
  • 迁移到版本1.0.4未能执行。 (我想补充一点,已经在那里了列,没有问题,到目前为止,我的坏)

但是,一旦我作出了相应的脚本进行必要的修改工作,迁徙路线一直显示此消息:

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”表:

  • 1st我删除了vers的条目离子1.0.4
  • 第二予设定“CURRENT_VERSION”字段为1版本1.0.3
  • 然后执行的飞路:迁移命令再次

在此之后,在迁移最后施加和显示成功信息,但我不太确定这是否是处理这种情况的正确方法。我不确定它是否有权自己修改'schema_version'表,因为我认为它只能由flyway自己修改。

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

有没有一种方式,以“重试”,以适用于飞行用一个失败的迁移,而不会由我自己修改“schema_version”表?

的任何命令,我不知道要完成这项任务?

回答

3

这是回答在FAQ:http://flywaydb.org/documentation/faq.html#repair

即将迁飞2.0将包括修复命令。此代码已被检入到SCM中。

注:与迁飞路线的元数据表这只交易。您仍负责清除迁移失败的其他任何影响。

更新:迁飞2.0已经正式发布。您可以在http://flywaydb.org

+0

这几乎覆盖我的疑问, 非常感谢你! – pablocmg 2012-08-13 14:51:23

+0

什么是“你仍然负责清理迁移失败的其他影响。”手段?我的意思是我需要执行哪些步骤来清理失败的表创建迁移。 – 2017-06-30 15:04:52

+0

这取决于什么迁移脚本。就像它掉落的东西一样,它不会再次成功地丢弃它! – Piro 2017-09-08 08:47:20

3

抓住它,我不知道这是否是一个好主意或没有,但你可以尝试做了修复()如果迁移()失败:

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(); 
}