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

Flyway可重复迁移-在版本化迁移之前执行?

华献
2023-03-14

在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出:

在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。

但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。

迁移前的Flyway信息数据:---------------------------------------------------------------------版本|说明|安装在|状态|-----------------------------------1 |首字母||

和迁移日志:

[INFO] Database: jdbc:sqlserver://█:1433;authenticationScheme=nativeAuthentication;xopenStates=false;sendTimeAsDatetime=true;trustServerCertificate=false;sendStringParametersAsUnicode=true;selectMethod=direct;responseBuffering=adaptive;packetSize=8000;multiSubnetFailover=false;loginTimeout=15;lockTimeout=-1;lastUpdateCount=true;encrypt=false;disableStatementPooling=true;databaseName=█;applicationName=Microsoft JDBC Driver for SQL Server;applicationIntent=readwrite; (Microsoft SQL Server 11.0)
[INFO] Successfully validated 33 migrations (execution time 00:00.052s)
[INFO] SQLServer does not support setting the schema for the current session. Default schema NOT changed to dbo
[INFO] Current version of schema [dbo]: 20160504145200000
[WARNING] outOfOrder mode is active. Migration of schema [dbo] may not be reproducible.
[INFO] Migrating schema [dbo] with repeatable migration ProblematicView
[ERROR] Migration of schema [dbo] with repeatable migration ProblematicView failed! Changes successfully rolled back.
[INFO] SQLServer does not support setting the schema for the current session. Default schema NOT changed to dbo
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.550s
[INFO] Finished at: Mon May 16 12:40:49 CEST 2016
[INFO] Final Memory: 10M/243M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:4.0.1:migrate (migrate-¦) on project ¦-db: org.flywaydb.core.internal.dbsupport.FlywaySqlScriptException:
[ERROR] Migration R__ProblematicView.sql failed
[ERROR] ------------------------------------------------
[ERROR] SQL State  : S0001
[ERROR] Error Code : 207
[ERROR] Message    : Invalid column name 'newly_created_column'. /*<-- column created in V20160511163700000*/`

我做错什么了吗?
我使用flyway-maven-plugin 4.0.1(也在4.0上测试)具有以下属性:

Maven:
<cleanDisabled>true</cleanDisabled>
<outOfOrder>true</outOfOrder>
<table>schema_version</table>
<repeatableSqlMigrationPrefix>R</repeatableSqlMigrationPrefix>
<sqlMigrationPrefix>V</sqlMigrationPrefix>
Config file:
flyway.user=flyway
flyway.password=█
flyway.url=jdbc:sqlserver://█;databasename=█
flyway.locations=filesystem:flyway/upgrade/█`

//编辑1:

  1. 当outOfOrder设置为false时,迁移仍然失败,
  2. 干净的迁移似乎可行,但这并不能完全解决问题,
  3. 我注意到了一件事——当我把DB回滚到版本20160504143800000时,列表的末尾显示了可重复的迁移(FieleFipe信息),但是当20160504145200000个迁移成功地执行时,它们就在中间(如上面表)。但我不确定这是否与实际执行命令有关

共有2个答案

闽朝
2023-03-14

将outOfOrder属性更改为false是值得的,这样迁移只能按其定义的顺序进行。

如果您仍然看到问题,还可以将cleanDisabled设置为false,以便完全重建模式并报告所看到的情况。

以上两者都导致flyway以更确定的方式工作,因此允许其他人对评论事件的顺序更确定。

赫连正初
2023-03-14

它原来是Flyway:LINK中的一个bug——它影响到4.0-4.0.2版本,并在4.0.3(发行说明)中修复。

我可以确认,现在它在空数据库和现有数据库上都能正常工作。

 类似资料:
  • Flyway在其留档中说明了可重复迁移的一些用法: 用法:(重新)创建视图/过程/函数/包/... 我想在可重复迁移中创建一些触发器/函数,这些稍后会在版本迁移中引用,并应用到表中。 Flyway最后运行可重复的迁移,这意味着触发器在被引用时不存在。 是否可以在版本化迁移之前运行某些可重复的迁移? 是否不支持此用例,因为自动更新应用于表的触发器是不好的做法?

  • 在Spring启动应用程序中,我们在db.migrations资源文件夹中设置了版本化迁移 V1_0__create_table.sql V1_1__apply_roles.sql R__create_stored_proc.sql 版本化迁移(V1\u 0和V1\u 1)在应用程序启动时运行/验证,但似乎根本不会触发可重复迁移(R\u)。 我们有一个后迁移。sql,这似乎是触发的。 有人能帮我理

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

  • 报价飞行路线文件https://flywaydb.org/documentation/migration/repeatable : 可重复迁移没有版本。相反,每次校验和更改时,都会(重新)应用它们。 这对于管理数据库对象非常有用,这些对象的定义可以简单地在版本控制中的单个文件中维护。 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。可重复迁移按其描述的顺序应用。 这听起来

  • 我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?

  • 在我的spring-boot项目中,我使用了Flyway的开箱即用集成(),并且有一些迁移脚本,它们在启动时执行,并通过默认的-table进行管理。 该项目还使用了一个自带flyway迁移脚本的模块,这些脚本是以编程方式迁移的,并在其他表中跟踪迁移情况。 由于主项目的迁移需要对通过模块迁移创建的一些表进行操作,因此模块迁移需要在flyway-plugin迁移主项目脚本之前进行。 如何在主要应用的F