【发布时间】:2014-04-28 02:17:10
【问题描述】:
我有一个现有的生产数据库和一个具有一些架构差异的开发数据库。以前都没有使用过 Liquibase。我怎样才能实现以下目标:
- 计算生产和开发之间的差异。
- 将增量应用于生产,
- 最终得到 Liquibase 控制下的生产(和开发)模式。
【问题讨论】:
标签: database-migration liquibase
我有一个现有的生产数据库和一个具有一些架构差异的开发数据库。以前都没有使用过 Liquibase。我怎样才能实现以下目标:
【问题讨论】:
标签: database-migration liquibase
您将首先使用 generateChangelog 命令为开发数据库生成更改日志,记录在此:http://www.liquibase.org/documentation/generating_changelogs.html
当您生成变更日志时,Liquibase 还将创建并初始化两个数据库表(DATABASECHANGELOG 和 DATABASECHANGELOGLOCK),用于跟踪哪些变更集已应用于数据库。
接下来,您要区分两个数据库,并让 liquibase 使用 diffChangelog 命令将差异生成为单独的更改日志: http://www.liquibase.org/documentation/diff.html
差异变更日志可以按原样包含,也可以复制到现有的变更日志中。如果 diff 命令传递一个现有的更改日志文件,则新的更改集将附加到文件的末尾。
最后,您将更改日志部署到生产环境。
【讨论】:
这是我最终得到的结果($LIQUIBASE 扩展为为我正在使用的特定数据库配置的 Liquibase 命令行工具)。
根据生产数据库的当前状态生成基线变更日志:
$LIQUIBASE --url=$PROD_URL --changeLogFile=changeLog.xml generateChangeLog
将生产记录为与更改日志同步:
$LIQUIBASE --url=$PROD_URL --changeLogFile=changeLog.xml changeLogSync
计算开发和生产之间的差异,并将它们附加到更改日志文件中:
$LIQUIBASE --url=$PROD_URL --referenceUrl=$DEV_URL --changeLogFile=changeLog.xml diffChangeLog
使生产与开发同步:
$LIQUIBASE --url=$PROD_URL --changeLogFile=changeLog.xml update
将开发记录为与更改日志同步:
$LIQUIBASE --url=$DEV_URL --changeLogFile=changeLog.xml changeLogSync
【讨论】:
本教程的 5.3 部分回答了我猜的您的问题。
http://www.baeldung.com/liquibase-refactor-schema-of-java-app
这在 java 中使用了 maven,但我认为普通的 liquibase 命令也可以做到。
【讨论】: