2009-07-18 15 views
29

liquibase पर त्वरित प्रारंभ मैं एक changeset (बहुत गूंगा :))कैसे liquibase के साथ काम करने, एक ठोस उदाहरण

कोड बना लिया है के बाद:

<?xml version="1.0" encoding="UTF-8"?> 

<databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.6" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.6 
     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.6.xsd"> 

    <changeSet id="1" author="me"> 
     <createTable tableName="first_table"> 
      <column name="id" type="int"> 
       <constraints primaryKey="true" nullable="false"/> 
      </column> 
      <column name="name" type="varchar(50)"> 
       <constraints nullable="false"/> 
      </column> 
     </createTable> 
     <createTable tableName="new_table"> 
      <column name="id" type="int"> 
       <constraints primaryKey="true" nullable="false"/> 
      </column> 
     </createTable> 
    </changeSet> 

</databaseChangeLog> 

मैं एक साफ स्कीमा बना लिया है और मैंने माइग्रेट कमांड लॉन्च किया है।

लिक्विबेस ने डेटाबेस को बनाया है, समर्थन तालिका डेटाबेसchangelog और ..lock के साथ।

अब मैं परिवर्तनों को कैसे ट्रैक कर सकता हूं ?? मैं changeset एक नया createTable तत्व जोड़ संशोधित किया है, लेकिन जब मैं कमांड "अद्यतन" कोशिश liquibase मुझसे कहता है यह

Migration Failed: Validation Failed: 
    1 change sets check sum 

तो मैं नहीं लगता है कि जिस तरह से liquibase के साथ काम करने को समझ लिया है करने के लिए।

कोई मुझे सही दिशा में इंगित कर सकता है ??

धन्यवाद

+0

अक्सर जब आप कोई नया एप्लिकेशन विकसित कर रहे हों या नई सुविधाएं जोड़ रहे हों, तो आपको आवश्यकताओं या बग के लिए अपनी डीबी स्कीमा को संशोधित करना होगा। एक नए ऐप के लिए, मैंने सभी तालिकाओं को छोड़ने के लिए मैन्युअल रूप से निष्पादित स्क्रिप्ट का उपयोग किया है और डेटाबैचेंगेलॉग तालिका (और अच्छी माप के लिए LOCK तालिका) से सबकुछ हटा दिया है। आप चेंज लॉग टेबल से अपने रिकॉर्ड को हटाकर और एंटी-क्वेरी के साथ अपने बदलाव को अनदेखा करके एक ही बदलाव को खोल सकते हैं: अतिरिक्त टेबल हटाएं, टेबल/कॉलम को संशोधित करें, आदि। अगर मैंने शुरुआत से रनऑन चेंज का इस्तेमाल किया था, तो यह कट जाएगा 50% तक मेरी migrations.xml फ़ाइल और अधिक समय बचाया। –

+0

जिजावा।com/spring-boot-fluibase-gradle-example/ – user3470953

उत्तर

37

आप एक <changeSet> कि पहले से ही मार डाला गया था संशोधित कभी नहीं करना चाहिए। लिक्विबेस सभी निष्पादित परिवर्तनों के लिए चेकसम की गणना करता है और उन्हें लॉग में संग्रहीत करता है। इसके बाद यह चेकसम को फिर से गणना करेगा, इसे संग्रहीत लोगों से तुलना करें और चेकसम अलग होने पर अगली बार इसे चलाने में असफल हो जाएंगे।

इसके बजाय आपको क्या करना है अन्य<changeSet> और इसमें अपना नया createTable तत्व डालना है।

क्विकस्टार्ट अच्छा रीडिन है 'लेकिन यह वास्तव में तेज़ है :-) पूर्ण manual देखें, खासकर इसके ChangeSet अनुभाग।

+1

जो अभी स्पष्ट है, मुझे मैन्युअल में उस पृष्ठ को नहीं मिला और पढ़ा गया :) – apelliciari

+3

आपको कई बार चेंजसेट तत्वों को संशोधित करने की आवश्यकता है। RunOnChange उत्तर Javid को अधिक जानकारी के लिए दिया गया देखें। हम "कभी नहीं बदलते" चीज करते थे, लेकिन यह तब होता है जब आपको बदलावों को अपडेट करने की आवश्यकता होती है, और जब आप तरल पदार्थ के साथ अधिक शामिल होते हैं तो यह आपके साथ होगा)। विकल्प खोलें। –

+0

धन्यवाद! यह सही उत्तर –

26

यह वर्तमान में स्वीकृत उत्तर Liquibase 2.x में परिवर्तनों के आधार पर थोड़ा सा पुराना है। 2.x संस्करण में, Liquibase अभी भी विफल हो जाएगा यदि md5 चेकसम एक परिवर्तन के लिए बदल गया है, लेकिन आप रनऑन चेंज विशेषता निर्दिष्ट कर सकते हैं यदि आप इसे संशोधित करना चाहते हैं।

documentation से:

runOnChange - परिवर्तन पहली बार यह देखा जाता है निष्पादित करता है और हर बार परिवर्तन सेट

+2

है यह उत्तर स्वीकार्य उत्तर के संयोजन के रूप में माना जाना चाहिए .. runOnChange आपको मौजूदा परिवर्तन सेट को संशोधित करने देगा। स्वीकार्य उत्तर यह कहने में सही है कि आपको मौजूदा परिवर्तनों को नहीं बदला जाना चाहिए, लेकिन कई बार आपको इसकी आवश्यकता हो सकती है, और आपकी नीति को इसके लिए अनुमति देनी चाहिए। –

+0

"जिन बार आपको आवश्यकता हो सकती है", जैसे विकास वातावरण में और विकास के दौरान पुनरावृत्ति परिवर्तन करना। यह निश्चित रूप से अजीब लग रहा है अगर प्रोड पर्यावरण के लिए आपकी पहली तैनाती से संबंधित, ओवरलैपिंग और विरोधाभासी परिवर्तनों का मुट्ठी भर था। –

3

बदल दिया गया है यदि यह एक changeset करने के लिए एक परिवर्तन है कि मूल रूप से पहले से ही किया जा चुका है, आप डेटाबेस को मैन्युअल रूप से संशोधित कर सकते हैं ताकि उस परिवर्तन के लिए एमडी 5 नए से मेल खा सके। मामूली पाठ परिवर्तन के लिए अच्छा है। या आप अपनी तालिका से उस परिवर्तन पंक्ति को हटा सकते हैं।

+0

मैं यह बहुत कुछ करता हूं, लेकिन मुझे लगता है कि रिकॉर्ड को हटाना बेहतर है और md5sum के साथ गड़बड़ से मैन्युअल रूप से परिवर्तन को खोलना बेहतर है। केवल एक बार जब एक ऐप डीबी उत्पादन में मैनुअल स्क्रिप्ट द्वारा संशोधित किया गया था, तो क्या मैंने md5sum संपादन का सहारा लिया। –