我目前正在使用Flyway命令行工具来管理我们的脚本,这些脚本将通过我们的CI构建服务器触发的发布流程调用。
问题是我有274个可重复的迁移,包括包规范,包体,函数,过程,视图和物化视图。
当我运行迁移时,一切都按预期工作,执行迁移,然后进行任何已更改的可重复迁移,但是在下一个版本中我们要删除一个可重复迁移所维护的对象。例如,我们想要删除定义ProcedureOne的可重复脚本(即R__ProcedureOne.sql)。
要做到这一点,我将有一个新的迁移脚本(V3.1.5.1.01__DropProcedureOne.sql),但我也会删除可重复的迁移脚本,以便不再创建和维护该对象。
但是,执行flyway信息会显示状态为MISSING的R__ProcedureOne.sql脚本。
虽然我同意它缺失但是删除它是故意的行动,因为它不再需要反对被错放。
我知道迁移选项ignoreMissingMigrations但我认为使用它会带来风险,并且可能会掩盖真正丢失的文件。
关于如何最好地删除可重复脚本的一般指导是什么?
答案 0 :(得分:0)
我建议您只保留文件但将其设为空(即零字节)。或者在文件中添加注释,说明它所代表的对象已被删除。
至于实际删除它,您建议的另一个选项可能是更新可重复迁移以删除自身,然后再次更新为零长度。这具有能够被重放到空数据库中的优点;由于在版本化之后应用了可重复的迁移,因此不会删除示例中的过程。缺点是运行两次迁移。