2013-06-05 16 views
5

Tôi thực sự sử dụng Liquibase trên các cửa sổ trong các dòng lệnh và tôi cố gắng tạo một kịch bản lệnh sql đại diện cho sự khác biệt giữa hai cơ sở dữ liệu. Thật không may tôi chỉ nhận được tập tin xml trong trở lại. Bạn có thể giúp tôi không?Dòng lệnh Liquibase tạo ra các thay đổi khác trong sql

My dòng lệnh:

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 

Tôi đã nhìn thấy câu hỏi tương tự này trong một diễn đàn khác, nhưng ông không nhận được một câu trả lời tốt (http://forum.liquibase.org/topic/convert-changelog-xml-file-into-sql-file). Tôi cũng đã thấy một số tham số để lấy tệp sql từ updateSQL cmd, nhưng không bao giờ cho một diffChangeLog.

Ví dụ về những phản hồi 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> 

Thanks bởi trước.

+3

bản sao có thể có của [so sánh cơ sở dữ liệu và tạo kịch bản lệnh sql bằng cách sử dụng liquibase] (http://stackoverflow.com/questions/8397488/comparing-databases-and-genrating-sql-script-using-liquibase) –

Trả lời

3

Bạn đang chạy lệnh diffChangeLog, tôi nghĩ bạn muốn lệnh diff? Xem Chế độ xuất trong manual.

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 
+0

Điều này không đúng . quá trình này không trực tiếp. Không có mã tuân thủ SQL nào được tạo ra, chỉ có một tổng quan về văn bản như @Ian Rogers nói. – andPat

3

Lệnh khác chỉ cung cấp tổng quan văn bản về sự khác biệt.

Để có được một SQL của sự khác biệt của một mới (dev) và cơ sở dữ liệu cũ:

  1. Sử dụng diffChangeLog để (tạm thời có lẽ) cập nhật changelog của bạn bằng cách so sánh hai cơ sở dữ liệu

  2. Sử dụng updateSQL dựa vào cơ sở dữ liệu lỗi thời để hiển thị các lệnh sql sẽ được chạy để cập nhật nó. Lưu ý rằng câu lệnh SQL được in cũng sẽ chứa các lệnh cần thiết bởi liquibase để quản trị.

Sau đó, bạn có thể thực hiện thay đổi mới bằng mã của mình nếu cơ sở dữ liệu mới/dev là những gì bạn mong đợi. Sử dụng changelogSync để tạo cơ sở dữ liệu mới/dev cho rằng nó được cập nhật bởi liquibase.

Các vấn đề liên quan