flyway - 从 Flyway Migrations 中删除可重复脚本的最佳方法是什么

标签 flyway

我目前正在使用 Flyway 命令行工具来管理我们的脚本,这些脚本将通过我们的 CI 构建服务器触发的发布过程来调用。

问题是我有 274 个可重复的迁移,涵盖包规范、包主体、函数、过程、 View 和物化 View 。

当我运行 migrate 时,一切都按预期进行,迁移执行之后是任何更改的可重复迁移,但可以说在下一个版本中我们要删除一个可重复迁移维护的对象。例如,我们要删除定义 ProcedureOne 的可重复脚本(即 R__ProcedureOne.sql)。

为此,我需要一个新的迁移脚本 (V3.1.5.1.01__DropProcedureOne.sql),但我也会删除可重复的迁移脚本,这样就不会再次创建和维护该对象。

但是,执行 flyway info 显示状态为 MISSING 的 R__ProcedureOne.sql 脚本。

虽然我同意它丢失了,但删除它是一种故意的行为,因为它不再需要而不是被放错地方。

我知道迁移选项 ignoreMissingMigrations,但我认为使用它会带来风险并可能掩盖真正丢失的文件。

关于如何最好地删除可重复脚本的一般指导是什么?

最佳答案

我建议您只保留文件但将其清空(即零字节)。或者在文件中添加注释,说明它代表的对象已被删除。

至于实际删除它,您建议的另一个选项可能是更新可重复迁移以删除自身,然后再次更新为零长度。这具有能够重播到空数据库中的优点;由于在版本化之后应用了可重复的迁移,因此您的示例中的过程将不存在而被删除。缺点是运行两次迁移。

关于flyway - 从 Flyway Migrations 中删除可重复脚本的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46668426/

相关文章:

maven - 防止 Flyway Maven 插件下载旧的 slf4j jar

flyway - 如何让 flyway 重新运行迁移?

java - org.flywaydb.core.api.FlywayException : Unable to instantiate JDBC driver when my java class is triggered from ant taskdef

java - 我可以从一个 jar/多个模式加载 flyway 迁移吗

jdbc - 如何将 JDBC 驱动程序添加到 Flyway Gradle 插件

database - 使用 Flyway 交付修补程序

spring - FlywayDB 迁移删除

spring-boot - Spring Boot中Flyway集成(企业版)问题

database-migration - Flyway 3.0 到 4.0 升级失败(至少对于 Postgres 而言)

database - Hibernate 在架构更新时自动创建 SQL 迁移脚本以与 Flyway 一起使用