当前位置: 首页 > 知识库问答 >
问题:

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

司马项明
2023-03-14

我有一个现有的数据库,并使用了generateChangeLog命令行来创建初始的ChangeLog。这很好:-)

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

即:使用当前更改日志(属性文件中的 changeLogFile)作为基本引用,对开发人员数据库的当前状态(属性文件中的 url/用户名/密码)执行差异。

似乎没有简单的方法来做到这一点——我想到的最好的方法是:

  1. 创建一个新的临时数据库。
  2. 使用liquibase通过覆盖连接url来初始化临时数据库(到当前更改日志中的内容):liquibase--url=jdbc:mysql://localhost:3306/tempbase更新
  3. 通过区分两个数据库,使用liquibase在更改日志中生成更改集:liquibase-引用URL=jdbc:mysql://localhost:3306/tempbase-引用用户名=foo-引用密码=baz差异日志
  4. 删除临时数据库。
  5. 同步变更集:liquibase变更同步

但一定有更好的方法...

共有2个答案

杨宏儒
2023-03-14

使用Liquibase Pro,您可以创建一个快照文件来完成同样的事情。然后使用快照文件来比较数据库更新。

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

李胤
2023-03-14

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

我建议最好的方法是,首先考虑让开发人员编写liquibase变更集。这是不同于他们可能习惯的工具,但它有一个巨大的优势,那就是他们会知道,他们想要做的改变是一个将使它一直到生产的改变。任何基于diff的流程(例如使用diffChangeLog)通常都会正确地猜测发生了什么变化,但并不总是如此,这些差异通常在生产中才被注意到。

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

 类似资料:
  • 我试图在命令提示符下执行命令:

  • 本文档详细说明了在1.4版本中所做的各个问题级别的更改。有关1.4中新增功能的叙述性概述,请参见 SQLAlchemy 1.4有什么新功能? . 1.4.26no release date orm [orm] [bug] ¶ 改进了使用连接表继承配置映射时生成的异常消息,其中两个表没有设置外键关系,或者设置了多个外键关系。消息现在是特定于ORM的,并且包括上下文, Mapper.inherit_c

  • 我正在尝试使用liquibase生成changeLog,首先捕捉数据库的当前状态。 环境详情: 操作系统:Windows 7 32 x86, Java JDK 1.7, mysql中的mysql jdbc驱动程序 液化酶2.0.5 我从命令行运行以下内容: 它运行良好,并生成了输出文件。但输出文件只包含: 并且在我的数据库上没有创建任何表(我期待用于跟踪的两个表)。 我错过了什么? 实验数字电视系

  • 我无法从Spring Boot项目的JPA实体生成初始更改日志。我的pom.xml如下: 下面是液化酶。属性文件: 当我运行命令时 它在DB[Full log on Pastebin]的

  • 我想在changelog文件中使用以下变更集标记数据库,以便将来回滚。当我应用这个变更集时,我在databasechangelog中注意到,前面的变更集也用标记更新了。 changelog文件中的变更集 下面是从databasechangelog表中提取的内容,function51是上一次运行的变更集 有人遇到过吗?我使用的是Liquibase 3.1.1 多谢了。

  • 该项目 为了寻找解决方案,我首先使用maven在执行LiquiBase:Update时将变更日志的SVN修订版存储到中。基于修订版号检索变更日志容易出错。 我已经花了一周的时间来寻找一个健壮的解决方案,在谷歌上搜索了几个小时,构建了几个测试用例(使用了适应的父级和具体的POM,部分使用了maven scm插件等等),但没有运气。最初,我计划使用LiquiBase:tag存储文件路径+修订,但只有当