2008-08-20 14 views
26

से हम माइग्रेट कर रहे हैं हम वर्तमान में एक उत्पाद के लिए MySQL का उपयोग कर रहे हैं, और जितनी जल्दी हो सके PostgreSQL पर जाने के इच्छुक हैं, मुख्य रूप से लाइसेंसिंग कारणों के लिए।MySQL से PostgreSQL

क्या किसी और ने ऐसा कदम उठाया है? हमारा डेटाबेस एप्लिकेशन का जीवनकाल है और अंततः डेटा के टीबी भंडारित करेगा, इसलिए मैं प्रदर्शन सुधार/हानि के अनुभवों, एसक्यूएल और संग्रहीत प्रक्रियाओं आदि में परिवर्तित होने में प्रमुख बाधाओं के बारे में सुनना चाहता हूं।

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

+0

यहां इस विषय पर कुछ अच्छे तकनीकी लेख दिए गए हैं: http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL – user13550

+0

शायद आपको कोई समस्या दोहराएं। MySQL इसे बॉक्स से बाहर का समर्थन करता है। –

उत्तर

27

स्टीव, मुझे अपने पुराने एप्लिकेशन को चारों तरफ माइग्रेट करना पड़ा, वह PgSQL-> MySQL है। मुझे कहना पड़ेगा, तो आप पर विचार करना चाहिए अपने आप को भाग्यशाली ;-) आम gotchas हैं:

  • एसक्यूएल वास्तव में, सुंदर भाषा मानक के करीब है, इसलिए आप MySQL के बोली से पीड़ित हो सकता है आप पहले से ही पता
  • MySQL चुपचाप ट्रंकेटस varchars कि अधिकतम लंबाई से अधिक है, जबकि पृष्ठ की शिकायत - त्वरित समाधान का बजाय 'varchar' का 'पाठ' और उपयोग के रूप में इन स्तंभों है लंबी लाइनों काटना चलाता है
  • दोहरे उद्धरण चिह्नों रिवर्स अक्षर लोप
  • बूलियन फ़ील्ड का उपयोग तुलना की जाती है के बजाय इस्तेमाल कर रहे हैं आईएस और ऑपरेटरों नहीं है, हालांकि MySQL- संगत INT (1) = और 01 के साथ> अभी भी संभव है
  • कोई REPLACE है DELETE का उपयोग करें,/सम्मिलित कॉम्बो
  • Pg विदेशी कुंजी अखंडता लागू करने पर बहुत सख्त है, इसलिए संदर्भ चालू हटाना कैस्केड पर उपयोग करने के लिए मत भूलना
  • यदि आप PHP का उपयोग पीडीओ के साथ, lastInsertId लिए() विधि एक पैरामीटर पारित करने के लिए याद है - यह अनुक्रम नाम, जो आमतौर पर इस तरह से बनाई गई है होना चाहिए: [tablename] _ [primarykeyname] _seq

मुझे आशा है कि कम से कम एक सा मदद करता है। Postgres के साथ बहुत मज़ा खेल रहा है!

13

मैंने एक समान रूपांतरण किया है, लेकिन विभिन्न कारणों से। ऐसा इसलिए था क्योंकि हमें बेहतर एसीआईडी ​​समर्थन की आवश्यकता थी, और वेब उपयोगकर्ताओं को उसी डेटा को देखने की क्षमता थी जो वे अन्य डीबी टूल्स (दोनों के लिए एक आईडी) के माध्यम से कर सकते थे।

यहाँ बातें हमें थोड़ा कि कर रहे हैं:

  1. MySQL PostgreSQL के रूप में बाधाओं लागू नहीं करता है के रूप में सख्ती से।
  2. अलग-अलग तारीख हैंडलिंग दिनचर्या हैं। इन्हें मैन्युअल रूप से परिवर्तित करने की आवश्यकता होगी।
  3. कोई भी कोड जो ACID अनुपालन की अपेक्षा नहीं करता है, एक समस्या हो सकती है।

उसने कहा, एक बार यह जगह और परीक्षण के बाद, यह बहुत अच्छा था। सुरक्षा कारणों और भारी समवर्ती उपयोग के लिए सही लॉकिंग के साथ, PostgreSQL MySQL से बेहतर प्रदर्शन किया। उन चीजों पर जहां लॉकिंग की आवश्यकता नहीं थी (केवल पढ़ने के लिए) प्रदर्शन काफी अच्छा नहीं था, लेकिन यह अभी भी नेटवर्क कार्ड से तेज़ था, इसलिए यह कोई मुद्दा नहीं था।

सुझाव:

  • स्वचालित स्क्रिप्ट योगदान निर्देशिका में आपके रूपांतरण के लिए एक अच्छा प्रारंभिक बिंदु हैं, लेकिन आमतौर पर एक छोटे से छुआ करने की आवश्यकता होगी।
  • मैं अत्यधिक अनुशंसा करता हूं कि आप सीरियलज़ेबल अलगाव स्तर को डिफ़ॉल्ट के रूप में उपयोग करें।
  • pg_autodoc उपकरण पर अच्छा है, वास्तव में आपके डेटा संरचनाएं और आपको परिभाषित करने और लागू करने के लिए भूल गए किसी भी रिश्ते को ढूंढने में सहायता करें।
3

हमने MySQL3 से PostgreSQL 8.2 से 8.3 तक एक कदम बढ़ाया। PostgreSQL में SQL का मूलभूत और बहुत कुछ है, इसलिए यदि आपका MYSQL फैंसी MySQL सामान का उपयोग नहीं करता है तो आप ठीक होंगे।

मेरे अनुभव से, हमारे MySQL डेटाबेस (संस्करण 3) में विदेशी कुंजी नहीं है ... PostgreSQL आपको उन्हें रखने देता है, इसलिए हमें इसे बदलना पड़ा ... और यह एक अच्छी बात थी और हमें कुछ गलती मिली ।

दूसरी चीज जिसे हमें बदलना था कोडिंग (सी #) कनेक्टर था जो MySQL में समान नहीं था। MySQL एक PostgreSQL एक से अधिक स्थिर था। PostgreSQL एक के साथ हमें अभी भी कुछ समस्याएं हैं।

+10

"पोस्टग्रेस्क्ल", "पोस्टग्रेस्क्ल", "पोस्टग्रेस्क्ल" => "पोस्टग्रेएसक्यूएल" ;-) –

+6

श्वास। टिप्पणी के लिए नौ उपहास, फिर भी कोई भी नहीं गया और संपादन किया। मेले StackOverflow उपयोगकर्ताओं को सशक्त बनाया जाएगा! – mlissner