我想保持以数据库为中心的开发过程,其中数据库及其数据为王。我想首先在数据库中迭代更改,在数据库工具中播放。
一旦我对架构更改感到满意,我就转移到Java端,并希望使用数据库迁移来保持所有内容的同步。
鉴于上述情况,我可以做些什么来启用数据库中的迭代,然后提取迁移。我需要在整个项目生命周期中重复这个过程。是否有工具在当前的DB状态和最新的迁移之间进行区分?
我更喜欢Flyway的SQL中心,但之前我使用过LiquiBase,如果它启用了我的工作流程,我就会使用它。
更新:当然我应该问一下我能做的其他一些过程吗?我可以运行2个DB,1个由Flyway / LiquiBase管理,另一个是我的围栏,并在它们之间做一些差异。
答案 0 :(得分:1)
Liquibase不能做"差异"在更改日志文件和数据库之间,但它可以执行" updateSql"命令将输出将数据库从当前状态迁移到更改日志所需的SQL而不实际进行任何更改所需的SQL。
对于您正在查看的工作流程,最有效的方法是对数据库进行更改,并在更新的数据库和从初始更改日志中新更新的单独数据库之间运行diffChangeLog。 Datical在Liquibase之上有一些增强功能,可以更好地支持此类工作流程。
但是,我倾向于建议在changelog文件本身中迭代你的更改:附加一个changeSet,运行liquibase update,确保你的更改是好的,回滚并尝试不同的东西,否则重复。
通过启动更改日志中的更改,您知道最终将应用的更改正是您所做的更改。任何基于差异的操作都会尝试恢复您最初的操作,但可能并不总是完全正确。
注意:如果您更喜欢编写SQL而不是XML,JSON或YAML,Liquibase会支持formatted sql更改日志文件。