如何使用liquibase diffChangeLog以当前更改日志作为参考(生成增量更改集)

Ian*_*ers 11 liquibase

我有一个现有的数据库,并使用generateChangeLog命令行来创建初始更改日志.这很好用:-)

但现在我希望开发人员使用他们已知/已经使用的所有工具/流程来开发数据库和代码,并使用脚本生成任何适当的增量更改集.

即:使用当前更改日志(属性文件中的changeLogFile)作为基本引用,对开发人员数据库的当前状态(属性文件中的url/username/password)执行diff.

似乎没有简单的方法可以做到这一点 - 我提出的最好的方法是:

  1. 创建一个新的临时数据库.
  2. 使用liquibase通过覆盖连接URL来初始化临时数据库(当前在更改日志中): liquibase --url=jdbc:mysql://localhost:3306/tempbase update
  3. 使用liquibase通过区分两个数据库在更改日志中生成变更集: liquibase --referenceUrl=jdbc:mysql://localhost:3306/tempbase --referenceUsername=foo --referencePassword=baz diffChangeLog
  4. 删除临时数据库.
  5. 同步变更集: liquibase changelogSync

但必须有更好的方法......

Nat*_*and 2

你是对的,liquibase 无法将变更日志文件与数据库进行比较。唯一真正的选择是将您的开发人员数据库与实际的 liquibase 管理的数据库或至少一个临时创建的数据库进行比较。

我建议更好的方法是首先考虑将开发人员转移到编写 liquibase 变更集。它与他们可能习惯的工具不同,但它有一个巨大的优势,那就是他们知道他们想要做出的改变将使其一路投入生产。任何基于 diff 的流程(例如使用 diffChangeLog)通常都会正确猜测更改的内容,但并非总是如此,并且这些差异通常在投入生产之前不会被注意到。

Liquibase 具有各种功能,例如格式化的 SQL 更改日志,旨在使开发人员从直接针对数据库工作过渡到通过 Liquibase 跟踪更改,因为一旦实现这种过渡,许多事情就会变得容易得多。

  • 尽管我很欣赏全力使用 liquibase 是一件好事,但始终存在支持问题 - 最好一次采取一步,而不是尝试强制实施大规模流程变更。在 liquibase 中添加“createChangeSet”命令应该相当简单: 1. 运行当前变更日志以使用 sqlite 等构建内存数据库。 2. 将其与属性中提到的数据库进行比较,以使用现有 api 生成变更集。3.删除内存数据库。可惜我没有资源来实现这一点...... (3认同)
  • @Nathan Voxland,这个功能不存在真的很不幸,我两天前开始使用 liquibase 为此目的,现在我发现我不能做如此微不足道的事情。 (2认同)