我在我的一个项目中集成了 flyway。我有很多迁移,迁移一个新的空数据库需要很长时间,主要是因为一路上还添加了种子数据。现在我想改变它。不幸的是,这些迁移已经被推送到生产环境(是的,在某些时候种子数据也被迁移到那里)。
我的想法是为当前版本的生产系统设置一个基线,然后清理旧的迁移:压缩模式迁移并将种子和测试数据移动到一个新位置,而不是部署到生产。
现在我的问题是:
- 如何在不影响所有其他数据库的情况下在我的生产数据库中设置基准?直接在数据库上调用
flyway baseline ...
?或者我可以使用任何一种特殊的迁移文件吗?也许将基线直接写入数据库的schema_version
表?这样的查询会是什么样子? - 我的最新迁移是
V4_6_3__...
。所以我的基线需要在V5__...
上吗?或者V4__...
是否足够并且包含具有相同主要版本的所有迁移? - 设置基线后,是否可以/保存添加、编辑和删除早于基线的迁移,而不会在下一个迁移任务中破坏我的生产数据库?
很抱歉提出基本问题,但在我看来,flyway 文档根本没有帮助......
提前致谢!
最佳答案
抱歉回复晚了。我做了一件与 @markdsievers 非常相似的事情建议:
我保证生产环境至少是版本 X
(flyway.setTarget(X)
)。然后我更改为一个新的模式版本表 (flyway.setTable('temporary_schema_version')
) 并运行一次迁移,删除了旧表。之后,我将架构版本表改回原始版本,将基线设置为版本 Y > X
并运行另一个删除临时表的迁移。
现在我可以编辑/压缩/删除版本低于 Y
的所有迁移,而不会导致我的生产部署崩溃。
关于java - 设置新基线后更改 flyway 迁移文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40637573/