Flyway:运行 单个事务中的多个迁移
Flyway: running multiple migrations in a single transaction
我一直在寻找 Flyway
作为数据库迁移工具。
我无法找到明确答案的一件事如下:
我可以强制 Flyway 运行 在单个事务中进行所有尚未应用的迁移,而不是让每个迁移成为它自己的事务吗?
在开发环境中,这不是问题,但在生产环境中,您可能会执行从一个更新到下一个更新的多次迁移,其中一个迁移失败会使数据库处于 'half-migrated' 状态,有些迁移已提交,有些未提交 - 这是一件很糟糕的事情。
一种解决方法是将所有 SQL 所需的内容简单地塞进一个文件中,但这样做存在问题:
生产迁移和开发迁移最终会以不同的方式执行,因为您无法提前知道开发环境迁移中的内容。我猜你总是可以做一个干净的然后一个新的迁移,但这似乎违背了关于增量迁移的 flyway 设计的精神。
一旦添加新的更改,校验和就会不同。
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,除了提供回滚程序外,我不记得有任何此类功能。
我一直在寻找 Flyway
作为数据库迁移工具。
我无法找到明确答案的一件事如下:
我可以强制 Flyway 运行 在单个事务中进行所有尚未应用的迁移,而不是让每个迁移成为它自己的事务吗?
在开发环境中,这不是问题,但在生产环境中,您可能会执行从一个更新到下一个更新的多次迁移,其中一个迁移失败会使数据库处于 'half-migrated' 状态,有些迁移已提交,有些未提交 - 这是一件很糟糕的事情。
一种解决方法是将所有 SQL 所需的内容简单地塞进一个文件中,但这样做存在问题:
生产迁移和开发迁移最终会以不同的方式执行,因为您无法提前知道开发环境迁移中的内容。我猜你总是可以做一个干净的然后一个新的迁移,但这似乎违背了关于增量迁移的 flyway 设计的精神。
一旦添加新的更改,校验和就会不同。
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,除了提供回滚程序外,我不记得有任何此类功能。