我实际上在命令行窗口上使用Liquibase,我尝试创build一个代表两个数据库之间的差异的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>
感谢提前。
你正在运行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
diff命令只提供文本概述的差异。
为了得到一个新的(dev)和旧的数据库的区别的SQL:
使用diffChangeLog (暂时也许)通过比较两个数据库来更新您的更改日志
使用updateSQL针对过时的数据库来显示将运行的sql命令以使其更新。 注意打印的SQL也将包含liquibase管理所需的命令。
然后,如果新的/ dev数据库是您所期望的,则可以使用您的代码提交新的更新日志。 使用changelogSync使新的/ dev数据库认为它已被liquibase更新。