Flyway:运行 单个事务中的多个迁移

Flyway: running multiple migrations in a single transaction

我一直在寻找 Flyway 作为数据库迁移工具。

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

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

在开发环境中,这不是问题,但在生产环境中,您可能会执行从一个更新到下一个更新的多次迁移,其中一个迁移失败会使数据库处于 'half-migrated' 状态,有些迁移已提交,有些未提交 - 这是一件很糟糕的事情。

一种解决方法是将所有 SQL 所需的内容简单地塞进一个文件中,但这样做存在问题:

Flyway还不支持这个功能吗? Liquibase 或任何其他迁移工具?

没有开箱即用的功能。不过,这是一个很好的问题,我敢打赌,因为 Flyway 提供了每次迁移的事务边界,所以有人考虑过这个问题——希望 Axel Fontaine 会提出导致这不是一个功能的技术/设计考虑因素。

FAQ 有 this and this 关于降级/失败的说法。该政策归结为:

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,除了提供回滚程序外,我不记得有任何此类功能。