我们使用liquibase生成数据库更改,但需要将这些脚本编写为SQL文件,因为我们的数据库服务器既没有Liquibase,也没有安装JVM。
我们使用updateSQL命令创建进行更改所需的DDL脚本,但是如果我们(在我们的开发服务器上)运行一个' dropAll'首先,我们为每个版本设置一个更改集。
有没有办法定期运行Liquibase'更新'对于一组变更集(即所有先前版本),然后仅为最后一个版本生成updateSQL输出?基本上我们可以参数化我们的构建过程以指示我们所针对的版本并自动仅为该版本生成SQL吗?
由于
答案 0 :(得分:4)
我们有类似的设置。
我们处理这个的方式是我们有一个“集成”数据库,它始终保持最后的正式版本。
当我们有一个新的候选版本时,我们让liquibase针对该集成DB运行(updateSQL)。由于它是在最后一个(相应的当前)版本,updateSQL只会写出新版本候选版本和最后一个版本之间的差异。
所以你有一个delta ddl需要应用于从版本x到y。
一旦发布候选版本,我们让liquibase也更新集成db。
答案 1 :(得分:1)
有几种方法可以运行部分更改日志。
如果你使用版本(changelog-1.0.xml,changelog-1.1.xml,changelog-2.0.xml)分解你的更改日志文件,然后有一个主变更日志文件< include>',那么最简单的解决方案可能是运行updateSql传递所需的changelog版本。如果要为整个数据库生成sql,请运行“liquibase --changelogFile = master.changelog.xml updateSql”。如果要为2.1版生成sql,请运行“liquibase --changeLogFile = changelog-2.1.xml updateSql”
@Jens的答案运作良好,是我经常建议的。例如,与通过合并补丁版本中引入旧的changelog版本的上述新变更集相比,它具有优势。
除此之外,您可以使用context或preconditions来动态控制运行的内容。根据您的设置,可能有一些方法可以让这些方法适合您。
最后,总是存在extension system,您可以根据文件名或其他适合您的机制,编写有关如何解析和执行更改日志的自定义逻辑,以提取旧版本的更改集。