数据库迁移 – Flyway:在单个事务中运行多个迁移

我一直在将Flyway视为数据库迁移工具.

我无法找到明确答案的一件事是:

我是否可以强制Flyway在单个事务中运行所有尚未应用的迁移,而不是让每个迁移都是自己的事务?

在开发环境中,这不是问题,但在生产环境中,您可能会从一个更新到下一个更新执行多次迁移,其中一个迁移失败会使数据库处于“半迁移”状态,其中一些迁移是承诺和一些不是 – 非常糟糕的事情.

解决方法是简单地填写单个文件中所需的所有SQL,但是存在以下问题:

>生产迁移和dev迁移最终会以不同的方式执行,因为您无法事先知道在dev环境中迁移的内容.我想你总是可以做一个干净的,然后是一个新的迁移,但这似乎违背了飞路设计关于增量迁移的精神.
>添加新更改后,校验和将不同.

Flyway还不支持这样的功能吗?是Liquibase还是其他任何迁移工具?

最佳答案 开箱即用没有这样的功能.这是一个很好的问题,我敢打赌,因为Flyway提供了每次迁移的事务边界 – 希望
Axel Fontaine会在技术/设计考虑因素上产生影响,导致这不是一个功能.

关于降级/失败,常见问题解答有thisthis.该政策归结为:

Maintain backwards compatibility between the DB and all versions of
the code currently deployed in production…. Have a well tested,
backup and restore strategy.

在我的情况下,我们已经使用Flyway近3年并且遵守引用的政策.在任何给定的部署中,我们可以针对许多数据库运行100次或更多次迁移,并且很高兴地说在生产中从未发生过任何不幸事件.这一切都归结为最大限度地减少发布过程中失败的机会.

我之前在一个小得多的项目中使用了Liquibase,除了提供回滚程序之外,我不记得任何这样的功能.

点赞