从 Flyway 迁移中删除可重复脚本的最佳方法是什么

问题描述 投票:0回答:2

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

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

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

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

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

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

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

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

flyway
2个回答
2
投票

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

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


0
投票

可重复迁移在所有其他迁移之后应用,因此我正在执行以下操作以避免出现空的可重复迁移文件:

  1. 添加标准迁移脚本
    • 删除您的存储过程(例如
      DROP PACKAGE ProcedureOne
    • SCHEMA_VERSION
      表中删除可重复迁移行(
      script
      列包含可重复脚本文件名,例如
      DELETE FROM T_SCHEMA_VERSION where "script"='R__ProcedureOne.sql'
  2. 删除可重复迁移文件(例如
    R__ProcedureOne.sql

运行Flyway时,操作将按照上面定义的顺序执行。

您的数据库不会保留

ProcedureOne
R__ProcedureOne.sql
曾经存在的信息,但您当前版本的代码仍然包含
DELETE FROM T_SCHEMA_VERSION
,这会指示您何时删除
ProcedureOne
(然后您可以拥有查看 Git 历史记录,了解此过程在删除之前的情况)。

© www.soinside.com 2019 - 2024. All rights reserved.