2012-11-28 8 views
17

के साथ "डेटाबेस विशिष्ट" एसक्यूएल स्क्रिप्ट के लिए सबसे अच्छा तरीका डेटाबेस माइग्रेशन के लिए मेरे वर्तमान प्रोजेक्ट में Flyway का उपयोग करना शुरू कर दिया और मुझे यह बहुत पसंद है। मैं वर्तमान में टेस्ट-एनवायरनमेंट में प्रोड- और डर्बी में ओरेकल का उपयोग करता हूं।फ्लाईवे

बहुत जल्द, मैंने डेटाबेस विशिष्ट एसक्यूएल कमांड की समस्या में भाग लिया, उदाहरण के लिए

  • ओरेकल पर ALTER TABLE T1 MODIFY F1 VARCHAR(256); बनाम
  • डर्बी पर ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256);

मैं "विक्रेता तटस्थ परिवर्तन तालिका संशोधित कॉलम डेटाटाइप" एसक्यूएल लिखने का कोई तरीका नहीं देख सकता।

फ्लाईवे का उपयोग करके इस समस्या से निपटने का सबसे अच्छा तरीका क्या है?

उत्तर

25

आप फ्लाईवे.लोकेशन प्रॉपर्टी का उपयोग कर सकते हैं।

इस प्रकार दिखाई देगा में परीक्षण में

:

flyway.locations=sql/common,sql/derby 

और उत्पादन में:

flyway.locations=sql/common,sql/oracle 

फिर आप डीबी के आम और विभिन्न प्रतियों में आम बयान (V1__Create_table.sql) हो सकता था डीबी-विशिष्ट स्थानों में विशिष्ट विवरण (V2__Alter_table.sql)।

मेरी राय में एक बेहतर समाधान, प्रोड और परीक्षण में एक ही डीबी होना है। हां, आप थोड़ा प्रदर्शन खो देते हैं, लेकिन दूसरी तरफ आप पर्यावरण के बीच एक और अंतर (और त्रुटियों के संभावित स्रोत) को भी खत्म करते हैं।

+0

तेज जवाब के लिए धन्यवाद एक्सेल! – Peti

+0

शायद [फ्लाईवे एफएक्यू] में कहीं भी डालने लायक है (http://flywaydb.org/documentation/faq.html)? – Peti

+4

हो गया: http://flywaydb.org/documentation/faq.html#db- विशिष्ट- एसक्यूएल –

0

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

मैं प्रत्येक डेवलपर पर सिंक में मैन्युअल रूप से एसक्यूएल के दो सेट रखने के लिए इस दृष्टिकोण को प्राथमिकता देता हूं।

+0

आपको इसे एक अलग प्रश्न के रूप में पूछना चाहिए। यह एक दिलचस्प विचार है। – Peti

+0

अच्छा विचार पीई - निर्मित प्रश्न: http://stackoverflow.com/questions/32121083/customizing-sql-executed-per-environment – dropofahat

+0

कूल ... एक्सेल Fontaine पहले से ही इसका उत्तर दिया :-) – Peti