如何应对不断变化的 Flyway 迁移?

     2023-03-14     94

关键词:

【中文标题】如何应对不断变化的 Flyway 迁移?【英文标题】:How to deal with changing Flyway migrations? 【发布时间】:2015-11-05 07:43:18 【问题描述】:

我目前正在调查Flyway 作为Liquibase 的替代品,但无法在文档中找到以下问题的答案:

假设迁移X 在生产部署后发现包含错误。回想起来,X 不应该按原样执行,但已经太迟了。但是,我们希望将迁移 X 替换为固定版本 X',这样从头开始填充的数据库不会出现相同的错误。

在 Liquibase 中,您将修复原始变更集并使用 <validChecksum> 标签通知 Liquibase 该更改是有意进行的。 Flyway 中是否有 <validChecksum> 的挂件,或者实现相同的替代机制?

【问题讨论】:

【参考方案1】:

虽然它违反了 Flyway 的 API,但以下方法对我们来说效果很好:

编写一个beforeValidate.sql 来修复校验和以匹配预期值,这样当 Flyway 实际验证校验和时,一切看起来都很好。

一个例子:

-- The script xyz/V03_201808230839__Faulty_migration.sql was modified to fix a critical bug.
-- However, at this point there were already production systems with the old migration file.
-- On these systems, no additional statements need to be executed to reflect the change,
-- BUT we need to repair the Flyway checksum to match the expected value during the 'validate' command.
UPDATE schema_version
SET checksum = -842223670
WHERE (version, checksum) = ('03.201808230839', -861395806);

与 Flyway 的 repair 命令不同,这样做的好处是只针对一个特定的迁移。

【讨论】:

【参考方案2】:

如果它已经投入生产,隐藏这个糟糕的变化有什么意义?每次在空数据库上重播是否昂贵(我假设 CI 运行)?使用已包含该迁移的新数据库基线。

【讨论】:

【参考方案3】:

根据你的混乱程度你也可以

只需进行后续迁移以更正它(新列名中的错字,..) 如果这不是一个选项,您必须手动修复迁移和数据库并发出 Flyway.repair() 以重新对齐校验和http://flywaydb.org/documentation/command/repair.html

【讨论】:

我知道repair 命令,但这只会禁用所有迁移的给定运行的任何校验和验证,对吧?我正在寻找修复单个变更集。

如何使用 flyway 跳过特定的迁移?

】如何使用flyway跳过特定的迁移?【英文标题】:Howtoskipaspecificmigrationwithflyway?【发布时间】:2015-05-1417:49:41【问题描述】:我正在使用带有gradle的flyway,我已经在数据库控制台中手动运行了其中一个迁移,我想运行flyway,但告... 查看详情

flyway mysqldump迁移

...发布时间】:2013-03-0311:39:39【问题描述】:我越了解flyway如何进行数据库迁移,我就越喜欢它。我试图让flyway读取从mysqldump-d生成的迁移,但我偶然发现了一些奇怪的行为。首页上写着mysqldump导出的DDL可以在Flyway迁移中原样使用... 查看详情

如何从 Flyway 迁移名称中删除前缀?

】如何从Flyway迁移名称中删除前缀?【英文标题】:HowtoremoveprefixfromFlywaymigrationname?【发布时间】:2021-11-2303:04:46【问题描述】:默认情况下,Flyway在文件夹db/migration中搜索以“V”开头的迁移,例如:V1_1_0__init_schema.sql但是,我... 查看详情

最佳实践:使用后如何修改flyway迁移脚本

】最佳实践:使用后如何修改flyway迁移脚本【英文标题】:Bestpractice:Howtomodifyflywaymigrationscriptafterithasbeenused【发布时间】:2016-05-3101:37:40【问题描述】:我正在寻找以下案例的建议。我在生产环境中设置了flyway迁移脚本。在每次... 查看详情

使用 Flyway 迁移存储过程

...ithFlyway【发布时间】:2013-03-2705:48:50【问题描述】:应该如何使用像Flyway这样的数据库迁移工具来管理像存储过程这样的过程数据库代码?与DDL不同,我不希望看到对存储在多个数据库迁移文件中的存储过程的更改。如何在源代... 查看详情

如何在 flyway 中压缩/合并迁移

】如何在flyway中压缩/合并迁移【英文标题】:Howtosquash/mergemigrationsinflyway【发布时间】:2014-10-1919:13:07【问题描述】:假设我有从V1_1到V1_300的迁移脚本-这是一个相当大的数字,需要很长时间。但是有时会有一个版本-我可以从飞... 查看详情

如何手动清理针对数据库运行的最后一次 flyway 迁移

】如何手动清理针对数据库运行的最后一次flyway迁移【英文标题】:howdoImanuallycleanupthelastflywaymigrationthatranagainstadatabase【发布时间】:2017-04-2013:06:55【问题描述】:我想手动删除已针对数据库成功运行的flyway迁移。这是最后一次... 查看详情

如何在 SQL Server 上的 Flyway 中禁用单个迁移的事务

】如何在SQLServer上的Flyway中禁用单个迁移的事务【英文标题】:HowtodisabletransactionsforindividualmigrationsinFlywayonSQLServer【发布时间】:2020-03-1817:09:12【问题描述】:我的Flyway迁移在FlywayCommunityEdition6.0.8中失败并出现以下错误:Theproced... 查看详情

如何从 IntelliJ IDEA 中的模型类生成 Flyway 迁移脚本?

】如何从IntelliJIDEA中的模型类生成Flyway迁移脚本?【英文标题】:HowtogenerateFlywaymigrationscriptfrommodelclassinIntelliJIDEA?【发布时间】:2021-08-3002:05:16【问题描述】:在Java应用程序中,我有一个模型类,我想从中生成Flyway迁移脚本。... 查看详情

如何管理 Flyway 的变化发展?

】如何管理Flyway的变化发展?【英文标题】:HowtomanagedevelopmentofchangesinFlyway?【发布时间】:2021-11-0823:54:55【问题描述】:假设我们正在开发一项功能,并且需要一个新表。太棒了,我们做了一个Flyway条目,我们开始运行了!然... 查看详情

如何使用 Flyway 回滚迁移?

】如何使用Flyway回滚迁移?【英文标题】:HowtorollbackmigrationsusingFlyway?【发布时间】:2011-06-2423:07:13【问题描述】:MyBatis迁移将每个SQL文件分成两部分:一个用于向前迁移一个版本一个用于迁移回一个版本如何使用Flyway回滚版本... 查看详情

如何更改前一段时间应用的flyway迁移文件?

】如何更改前一段时间应用的flyway迁移文件?【英文标题】:Howtochangeflywaymigrationfilethatwereappliedawhileago?【发布时间】:2020-02-0522:31:28【问题描述】:问题:我们有2个迁移文件,它们使用postgresDB中的函数创建了表。这些表是在一... 查看详情

如何实现 flyway-play Java 迁移

】如何实现flyway-playJava迁移【英文标题】:HowtoImplementflyway-playJavaMigration【发布时间】:2016-09-2409:59:58【问题描述】:flyway-play(3.0.0)可以使用Java迁移脚本吗?SQL迁移工作正常,但是当我将示例Java迁移脚本放入app\\db\\migration\\V1... 查看详情

FlyWay 迁移脚本

...的架构是空的,只有一个创建flyway的表。但它也是空的。如何正确配置FlyWay?我的脚本有以下形式V1__20170918_Initial_structure.sql18:43:30,773INFO[stdout](ServerServiceThr 查看详情

如何回滚 Flyway Scala 中的迁移?

】如何回滚FlywayScala中的迁移?【英文标题】:HowtorollbackamigrationinFlywayScala?【发布时间】:2017-08-1823:49:55【问题描述】:我刚刚进行了迁移file.sql以将新表添加到数据库中,然后我运行了flywayMigrate命令sbtflywayMigrate。现在我意识... 查看详情

实战flyway迁移指南最佳实践(代码片段)

项目在多环境迭代开发过程中,数据库的表结构不断变更,在部署时,往往会出现数据库表结构未及时变更导致出现问题,耗费在表结构上的时间相当多,上线过程持续痛苦,代码有GIT/SVN来控制,数据库中的表版本也可以做到... 查看详情

如何将 Flyway 迁移与单个架构和多个项目一起使用

】如何将Flyway迁移与单个架构和多个项目一起使用【英文标题】:HowcaniuseFlywaymigrationwithsingleschemaandmultipleprojects【发布时间】:2018-09-2002:12:23【问题描述】:如何管理处理相同数据库架构的多个项目。每个项目中的Flyway迁移脚本... 查看详情

当不需要迁移时,如何让 flyway.cmd 使构建失败?

】当不需要迁移时,如何让flyway.cmd使构建失败?【英文标题】:HowdoIgetflyway.cmdtofailabuildwhennomigrationisnecessary?【发布时间】:2018-06-2102:18:35【问题描述】:我在Jenkins中构建了一个使用Flyway的管道。我想运行一个返回正退出代码的... 查看详情