डेटाबेस को माइग्रेट करना या DB2 से PostgreSQL में केवल एक प्रकार के डेटाबेस ज्ञान के साथ एक एप्लिकेशन को माइग्रेट करना पर्याप्त नहीं है, दो डेटाबेस सिस्टम के बीच अंतर के बारे में जानने के लिए कुछ चीजें हैं।
PostgreSQL दुनिया का सबसे व्यापक रूप से इस्तेमाल किया जाने वाला उन्नत ओपन सोर्स डेटाबेस है। PostgreSQL डेटाबेस में समृद्ध फीचर सेट है और PostgreSQL समुदाय बहुत मजबूत है और वे मौजूदा सुविधाओं में लगातार सुधार कर रहे हैं और नई सुविधाओं को जोड़ रहे हैं। Db-engine.com के अनुसार, PostgreSQL वर्ष 2017 और 2018 का DBMS है।
जैसा कि आप जानते हैं कि DB2 और PostgreSQL RDBMS हैं लेकिन कुछ असंगतियाँ हैं। इस ब्लॉग में, हम इनमें से कुछ असंगतियों को देख सकते हैं।
DB2 से PostgreSQL में माइग्रेट क्यों करें
- लचीला खुला स्रोत लाइसेंसिंग और सार्वजनिक क्लाउड प्रदाताओं जैसे AWS, Google क्लाउड, Microsoft Azure से आसान उपलब्धता।
- डेटाबेस के प्रदर्शन को बेहतर बनाने के लिए ओपन सोर्स ऐड-ऑन का लाभ उठाएं।
आप नीचे दी गई छवि में देख सकते हैं कि DB2 की तुलना में PostgreSQL की लोकप्रियता समय के साथ बढ़ रही है।
समय के साथ रुचि
माइग्रेशन आकलन
माइग्रेशन का पहला चरण एप्लिकेशन और डेटाबेस ऑब्जेक्ट का विश्लेषण करना, दोनों डेटाबेस के बीच असंगतताओं का पता लगाना और माइग्रेशन के लिए आवश्यक समय और लागत का अनुमान लगाना है।
डेटा प्रकार मैपिंग
IBM DB2 के कुछ डेटा प्रकार सीधे PostgreSQL डेटा प्रकारों से मेल नहीं खाते हैं, इसलिए आपको इसे संबंधित PostgreSQL डेटा प्रकार में बदलने की आवश्यकता है।
कृपया नीचे दी गई तालिका देखें।
IBM DB2 | PostgreSQL | |
बिगिनट | 64-बिट पूर्णांक | बिगिनट |
BLOB(n) | बाइनरी बड़ी वस्तु | BYTEA |
CLOB(n) | चरित्र बड़ी वस्तु | पाठ |
डीबीसीएलओबी(एन) | UTF-16 वर्ण बड़ी वस्तु | पाठ |
एनसीएलओबी(एन) | UTF-16 वर्ण बड़ी वस्तु | पाठ |
CHAR(n), CHARACTER(n) | फिक्स्ड-लेंथ स्ट्रिंग | CHAR(n) |
चरित्र भिन्न(n) | चर-लंबाई वाली स्ट्रिंग | VARCHAR(n) |
एनसीएचएआर(एन) | फिक्स्ड-लेंथ UTF-16 स्ट्रिंग | CHAR(n) |
NCHAR भिन्न(n) | वेरिएबल-लेंथ UTF-16 स्ट्रिंग | VARCHAR(n) |
VARCHAR(n) | चर-लंबाई वाली स्ट्रिंग | VARCHAR(n) |
VARGRAPHIC(n) | वेरिएबल-लेंथ UTF-16 स्ट्रिंग | VARCHAR(n) |
VARCHAR(n) बिट डेटा के लिए | चर-लंबाई वाली बाइट स्ट्रिंग | BYTEA |
NVARCHAR(n) | भिन्न-लंबाई वाली UTF-16 स्ट्रिंग | VARCHAR(n) |
ग्राफ़िक(n) | निश्चित लंबाई UTF-16 स्ट्रिंग | CHAR(n) |
पूर्णांक | 32-बिट पूर्णांक | पूर्णांक |
NUMERIC(p,s) | निश्चित-बिंदु संख्या | NUMERIC(p,s) |
DECIMAL(p,s) | निश्चित-बिंदु संख्या | DECIMAL(p,s) |
दोहरा सटीक | दोहरी सटीक फ़्लोटिंग पॉइंट संख्या | डबल सटीक |
फ्लोट(पी) | दोहरी सटीक फ़्लोटिंग पॉइंट संख्या | डबल सटीक |
असली | एकल सटीक फ़्लोटिंग पॉइंट नंबर | असली |
स्मालिंट | 16-बिट पूर्णांक | स्मालिंट |
दिनांक | तारीख (वर्ष, महीना और दिन) | दिनांक |
समय | समय (घंटा, मिनट और सेकंड) | समय(0) |
टाइमस्टैम्प(p) | अंश के साथ दिनांक और समय | टाइमस्टैम्प(पी) |
DECFLOAT(16 | 34) | आईईईई फ़्लोटिंग पॉइंट नंबर | फ्लोट |
DB2 और PostgreSQL में असंगतताएं
DB2 और PostgreSQL में कई असंगतताएँ मौजूद हैं, आप उनमें से कुछ यहाँ देख सकते हैं। आप एक्सटेंशन बनाकर उन्हें स्वचालित कर सकते हैं ताकि आप DB2 फ़ंक्शन का उपयोग कर सकें जैसा कि PostgreSQL में है और आप अपना समय बचा सकते हैं। कृपया PostgreSQL में DB2 फ़ंक्शन के व्यवहार की जाँच करें
टेबलस्पेस
TABLESPACE क्लॉज उस टेबलस्पेस के नाम को परिभाषित करता है जिसमें नई बनाई गई टेबल रहती है।
DB2 TABLESPACE के लिए IN क्लॉज का उपयोग करता है इसलिए इसे PostgreSQL में TABLESPACE क्लॉज से बदला जाना चाहिए।
उदाहरण:
DB2:
IN <tablespace_name>
पोस्टग्रेएसक्यूएल:
TABLESPACE <tablespace_name>
केवल प्रथम फ़ेच n पंक्तियाँ
DB2 में, आप n पंक्तियों से अधिक प्राप्त करने के लिए FETCH FIRST n ROWS ONLY क्लॉज का उपयोग कर सकते हैं। PostgreSQL में, आप LIMIT n का उपयोग कर सकते हैं जो FETCH FIRST n ROWS केवल के बराबर है।
उदाहरण:
DB2:
SELECT * FROM EMP
ORDER BY EMPID
FETCH FIRST 10 ROWS ONLY;
पोस्टग्रेएसक्यूएल:
SELECT * FROM EMP
ORDER BY EMPID
LIMIT 10;
पहचान के रूप में डिफ़ॉल्ट द्वारा उत्पन्न
DB2 में IDENTITY कॉलम को PostgreSQL में सीरियल कॉलम से बदला जा सकता है।
DB2:
CREATE TABLE <table_name> (
<column_name> INTEGER NOT NULL
GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20)
);
पोस्टग्रेएसक्यूएल:
CREATE TABLE <table_name> (
<column_name> SERIAL NOT NULL
);
SYSIBM.SYSDUMMY1 में से चुनें
PostgreSQL में कोई "SYSIBM.SYSDUMMY1" तालिका नहीं है। PostgreSQL "से" खंड के बिना "चयन" की अनुमति देता है। आप इसे स्क्रिप्ट का उपयोग करके हटा सकते हैं।
स्केलर फ़ंक्शंस:DB2 बनाम PostgreSQL
सीईआईएल/सीलिंग
CEIL या CEILING अगला सबसे छोटा पूर्णांक मान देता है जो इनपुट से अधिक या उसके बराबर होता है (जैसे CEIL(122.89) रिटर्न 123, CEIL(122.19) रिटर्न 123 भी)।
DB2:
SELECT CEIL(123.89) FROM SYSIBM.SYSDUMMY1;
SELECT CEILING(123.89) FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
SELECT CEIL(123.89) ;
SELECT CEILING(123.89) ;
दिनांक
यह इनपुट को दिनांक मानों में परिवर्तित करता है। आप PostgreSQL में DATE फ़ंक्शन को TO_DATE फ़ंक्शन में बदल सकते हैं।
DB2:
SELECT DATE ('2018-09-21') FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
SELECT TO_DATE ('21-09-2018',’DD-MM-YYYY’) ;
दिन
यह तारीख या समकक्ष मूल्य का दिन (महीने का दिन) देता है। आउटपुट स्वरूप पूर्णांक है।
DB2:
SELECT DAY (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
SELECT DATE_PART('day', '2016- 09-21'::date);
महीना
यह दिनांक मान का महीना भाग लौटाता है। आउटपुट स्वरूप पूर्णांक है।
DB2:
SYSIBM.SYSDUMMY1 सेSELECT MONTH (DATE('2016-09-21')) FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
SELECT DATE_PART ('month', '2016-09- 21'::date);
पोस्टर
स्ट्रिंग की स्थिति लौटाता है। POSSTR फ़ंक्शन को PostgreSQL में POSITION फ़ंक्शन द्वारा प्रतिस्थापित किया जाता है।
DB2:
Usage : POSSTR(<Filed_1>,<Field2>)
SELECT POSSTR('PostgreSQL and DB2', 'and') FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
Usage: POSITION(<Field_1> IN<Field_2>)
SELECT POSITION('and' IN'PostgreSQL and DB2');
रैंड
यह शून्य से एक समावेशी की सीमा में एक छद्म यादृच्छिक फ़्लोटिंग-पॉइंट मान देता है। आप PostgreSQL में RAND फ़ंक्शन को RANDOM से बदल सकते हैं।
DB2:
SELECT RAND() FROM SYSIBM.SYSDUMMY1;
पोस्टग्रेएसक्यूएल:
SELECT RANDOM();
आज श्वेतपत्र डाउनलोड करें क्लस्टर नियंत्रण के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, निगरानी करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करें टूल
आप DB2 डेटाबेस को PostgreSQL में माइग्रेट करने के लिए कुछ टूल का उपयोग कर सकते हैं। कृपया उपकरण का उपयोग करने से पहले उसका परीक्षण करें।
-
Db2topg
यह ora2pg की तरह DB2 से PostgreSQL माइग्रेशन के लिए एक स्वचालित उपकरण है। Db2pg टूल में स्क्रिप्ट यथासंभव DB2 UDB डेटाबेस में कनवर्ट करती है। यह उपकरण DB2 zOS के साथ कार्य नहीं करता है। इसका उपयोग करना बहुत आसान है, आपको अपने स्कीमा के SQL डंप की आवश्यकता है और फिर इसे PostgreSQL स्कीमा में बदलने के लिए db2pg स्क्रिप्ट का उपयोग करें।
-
पूर्ण रूपांतरित
एंटरप्राइज़ टूल तुरंत DB2 डेटाबेस को PostgreSQL में कॉपी करता है। Full Convert टूल का उपयोग करके DB2 का PostgreSQL डेटाबेस में रूपांतरण बहुत सरल है।
चरण:- स्रोत डेटाबेस यानी DB2 से कनेक्ट करें
- वैकल्पिक:वे तालिकाएँ चुनें जिन्हें आप कनवर्ट करना चाहते हैं (डिफ़ॉल्ट रूप से सभी चयनित तालिकाएँ)
- रूपांतरण प्रारंभ करें।
निष्कर्ष
जैसा कि हम देख सकते थे, DB2 से PostgreSQL में माइग्रेट करना कोई रॉकेट साइंस नहीं है, लेकिन हमें अपने सिस्टम में बड़े मुद्दों से बचने के लिए उस चीज़ को ध्यान में रखना होगा जो हमने पहले देखी थी। इसलिए, हमें केवल कार्य में सावधानी बरतने और आगे बढ़ने की आवश्यकता है, आप सबसे उन्नत ओपन सोर्स डेटाबेस में माइग्रेट कर सकते हैं और इसके लाभों का लाभ उठा सकते हैं।