如何使用 flyway 跳过特定的迁移?
Posted
技术标签:
【中文标题】如何使用 flyway 跳过特定的迁移?【英文标题】:How to skip a specific migration with flyway? 【发布时间】:2015-05-14 17:49:41 【问题描述】:我正在使用带有 gradle 的 flyway,我已经在数据库控制台中手动运行了其中一个迁移,我想运行 flyway,但告诉它忽略所有其他迁移版本之间的一个特定迁移版本。这可以做到吗?
【问题讨论】:
【参考方案1】:你必须稍微修改一下才能让它工作,所以我不推荐这种方法,但它会在紧要关头工作。
我只用 Maven 测试过这个,但我很确定它也适用于 Gradle。
迁移到您手动应用的版本之前的版本
# Assuming you applied 01.002 manually
$ mvn flyway:migrate -Dflyway.target=01.001
为您应用的脚本插入一行
-- Make sure these vals closely replicate those from other rows
insert into schema_version( installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success)
values ( 2, '01.002', 'static_data', 'SQL', 'V01/V01.002__static_data.sql', null, 'username', current_timestamp, 0, true );
修复schema_version
校验和
$ mvn flyway:repair
应用其他迁移
$ mvn flyway:migrate -Dflyway.validateOnMigrate=false -Dflyway.outOfOrder=true
那里的两个-D
属性可能不需要,这取决于您是否得到insert
正确与否。 Flyway 可能不同意您的脚本描述,例如,即使校验和现在是正确的。
【讨论】:
有时不需要插入精心设计的insert
(例如,如果您的升级脚本在添加现有列或删除已删除的表时失败)。只需通过设置success = 1
允许 Flyway 失败并修复最新线路。您可以在更新脚本的开头使用垃圾进行安全失败(防止进一步可能的危险操作)。只需在flyway:repair
之前清除垃圾【参考方案2】:
不推荐但如果你仍然想:
1) 运行flywayMigrate,让迁移失败。 2) 手动更新该特定版本迁移的 flyway 元表(成功列)。 3) 再次运行 flywayMigrate。 4) 完成,flyway 现在将开始下一个版本的迁移。
【讨论】:
像魅力一样工作。谢谢!【参考方案3】:从版本 7 开始,您可以将其直接添加到您的 Maven 或 Grade 文件中
Gradle - 跳过
flyway
skipExecutingMigrations = true
Maven - 跳过
<configuration>
<skipExecutingMigrations>true</skipExecutingMigrations>
</configuration>
Documentation Reference Skip
Gradle - 樱桃采摘
flyway
cherryPick = '2.0'
Maven - 樱桃采摘
<configuration>
<cherryPick>2.0</cherryPick>
</configuration>
Documentation Reference Cherry Pick
【讨论】:
请注意,参数“skipExecutingMigrations”是 Teams 版本的功能。这意味着您必须付费才能使用此功能。以上是关于如何使用 flyway 跳过特定的迁移?的主要内容,如果未能解决你的问题,请参考以下文章