【问题标题】:Can you control Liquibase updateSQL output by major release?你能控制主要版本的 Liquibase updateSQL 输出吗?
【发布时间】:2014-01-31 07:46:10
【问题描述】:

我们使用 liquibase 来生成数据库更改,但需要将这些脚本写入 SQL 文件,因为我们的数据库服务器既没有安装 Liquibase,也没有安装 JVM。

我们使用 updateSQL 命令创建进行更改所需的 DDL 脚本,但是如果我们首先(在我们的开发服务器上)运行“dropAll”,我们会为每个版本获得一个更改集。

有没有办法为一组变更集(即所有以前的版本)运行 Liquibase 定期“更新”,然后只为最后一个版本生成 updateSQL 输出?本质上,我们可以参数化我们的构建过程以指示我们的目标版本并自动为该版本生成 SQL 吗?

谢谢

【问题讨论】:

标签: liquibase


【解决方案1】:

我们有类似的设置。

我们处理这个问题的方式是我们有一个“集成”数据库,它始终保持最新的正式版本。

当我们有一个新的候选版本时,我们让 liquibase 针对该集成数据库运行 (updateSQL)。由于它在最后一个(或当前)版本上,updateSQL 只会写出新的候选版本和上一个版本之间的差异。

所以你有一个增量 ddl 需要应用才能从版本 x 到 y。

一旦发布候选版本,我们让 liquibase 也更新集成数据库。

【讨论】:

    【解决方案2】:

    有几种方法可以运行部分更改日志。

    如果您使用版本(changelog-1.0.xml、changelog-1.1.xml、changelog-2.0.xml)分解您的变更日志文件,然后有一个 的主changelog.xml,那么最简单您的解决方案可能只是运行 updateSql 并传入您想要的更改日志版本。如果要为整个数据库生成 sql,请运行“liquibase --changelogFile=master.changelog.xml updateSql”。如果您只想为 2.1 版生成 sql,请运行“liquibase --changeLogFile=changelog-2.1.xml updateSql”

    @Jens 的回答效果很好,这也是我经常建议的。例如,与上述选项相比,它的优势在于捕获通过合并补丁版本引入旧变更日志版本的新变更集。

    除此之外,您还可以使用contextpreconditions 来动态控制运行的内容。根据您的设置,可能有一些方法可以让这些设置适合您。

    最后,总是有extension system,您可以在其中编写自定义逻辑,了解如何解析和执行变更日志,以根据文件名或其他适合您的机制提取旧版本变更集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-26
      • 2014-02-06
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2015-09-01
      相关资源
      最近更新 更多