Flyway 或 LiquiBase 可以在当前数据库和最新迁移之间进行区分吗?

Posted

技术标签:

【中文标题】Flyway 或 LiquiBase 可以在当前数据库和最新迁移之间进行区分吗?【英文标题】:Can Flyway or LiquiBase diff between current database and latest migration? 【发布时间】:2018-11-25 23:28:05 【问题描述】:

我想保持以数据库为中心的开发流程,其中数据库及其数据为王。我想先在数据库中迭代更改,在数据库工具中播放。

一旦我对架构更改感到满意,我就会转向 Java 端,并希望使用数据库迁移来保持一切同步。

鉴于上述情况,我可以做些什么来在数据库中进行迭代,然后提取迁移。我需要在整个项目生命周期中重复这个过程。是否有工具可以区分当前数据库状态和最新迁移?

我更喜欢 Flyway 以 SQL 为中心,但我之前使用过 LiquiBase,如果它支持我的工作流程,我会使用它。

更新:当然我应该问我是否可以做一些其他的过程?我可以运行 2 个 DB,1 个由 Flyway/LiquiBase 管理,另一个由我的游戏围栏管理,并在它们之间做某种差异。

【问题讨论】:

【参考方案1】:

Liquibase 不能在变更日志文件和数据库之间进行“差异”,但它可以执行“updateSql”命令,该命令将输出将数据库从当前状态迁移到变更日志所期望的 SQL,而无需实际进行任何操作变化。

对于您正在查看的工作流程,最有效的方法是对您的数据库进行更改,并在更新的数据库和从起始更改日志中新更新的单独数据库之间运行 diffChangeLog。 Datical 在 Liquibase 之上进行了一些增强,以更好地支持这种类型的工作流程。

但是,我确实倾向于建议在更改日志文件本身中迭代您的更改:附加一个更改集,运行 liquibase 更新,确保您的更改是好的,如果不是,回滚并尝试不同的东西,否则重复。

通过在更改日志中启动更改,您知道最终将应用的更改正是您所做的更改。任何基于差异的操作都会尝试恢复您最初所做的,但可能并不总是完全正确。

注意:如果您更喜欢编写 SQL 而不是 XML、JSON 或 YAML,Liquibase 确实支持 formatted sql 更改日志文件。

【讨论】:

以上是关于Flyway 或 LiquiBase 可以在当前数据库和最新迁移之间进行区分吗?的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 或 Liquibase 可以生成更新脚本而不是直接更新数据库吗?

Flyway和liquibase在一起? [关闭]

Liquibase Autopick 可以像 Flyway 这样的新变更集文件吗?

是否可以将 Flyway、Liquibase 等数据库迁移工具与应用程序代码库集成?

Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较

Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较