我一直在看Flyway
作为数据库迁移工具。
我一直无法找到明确答案的一件事是:
我可以强制 Flyway 在单个事务中运行所有尚未应用的迁移,而不是让每个迁移都成为它自己的事务吗?
在开发环境中,这不是问题,但在生产环境中,您可能会执行从一次更新到下一次的多次迁移,其中一次迁移失败会使数据库处于“半迁移”状态,其中一些迁移是 promise 和一些没有 - 相当糟糕的事情。
一种解决方法是简单地将所有所需的 SQL 塞进一个文件中,但存在以下问题:
Flyway 仍然不支持这样的功能吗? Liquibase 或任何其他迁移工具?
最佳答案
没有开箱即用的功能。不过这是一个很好的问题,我敢打赌,因为 Flyway 提供了每次迁移的事务边界,我敢打赌它被考虑过 - 希望 Axel Fontaine将加入导致这不是功能的技术/设计考虑因素。
常见问题有this和 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,除了提供回滚程序外,我不记得有任何此类功能。
关于database-migration - Flyway:在单个事务中运行多个迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177556/