我最近才发现Flyway,在阅读和搜索它时,我遇到了以下博客文章:数据库模式演变与模式版本控制。
所以我想知道:
- 它所说的是否仍然正确(甚至在当时是正确的)
- 在使用flyway时应该如何处理这种情况。
编辑:
常见问题解答简要讨论了这一点(没有为上述问题提供解决方案)。
关于 dbdeploy 我不能说太多,但关于 flyway 的陈述是正确的。Flyway 对处理 SQL 脚本非常严格:
这种严格性并不是一件坏事,但不支持开箱即用的场景,比如有几个引入数据库修改的代码分支。
我们在这种情况下使用flyway,但我们必须做一些变通方法。首先,我们将所有 SQL 脚本分为两组:已经投入生产的脚本和尚未投入生产的脚本。所有不在生产中的脚本(无论它们在哪个分支上)都可以随时修改。为了支持这一点,我们以一种可以根据需要经常执行的方式编写脚本。其次,我们干预 flyway 的簿记,该簿记在名为 的表中完成SCHEMA_VERSION
。在每次飞行路线迁移之前,我们都会删除所有尚未投入生产的条目。在开发系统上启动迁移时,flyway 每次都会执行所有新脚本。但是,在生产系统上,新脚本在上线时只执行一次。