2012-06-21 13 views
21

पर तरल पदार्थ में एक परिवर्तनसेट को टैग करने के लिए कैसे मैंने maven configuration में निर्दिष्ट अनुसार तरल पदार्थ के लिए मेवेन प्लगइन कॉन्फ़िगर किया है।रोलबैक

<changeSet id="changeRollback" author="nvoxland"> 
    <createTable tableName="changeRollback1"> 
    <column name="id" type="int"/> 
    </createTable> 
    <rollback> 
    <dropTable tableName="changeRollback1"/> 
    </rollback> 
</changeSet> 

कमांड लाइन का उपयोग कर डीबी अद्यतन करने के लिए एसक्यूएल निर्मित: - -: mvn liquibase: updateSQL

लेकिन सिर्फ इतना पता करने के लिए एक "rollbackTag का उपयोग कर रोलबैक के लिए कैसे चाहते
अब एक changeset की तरह बनाया "पैरामीटर। i.e. अगर आदेश चलाएं "एमवीएन तरल पदार्थ: रोलबैक एसक्यूएल", "रोलबैकटैग" पैरामीटर का मूल्य क्या होना चाहिए।

और क्या परिवर्तन आईडी का उपयोग करके रोलबैक करना संभव है?

+4

आप अभी तक Nathon voxland :-) –

उत्तर

35

रोलबैक टैग आपके डेटाबेस की कॉन्फ़िगरेशन की जांच करने के लिए डिज़ाइन किए गए हैं। डेटाबेस

mvn liquibase:rollback -Dliquibase.rollbackCount=3 
mvn liquibase:tag -Dliquibase.tag=checkpoint 

अब आप अद्यतन कर सकते हैं, और कहा कि बात करने के लिए किसी भी स्तर रोलबैक पर रोलबैक का उपयोग कर:

निम्न कमांड 3 changesets द्वारा वापस डेटाबेस विन्यास जोड़ दी जाएगी और एक टैग "चौकी" कहा जाता है बनाने टैग:

mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=checkpoint 
:

mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint 

या वैकल्पिक रूप से रोलबैक एसक्यूएल उत्पन्न

संशोधित उदाहरण

मुझे प्रारंभ में यह पता लगाना मुश्किल था कि कैसे तरल पदार्थ मेवेन प्लगइन को कॉन्फ़िगर करना है। बस अगर यह यहां इस्तेमाल किया गया उदाहरण है जो मैंने उपयोग किया है।

liquibase अद्यतन स्वचालित रूप से चलाने के लिए, वर्तमान Maven संशोधन संख्या में डेटाबेस टैगिंग के बाद किया गया है।

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myspotontheweb.db</groupId> 
    <artifactId>liquibase-demo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <properties> 
     <!-- Liquibase settings --> 
     <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> 
     <liquibase.driver>org.h2.Driver</liquibase.driver> 
     <liquibase.username>user</liquibase.username> 
     <liquibase.password>pass</liquibase.password> 
     <liquibase.changeLogFile>com/myspotontheweb/db/changelog/db-changelog-master.xml</liquibase.changeLogFile> 
     <liquibase.promptOnNonLocalDatabase>false</liquibase.promptOnNonLocalDatabase> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <version>1.3.162</version> 
     </dependency> 
    </dependencies> 
    <profiles> 
     <profile> 
      <id>dbupdate</id> 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.liquibase</groupId> 
         <artifactId>liquibase-maven-plugin</artifactId> 
         <version>2.0.2</version> 
         <executions> 
          <execution> 
           <phase>process-resources</phase> 
           <configuration> 
            <tag>${project.version}</tag> 
           </configuration> 
           <goals> 
            <goal>update</goal> 
            <goal>tag</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

Liquibase अब मानक जीवन चक्र इतनी के रूप में चलाया जा सकता है के भाग के रूप कॉन्फ़िगर किया गया है इस प्रकार है:

mvn clean compile 
+0

धन्यवाद एक बहुत [मार्क ओ'कॉनर] (http://stackoverflow.com/users/256618/mark-oconnor)। उपर्युक्त विन्यास में, "अद्यतन" लक्ष्य के साथ "टैग" लक्ष्य जोड़ना संभव है। क्या आप इसे पूरा करने के लिए पूर्ण एमवीएन कमांड दे सकते हैं। धन्यवाद अग्रिम – Manu

+0

में के रूप में rollbackSQL बनाने का प्रयास करने का अनुरोध किया –

+0

अद्यतन उदाहरण @gfghj, मैं त्रुटि मिली: - [जानकारी] त्रुटि की स्थापना या चल Liquibase: liquibase.exception.RollbackImpossibleException: नहीं उलटा बनाया liquibase.change.core.UpdateDataChange को – Manu

12

मैं व्यक्तिगत रूप से, changeset फ़ाइलों के हिस्से के रूप टैग डाल करने के लिए पसंद करते हैं, इसलिए यदि आप DATABASECHANGELOG में सभी रिकॉर्ड्स को रोलबैक या डिलीट करना होगा, आप अपने टैगिंग रिकॉर्ड नहीं खोलेंगे।

<databaseChangeLog> 
    <changeSet id="001_create_tables" .../> 
    <changeSet id="002_alter_tables" .../> 
    <changeSet id="003_load_user_data" .../> 

    <!-- Also include the tagging itself as a changeSet... --> 
    <changeSet author="userId" id="tag_version_0_1_0"> 
     <tagDatabase tag="version_0.1.0" /> 
    </changeSet> 
    <!-- version 0.1.0 ends here --> 

</databaseChangeLog> 
+0

स्वीकार करें। मैंने मेवेन लक्ष्य रोलबैक एसक्यूएल बनाया है और कॉन्फ़िगरेशन में टैग संस्करण_0.1.0 जोड़ा गया है। लेकिन जब मैं लक्ष्य रोलबैक एसक्यूएल चलाता हूं, तो यह रोलबैक स्क्रिप्ट नहीं उत्पन्न करता है। लेकिन अगर मैं 2 का उपयोग कर रोलबैक गिनती निर्दिष्ट करता हूं तो रोलबैक स्क्रिप्ट पिछले दो परिवर्तनों के लिए बनाई गई हैं। कोई विचार क्यों रोलबैक स्क्रिप्ट उत्पन्न नहीं हुआ? – Manu

+0

क्या आपने rollbackSQL कमांड को सीधे तरल पदार्थ कमांड लाइन से लॉन्च करने का प्रयास किया था? बस यह सुनिश्चित करने के लिए कि आपके डीबी स्कीमा की वर्तमान स्थिति और आपके टैग द्वारा संदर्भित राज्य अलग हैं और इसलिए कमांड को कुछ एसक्यूएल का परिणाम होना चाहिए। – kothvandir

+0

नहीं। मैंने इसे मैवेन प्लगइन का उपयोग करके चलाया। लेकिन मैं अद्यतन एसक्यूएल लक्ष्य चलाते समय उत्पन्न SQL में टैग जोड़ा गया था और मैंने इसके साथ डीबी अपडेट किया था। मुझे यकीन है कि टैग अलग नहीं हैं। – Manu

संबंधित मुद्दे