Mysql को postgresql में कैसे बदलें? [बन्द है]


14

मैं एक बड़े mysql डेटाबेस को postgresql में बदलने के लिए एक रूपांतरण उपकरण की सख्त तलाश कर रहा हूं। मुझे उपकरण / स्क्रिप्ट की आवश्यकता है:

  • नि: शुल्क
  • लिनक्स के तहत काम करता है
  • सरल उपयोग करने के लिए और छोटी गाड़ी नहीं है
  • आपने वास्तव में कोशिश की और पुष्टि की कि काम करता है
  • अधिमानतः, जावा या रूबी के साथ नहीं लिखा गया

मैंने यहां सूचीबद्ध विभिन्न उपकरणों की कोशिश की है , लेकिन कोई भी मेरे लिए काम नहीं करता है।

पहले ही, आपका बहुत धन्यवाद।


मैं PostgreSQL विशेषज्ञ नहीं हूं, फिर भी खुद सीख रहा हूं। मैंने अपना उत्तर हटा दिया। हालाँकि, mysqldump को किसी और द्वारा पोस्ट किए गए postgresql के साथ उपयोग करने के बारे में एक और सवाल है: dba.stackexchange.com/q/9792/877 । आशा करता हूँ की ये काम करेगा !!!
RolandoMySQLDBA

1
जावा में लिखे टूल में क्या गलत है? और यह मदद कर सकता है यदि आपने वर्णन किया कि वास्तव में उन सभी के साथ " काम नहीं कर रहा था" ।
a_horse_with_no_name

जवाबों:


7

दो बहुत भिन्न DBMS के बीच माइग्रेट करने के लिए केवल डेटा माइग्रेट करने की तुलना में बहुत अधिक की आवश्यकता होती है । लेकिन डेटा का माइग्रेशन आमतौर पर सबसे आसान हिस्सा है।

जिस तरह से मैंने कोशिश की है, जो मुफ़्त है और मैं पुष्टि कर सकता हूं कि यह काम करता है:

  • एक mysql स्कीमा केवल डंप बनाएँ
  • एक टेक्स्ट एडिटर और बहुत सारे खोज और प्रतिस्थापित करके SQL को समायोजित करें
  • Postgres में परिवर्तित SQL चलाएँ
  • MySQL से एक सादा पाठ डंप बनाएँ (जैसे CSV, या कुछ अन्य सीमांकित प्रारूप)
  • PostgreSQL के COPY कमांड का उपयोग करके डेटा आयात करें

यदि आप अवैध डेटा को स्वीकार करने के लिए MySQL के व्यवहार पर भरोसा करते हैं तो डेटा आयात करना वास्तव में मुश्किल हो सकता है (जैसे कि 31 फरवरी)

मेरा अनुमान है, कि यह एक उपकरण की खोज करने, उनमें से एक गुच्छा का मूल्यांकन करने और फिर आपके द्वारा चुने गए को समझने की कोशिश करने की तुलना में तेज होने वाला है। लेकिन यह इस बात पर निर्भर करता है कि आप किस "बड़े" का जिक्र कर रहे हैं। यदि बड़ी कई सैकड़ों टेबल है तो यह संभव नहीं है। यदि बड़ी को केवल पंक्तियों की संख्या के रूप में संदर्भित किया जाता है, तो यह संभवतः ऐसा करने का सबसे तेज़ तरीका है।

यहां कुछ ऐसी उपकरण है कि एक डेटाबेस स्कीमा डंप कर सकते हैं एक डीबीएमएस में स्वतंत्र (XML) प्रारूप की तरह, कर रहे हैं Liquibase , SchemaSpy या WbSchemaReport । लिक्विबेस के साथ शायद इसका उपयोग सबसे आसान है। दूसरों को उत्पन्न XML को बदलने के लिए कुछ मैनुअल वर्क राइटिंग / XSLT का विस्तार करना होगा।

यदि आप MySQL में ट्रिगर और संग्रहीत प्रक्रियाओं का उपयोग कर रहे हैं, तो मुझे विश्वास नहीं है कि कोई भी स्वचालित उपकरण होगा जो बाद में एक प्रमुख मैनुअल फिक्सिंग की आवश्यकता के बिना उनका अनुवाद कर सकता है - और फिर उत्पन्न प्रक्रियाएं शायद लक्ष्य DBMS की किसी भी उन्नत सुविधाओं का उपयोग नहीं करेंगी ।


6

हाल ही में यह करना था और चूंकि इसे एक उपकरण की तलाश में बहुत लंबा समय लगा होगा और इसके साथ सामान करने में सक्षम होने के कारण, मैंने इसे प्रति हाथ के साथ विम और प्रतिस्थापन-फू के साथ किया था

  • बदलें INT NOT NULL AUTO_INCREMENT(या ऐसा कुछ भी) के साथSERIAL
  • एरीथिग स्ट्रिंग को संबंधित में बदल दें TEXT(उपयोग करने TEXTमें VARCHAR, या समान गति में कोई अंतर नहीं )
  • उन च **** से छुटकारा पाएं `
  • Postgres में कोई संग्रहण इंजन नहीं है, इसलिए निकालें ENGINE InnoDB(या जो भी)
  • हटाना UNSIGNED
  • प्रत्येक BLOB फ़ील्ड है BYTEA
  • तार एकल उद्धरण का उपयोग करते हैं 'और कुछ नहीं
  • सावधान रहें यदि आप स्ट्रिंग संधि का उपयोग कहीं करते हैं, 9.1 से शुरू करते हुए, CONCATगैर-मानक स्ट्रिंग संगति के लिए एक वापसी के रूप में समर्थन को पोस्ट करता है, इससे पहले 9.1 का उपयोग करके किया गया था 'string' || ' string'
  • किसी भी प्रक्रियात्मक कोड को फिर से लिखें ...
  • उन नामों का ध्यान रखें जो आरक्षित हैं (जैसे तालिका, नाम, ...) और साथ ही ऊपरी मामले के नाम। उन्हें दोहरे उद्धरण चिह्नों की आवश्यकता है"
  • सिंटैक्स भिन्न नहीं होने के कारण अनुक्रमित बहुत अधिक होना चाहिए
  • सब कुछ है कि मैं भूल गया हूँ, इस विषय पर wikibooks की जाँच करें

उन गोलियों में से प्रत्येक को एक एकल प्रतिस्थापन के साथ किया जाना चाहिए।

मैं स्कीमा और डेटा निर्यात seperatly । सुनिश्चित करें कि आप INSERTइसके बजाय s का उपयोग करते हैं COPY। यदि कोई फेंस सामान नहीं चल रहा है, तो डेटा (लगभग) को साफ नहीं करना चाहिए। सुनिश्चित करें कि सब कुछ चालू है UTF-8। 2 अलग फ़ाइलों के साथ, स्कीमा अधिक प्रबंधनीय हो जाती है और आपके पास संपादित करने के लिए 1GB फ़ाइल नहीं होती है।

स्कीमा को लोड करते समय, आपको बहुत विस्तृत जानकारी मिलती है जहां एक त्रुटि है, इसलिए डिबगिंग बहुत सरल होना चाहिए।


नमस्ते, कैसे Myg के BLOB क्षेत्र डेटा को PostgreSQL के BYTEA में परिवर्तित करें? मैंने पाया कि अगर मैं मैसकल के डेटा को एसक्यूएल सम्मिलित करता हूं, तो मैं डेटा को PostgreSQL में लोड नहीं कर सकता।
फ्रैंक

1

मैं इसे वहाँ फेंक रहा हूँ, कभी इसे आजमाया नहीं, लेकिन तुंगस्टन रेप्लिकेटर वही कर सकता है जो आप चाहते हैं। यह मुख्य रूप से एक प्रतिकृति उपकरण है, लेकिन मुझे लगता है कि इसमें एक बूटस्ट्रैपिंग प्रक्रिया हो सकती है जो आपको कम से कम डेटा टुकड़े के साथ मदद कर सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.