2017-10-10 109 views
1

我目前正在使用Flyway命令行工具来管理我们的脚本,这些脚本将通过我们的CI构建服务器触发的发布流程进行调用。什么是从Flyway迁移中删除可重复脚本的最佳方法

问题是我有274个可重复的迁移,覆盖包规格,包体,函数,过程,视图和物化视图。

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

要做到这一点,我会有一个新的迁移脚本(V3.1.5.1.01__DropProcedureOne.sql),但我也会删除可重复的迁移脚本,以便不再创建和维护该对象。

但是,执行飞路信息显示R__ProcedureOne.sql脚本的状态为MISSING。

虽然我同意它缺少,但它是一个故意的行动,删除它,因为它不再需要反对错位。

我知道migrate选项ignoreMissingMigrations,但我认为使用它会引入风险并可能掩盖真正缺少的文件。

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

回答

0

我建议你简单地保留文件,但使其为空(即零字节)。或者在文件中有注释,说明它所代表的对象已被删除。

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

+0

感谢您的回复。 一些有趣的选项。我确实喜欢让独立的版本化脚本放弃这个过程,但我不确定我是如何将永久性可重复脚本留在那里的,即使它是空白的。只是感觉就像留下了混乱。 编辑schema_version表的内容有什么感觉? drop proc脚本可以删除对可重复脚本的所有引用(未尝试过,因此不知道这是否可行) – cdavid15

+0

您是否需要通过运行版本1中的脚本来重现数据库?如果没有,那么你可以对保存在schema_version表中的历史记录采取一些自由。我不会推荐这个,因为你会失去flyway为你创建的审计历史。 您需要尝试如何实现它,因为Flyway可能会在运行时锁定schema_version表。我建议将记录复制到另一个表以保留历史记录 –

相关问题