【问题标题】:What is the best way to remove repeatable scripts from Flyway Migrations从 Flyway 迁移中删除可重复脚本的最佳方法是什么
【发布时间】:2023-04-02 00:49:01
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: flyway


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。几个有趣的选择。我确实喜欢拥有独立的版本化脚本来删除该过程,但不确定我对将可重复脚本永远留在那里的感觉如何,即使它是空白的。感觉就像把杂物抛在脑后。编辑 schema_version 表的内容是什么感觉? drop proc 脚本可以删除对可重复脚本的所有引用(没有尝试过,所以不知道这是否可行)
    • 您是否需要通过运行版本 1 的脚本来重现数据库?如果没有,那么您可以随意使用 schema_version 表中保存的历史记录。我不建议这样做,因为您会丢失 flyway 为您创建的审计历史记录。您需要尝试如何实现它,因为 Flyway 可能会在运行时锁定 schema_version 表。我建议将记录复制到另一个表以保留历史记录
    猜你喜欢
    • 2017-03-16
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多