当前位置: 首页 > 知识库问答 >
问题:

迁移前的Flyway回调

阎经武
2023-03-14

我有一个flyway项目,在对数据库运行迁移之前,我想运行一个java回调来更改某些sql文件的名称。不幸的是,迁移首先针对数据库运行,然后调用回调来更改文件名。

这是我的回调类:

public class FooCallback extends BaseFlywayCallback {
    @Override
    public void beforeMigrate(final Connection connection) {
        //rename file from V_1_FooScript.sql to V_05172018_FooScript.sql
    }
}

但是在< code>schema_version表中,我看到以下条目:

description   type    script                checksum
FooScript     SQL     V_1__FooScript.sql    1473655428

它应该说

description   type    script                      checksum
FooScript     SQL     V_05172018_FooScript.sql    1473655428

如何让flyway在运行迁移之前更改文件名?

编辑1:所以看起来flyway正在运行迁移,然后执行回调以更改文件名,然后再次运行迁移,因为文件名已更改,但在尝试第二次运行时失败,因为脚本正在创建一个表,所以当它运行第二次时,它只是说“Foo表已经存在”。

共有1个答案

熊哲圣
2023-03-14

正如其他人所评论的,你的问题并不完全清楚。因为flyway递归地发现对模式的更改,所以在回调中更改文件名会导致第二次迁移。我想您的历史记录会告诉您,第一次迁移是在运行之前准备的,第二次迁移是运行期间准备的,然后两者都执行了。

看起来您正在运行Flyway的一个旧版本,并且您正试图用一个特定的版本号初始化一个模式。如果是这种情况,您可以避免回调,并通过记录的配置文件来执行:

版本化sql迁移的文件名前缀(默认值:V)版本化SQL迁移具有以下文件名结构:prefixVERSIONseparatorDESCRIPTIONsuffix,使用默认值可转换为V1 _ 1 _ _我的描述. SQL

请注意,在“FooScript.sql”之前只有一个下划线字符。要实现此目的,您还需要更改默认的 sql 迁移分离器。

 类似资料:
  • 问题内容: MyBatis迁移将每个SQL文件分为两部分: 一种用于向前迁移一个版本 一种用于迁移回一个版本 如何使用Flyway回滚版本? 问题答案: 尽管Flyway支持回滚(仅作为商业功能),但不鼓励使用它: https://flywaydb.org/documentation/command/undo 尽管撤消迁移的想法很好,但不幸的是,有时它在实践中会崩溃。一旦您进行了破坏性的更改(删除

  • 我们面临一个问题:假设一个开发人员在处理分支a的过程中提供了一个新的迁移版本,比如说V331,同时一个QA人员在另一个分支B的QA环境中进行QA。可能会出现qa环境已经有v331版本的情况,因为几个开发人员可能会在不同的时间在不同的分支上创建相同的版本号……更多的是qa经常在分支之间切换,这就是qa数据库变得混乱的原因,特别是表schema_version,这导致我们手动删除损坏的模式版本,解决旧

  • 我已成功地将spring boot配置为使用Flyway的新项目 随Postgres数据库从版本0001.0迁移到0008.0 我已在本地手动更改脚本,但flyway迁移失败。 错误消息示例: 注意:-我不想从表flyway_schema_history中删除脚本条目。

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出: 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。 但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。 迁移前的Flyway信息数据:

  • 我刚刚在配置和充分理解flyway的过程中遇到了这样的情况: 我已成功配置新项目以使用Flyway。 我已成功将测试数据库从版本0迁移到1.0.3。 无法执行到版本1.0.4的迁移。(我试图添加已经存在的列,到目前为止没有问题,是我的错。) 但是,一旦我对相应的脚本进行了必要的更改以使其工作,flyway就会不断显示这样的消息: 由于我不想恢复一个完整的转储并再次应用每一次迁移,只是为了使alte