Database migration 如何处理不断变化的飞行路线迁移?

Database migration 如何处理不断变化的飞行路线迁移?,database-migration,flyway,Database Migration,Flyway,我目前正在调查,作为替代,但无法在文件中找到以下问题的答案: 假设在生产中部署后,发现迁移X包含错误。回想起来,X本不应该按原样执行,但已经太晚了。但是,我们希望将迁移X替换为固定版本X',这样从头开始填充的数据库就不会出现相同的错误 在Liquibase中,您将修复原始变更集,并使用标记通知Liquibase该变更是有意进行的。Flyway中的是否有挂件,或者是否有其他机制可以实现同样的效果?取决于混乱的程度,您也可以 只需进行后续迁移即可更正(在新列名中键入错误,…) 如果这不是一个选项,

我目前正在调查,作为替代,但无法在文件中找到以下问题的答案:

假设在生产中部署后,发现迁移
X
包含错误。回想起来,
X
本不应该按原样执行,但已经太晚了。但是,我们希望将迁移
X
替换为固定版本
X'
,这样从头开始填充的数据库就不会出现相同的错误


在Liquibase中,您将修复原始变更集,并使用
标记通知Liquibase该变更是有意进行的。Flyway中的
是否有挂件,或者是否有其他机制可以实现同样的效果?

取决于混乱的程度,您也可以

  • 只需进行后续迁移即可更正(在新列名中键入错误,…)
  • 如果这不是一个选项,则必须手动修复迁移和DB,并发出Flyway.repair()以重新对齐校验和

如果已经投入生产,那么隐藏这个糟糕的更改有什么意义?每次在空数据库上重播(我假设CI运行)会很昂贵吗?使用已包含的迁移创建新的db基线。

尽管这违反了Flyway的API,但以下方法对我们来说效果良好:

在validate.sql之前编写一个
,修复校验和以匹配预期值,这样当Flyway实际验证校验和时,一切看起来都很好

例如:

-- The script xyz/V03_201808230839__Faulty_migration.sql was modified to fix a critical bug.
-- However, at this point there were already production systems with the old migration file.
-- On these systems, no additional statements need to be executed to reflect the change,
-- BUT we need to repair the Flyway checksum to match the expected value during the 'validate' command.
UPDATE schema_version
SET checksum = -842223670
WHERE (version, checksum) = ('03.201808230839', -861395806);

与Flyway的
repair
命令不同,这具有只针对一个特定迁移的优点。

我知道
repair
命令,但它只是对所有迁移的给定运行禁用任何校验和验证,对吗?我正在寻找修复单个变更集。