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

时间:2014-06-02 20:18:00

标签: liquibase

我有一个现有的数据库,并使用generateChangeLog command line创建了初始更改日志。这很好用: - )

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

即:使用当前更改日志(属性文件中的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
  6. 但必须有更好的方法......

2 个答案:

答案 0 :(得分:0)

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

我建议更好的方法是考虑将开发人员转移到作者liquibase changeSets。这是他们可能使用的不同工具,但它具有巨大的优势,他们将知道他们想要做出的改变将是一直到生产的方式。任何基于差异的过程(例如使用diffChangeLog)通常都会猜测发生了什么变化,但并非总是如此,这些差异通常直到投入生产才会被注意到。

Liquibase具有各种功能,例如formatted SQL changelogs,旨在从直接针对其数据库工作的开发人员转换到通过Liquibase跟踪更改,因为一旦转换完成,许多事情变得更加容易。

答案 1 :(得分:0)

使用Liquibase Pro,您可以创建完成相同任务的快照文件。然后使用快照文件比较您的数据库更新。

https://www.liquibase.org/documentation/snapshot.html 我之所以提到Pro,是因为它还负责存储逻辑比较。