我有一个现有的数据库,并使用generateChangeLog command line创建了初始更改日志。这很好用: - )
但现在我希望开发人员使用他们已知/已经使用的所有工具/流程来开发数据库和代码,并使用脚本生成适当的增量变更集。
即:使用当前更改日志(属性文件中的changeLogFile)作为基本引用,对开发人员数据库的当前状态(属性文件中的url / username / password)执行diff。
似乎没有简单的方法可以做到这一点 - 我提出的最好的方法是:
liquibase --url=jdbc:mysql://localhost:3306/tempbase update
liquibase --referenceUrl=jdbc:mysql://localhost:3306/tempbase --referenceUsername=foo --referencePassword=baz diffChangeLog
liquibase changelogSync
但必须有更好的方法......
答案 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,是因为它还负责存储逻辑比较。