8

我实际上在命令行中使用 Windows 上的 Liquibase,并尝试创建一个表示两个数据库之间差异的 sql 脚本。不幸的是,我只得到 xml 文件作为回报。你能帮助我吗 ?

我的命令行:

liquidbase.bat 
   --driver=com.mysql.jdbc.Driver 
   --url=jdbc:mysql://localhost:3306/base1 
   --username=root 
   diffChangeLog 
   --referenceUrl=jdbc:mysql://localhost:3306/base2 
   --referenceUsername=root 
> test.sql

我在其他论坛上看到过类似的问题,但他没有得到很好的答案(http://forum.liquibase.org/topic/convert-changelog-xml-file-into-sql-file)。我还看到了一些用于从 updateSQL cmd 获取 sql 文件的参数,但从未用于 diffChangeLog。

xml 反馈示例:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
    <changeSet author="user (generated)" id="1370443156612-1">
        <createTable tableName="test">
            <column name="a" type="INT"/>
        </createTable>
    </changeSet>
    <changeSet author="user (generated)" id="1370443156612-2">
        <addColumn tableName="articles">
            <column name="date_debut" type="TEXT">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>

提前谢谢。

4

2 回答 2

8

diff 命令仅提供差异的文本概述。

为了获得新(开发)和旧数据库差异的 SQL:

  1. 使用diffChangeLog通过比较两个数据库(可能暂时)更新您的变更日志

  2. 对过时的数据库使用updateSQL以显示将运行以使其更新的 sql 命令。请注意,打印的 SQL 还将包含 liquibase 管理所需的命令。

如果 new/dev 数据库是您所期望的,那么您可以使用您的代码提交新的变更日志。使用 changelogSync 使 new/dev 数据库认为它已被 liquibase 更新。

于 2014-06-03T11:51:03.493 回答
0

你正在运行diffChangeLog命令,我想你想要diff命令?请参阅手册中的输出模式

liquibase.bat 
  --driver=com.mysql.jdbc.Driver 
  --url=jdbc:mysql://localhost:3306/base1 
  --username=root 
  --referenceUrl=jdbc:mysql://localhost:3306/base2 
  --referenceUsername=root 
  diff
    > test.sql
于 2013-10-08T16:51:52.680 回答