【发布时间】:2017-03-03 19:39:03
【问题描述】:
我一直将Flyway 视为数据库迁移工具。
我无法找到明确答案的一件事是:
我可以强制 Flyway 在单个事务中运行所有尚未应用的迁移,而不是让每个迁移成为自己的事务吗?
在开发环境中这不是问题,但在生产环境中,您可能会执行从一个更新到下一个更新的多次迁移,其中一个迁移失败会使数据库处于“半迁移”状态,其中有些迁移已提交,有些则未提交 - 很糟糕。
一种解决方法是简单地将所需的所有 SQL 塞进一个文件中,但这样做存在一些问题:
生产迁移和开发迁移最终会以不同的方式执行,因为您无法提前知道开发环境中的迁移会发生什么。我想您总是可以先进行一次干净的迁移,然后再进行一次新的迁移,但这似乎与增量迁移方面的 flyway 设计精神背道而驰。
添加新更改后校验和将有所不同。
Flyway 还不支持这样的功能吗?是 Liquibase 还是其他迁移工具?
【问题讨论】:
-
Liquibase 尝试运行事务中的每个 changeSet。可能您可以使用 updateSql 命令生成 sql 文件并对其进行后处理以设置所需的事务行为,然后使用某些工具应用它。可以为 dev/prod 实施此管道以避免特定于 prod 的问题。
标签: database-migration liquibase flyway