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

Flyway:如何处理迁移文件名中的v1.x风格版本(例如1.2.0.a)?

符鸣
2023-03-14

目前,我们正在使用Flyway 2.0.3,并最终完成了升级到Flyway最新版本的功课。

我知道首先进入2.3.0的步骤。通过该步骤,我们调整了Flyway的版本模式。

现在我正在寻找一种使用以下命名模式迁移我们的sql迁移文件的方法:

V1_2_0_a__AddFileDescription-oracle.sql
V1_2_0_b__ModifyFileDescription-oracle.sql
...
V1_3_0_a__DoSomeStuff-oracle.sql

随着对非数字字符的支持的放弃,我收到了已知的错误com.谷歌代码.飞路.core.api.飞途例外:包含非数字字符的无效版本。只有 0..9 和 .是允许的。无效的版本: 1.2.0.a

有没有针对旧版本的最佳实践迁移指南
欢迎任何建议。谢谢,
J0er9

更新:按照建议重命名迁移文件并不能解决问题。对于重命名的迁移文件,sql文件的解析将成功。但在下一步,Flyway会从元数据表中读取已经应用的迁移(在我的例子中是“schema_version”)。这失败了,因为旧模式版本号仍然存在于数据库中。结果是

 org.flywaydb.core.api.FlywayException: Version may only contain 0..9 and . (dot). Invalid version: 1.2.0.a
at org.flywaydb.core.api.MigrationVersion.toBigInteger(MigrationVersion.java:258)
at org.flywaydb.core.api.MigrationVersion.tokenize(MigrationVersion.java:241)
at org.flywaydb.core.api.MigrationVersion.<init>(MigrationVersion.java:82)
at org.flywaydb.core.api.MigrationVersion.fromVersion(MigrationVersion.java:71)
at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory$2.mapRow(JdbcTableSchemaHistory.java:202)
at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory$2.mapRow(JdbcTableSchemaHistory.java:184)
at org.flywaydb.core.internal.jdbc.JdbcTemplate.query(JdbcTemplate.java:367)
at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.refreshCache(JdbcTableSchemaHistory.java:184)
at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.allAppliedMigrations(JdbcTableSchemaHistory.java:174)
at org.flywaydb.core.internal.info.MigrationInfoServiceImpl.refresh(MigrationInfoServiceImpl.java:131)
at org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:138)
at org.flywaydb.core.internal.command.DbValidate$2.call(DbValidate.java:126)
at org.flywaydb.core.internal.jdbc.TransactionTemplate.execute(TransactionTemplate.java:74)
at org.flywaydb.core.internal.command.DbValidate.validate(DbValidate.java:126)
at org.flywaydb.core.Flyway.doValidate(Flyway.java:267)

是否有某种修复逻辑?或者这可以通过Flyway.repair()调用来实现?如果我理解正确,它会从元数据表中擦除不再可用的迁移。在我的情况下,由于重命名,旧的迁移将不再可用。

共有1个答案

白彦
2023-03-14

将更改<code>V1_2_0_a__Foo。sql转换为V1_2_0_10__Foo。sql等不适合您吗?

编辑:如果您在数据库中有旧版本的记录,那么可以在将脚本重命名为数字模式的同时,将UPDATE重命名为模式历史表,以保持两者一致。尽管此时您可能最好重新确定生产数据库的基线,只考虑较低环境中的旧迁移。

此外,v2.0.3已经有六年历史了,没有直接迁移到当前v6.1的路径。有没有什么特别的原因让您以前没有升级到更高版本?

 类似资料:
  • 我目前正在研究Flyway作为Liquibase的替代方案,但在文档中无法找到以下问题的答案: 假设在生产环境中部署后发现迁移包含错误。回想起来,不应该按原样执行,但已经太晚了。但是,我们想用固定版本的替换迁移,这样从头开始填充的数据库就不会遭受相同的错误。 在 Liquibase 中,您将修复原始变更集并使用

  • 我想使用 Flyway 获取特定数据库的最新架构版本值。Flyway 中是否有函数可以在命令行中获取当前架构版本号? 我可以运行以下命令: 这为我提供了数据库的整个架构内容(缩短),如下所示: 我只对最后一个架构条目版本“1.5.9”值感兴趣。 我的环境如下: < li>Windows 7 < li>Flyway 3.0

  • 我当前的项目有几个Flyway迁移,用于将初始数据导入数据库。这个数据是方便的,特别是对于开发人员能够快速设置项目。生产数据通过一些批处理作业导入,具有较新的版本。 其中有些迁移相当大(~20MB),因此每次应用程序启动时,Flyway都要花费一些时间来计算迁移的校验和。这也是集成测试的一个问题,因为它们也需要更长的时间。 null 我还有什么其他选择?如果可能的话,我希望使用Flyway而不是手

  • 利用人工智能技术将输入照片按照风格照片进行风格迁移 风格迁移API调用示例代码 github地址: https://github.com/picup-shop Python PHP Java Objective-c import requests url = 'https://picupapi.tukeli.net/api/v1/styleTransferBase64' apikey = '你的

  • 我们中的两个人在不同的GIT分支中制作了一个迁移脚本。现在,我已经拉动了源开发分支,并更正了 GIT 合并问题,并将我的迁移脚本重命名为最后一个。因此,数据库的新初始化和从开发分支的版本迁移数据库将是可以的。 然而,我的本地测试数据库中有很多数据,所以我手动应用了我在GIT中引入的新迁移脚本。然而,我不能让flyway认为,一切都很好。 那么,我如何才能伪造迁移? 当我尝试迁移时,我收到以下错误:

  • 我们使用的是以前的1.7版本的flyway,正在尝试升级到2.3版本。新的flyway似乎不喜欢我们的迁移文件名的格式。是否有一种方法可以将飞行路线配置为使用这样的模式: 而不必重命名数百个预先存在的迁移文件以适应 图案?