जैसा कि आप जानते हैं, Microsoft SQL सर्वर अत्यधिक प्रतिबंधात्मक लाइसेंसिंग और स्वामित्व की उच्च लागत के साथ बहुत लोकप्रिय RDBMS है यदि डेटाबेस महत्वपूर्ण आकार का है, या ग्राहकों की एक बड़ी संख्या द्वारा उपयोग किया जाता है। यह एक बहुत ही उपयोगकर्ता के अनुकूल इंटरफेस और सीखने में आसान प्रदान करता है। इसके परिणामस्वरूप एक बड़ा स्थापित उपयोगकर्ता आधार बन गया है।
PostgreSQL दुनिया का सबसे उन्नत ओपन सोर्स डेटाबेस है। PostgreSQL समुदाय बहुत मजबूत है और मौजूदा सुविधाओं में लगातार सुधार कर रहा है और नई सुविधाओं को लागू कर रहा है। डीबी-इंजन लोकप्रियता रैंक के अनुसार, पोस्टग्रेएसक्यूएल वर्ष 2017 का डीबीएमएस था।
MS SQL सर्वर से PostgreSQL में माइग्रेट क्यों करें?
- MS SQL सर्वर Microsoft का एक मालिकाना डेटाबेस है, जबकि PostgreSQL को ओपन सोर्स डेवलपर्स के एक वैश्विक समुदाय द्वारा विकसित और रखरखाव किया जाता है। यदि लागत एक मुद्दा है, तो निश्चित रूप से आपको PostgreSQL के साथ जाना चाहिए। आप यहां मूल्य निर्धारण की जांच कर सकते हैं।
- PostgreSQL एक क्रॉस प्लेटफॉर्म डेटाबेस इंजन है और यह विंडोज, मैक, सोलारिस, फ्रीबीएसडी और लिनक्स के लिए उपलब्ध है जबकि SQL सर्वर केवल विंडोज ऑपरेटिंग सिस्टम पर चलता है। जैसा कि आप जानते हैं, PostgreSQL खुला स्रोत है और पूरी तरह से मुफ़्त है जबकि MSSQL सर्वर की लागत उपयोगकर्ताओं की संख्या और डेटाबेस आकार पर निर्भर करती है।
- लचीला खुला स्रोत लाइसेंसिंग और सार्वजनिक क्लाउड प्रदाताओं जैसे AWS, Google क्लाउड आदि से आसान उपलब्धता।
- प्रदर्शन को बेहतर बनाने के लिए ओपन सोर्स ऐड-ऑन का लाभ उठाएं।
आपको क्या पता होना चाहिए
हालाँकि Microsoft SQL Server डेटाबेस और PostgreSQL डेटाबेस दोनों ANSI-SQL के अनुरूप हैं, लेकिन उनके SQL सिंटैक्स, डेटा प्रकार, केस संवेदनशीलता के बीच अभी भी अंतर हैं, और यह डेटा को इतना तुच्छ नहीं बनाता है।
माइग्रेशन से पहले, MSSQL और PostgreSQL के बीच के अंतरों को समझें। दोनों डेटाबेस में कई विशेषताएं हैं इसलिए आपको MSSQL और PostgreSQL में उन सुविधाओं / कार्यों के व्यवहार को जानना चाहिए। कृपया कुछ महत्वपूर्ण अंतरों की जाँच करें जिन्हें आपको माइग्रेशन से पहले पता होना चाहिए।
डेटा प्रकार मैपिंग
MSSQL के कुछ डेटा प्रकार सीधे PostgreSQL डेटा प्रकारों से मेल नहीं खाते हैं, इसलिए आपको इसे संबंधित PostgreSQL डेटा प्रकार में बदलना होगा।
कृपया नीचे दी गई तालिका देखें।
Microsoft SQL Server | PostgreSQL | |
---|---|---|
बिगिनट | 64-बिट पूर्णांक | बिगिनट |
बाइनरी(n) | निश्चित लंबाई बाइट स्ट्रिंग | BYTEA |
बिट | 1, 0 या NULL | बूलियन |
CHAR(n) | निश्चित लंबाई चार स्ट्रिंग, 1 <=n <=8000 | CHAR(n) |
VARCHAR(n) | चर लंबाई चार स्ट्रिंग, 1 <=n <=8000 | VARCHAR(n) |
VARCHAR(अधिकतम) | चर लंबाई चार स्ट्रिंग, <=2GB | पाठ |
VARBINARY(n) | चर लंबाई बाइट स्ट्रिंग, 1 <=n <=8000 | BYTEA |
VARBINARY(अधिकतम) | परिवर्तनीय लंबाई बाइट स्ट्रिंग, <=2GB | BYTEA |
NVARCHAR(n) | परिवर्तनीय लंबाई यूनिकोड UCS-2 स्ट्रिंग | VARCHAR(n) |
NVARCHAR(अधिकतम) | परिवर्तनीय लंबाई यूनिकोड UCS-2 डेटा, <=2GB | पाठ |
पाठ | परिवर्तनीय लंबाई वर्ण डेटा, <=2GB | पाठ |
NTEXT | परिवर्तनीय लंबाई यूनिकोड UCS-2 डेटा, <=2GB | पाठ |
दोहरा सटीक | दोहरी सटीक फ़्लोटिंग पॉइंट संख्या | डबल सटीक |
फ्लोट(पी) | अस्थायी बिंदु संख्या | डबल सटीक |
पूर्णांक | 32 बिट पूर्णांक | पूर्णांक |
NUMERIC(p,s) | निश्चित बिंदु संख्या | NUMERIC(p,s) |
दिनांक | तिथि में वर्ष, माह और दिन शामिल हैं | दिनांक |
DATETIME | अंश के साथ दिनांक और समय | टाइमस्टैम्प(3) |
DATETIME2(p) | अंश के साथ दिनांक और समय | टाइमस्टैम्प(n) |
DATETIMEOFFSET(p) | अंश और समय क्षेत्र के साथ दिनांक और समय | टाइम ज़ोन के साथ टाइमस्टैम्प(p) |
SMALLDATETIME | तारीख और समय | टाइमस्टैम्प(0) |
टिन्यिनट | 8 बिट अहस्ताक्षरित पूर्णांक, 0 से 255 तक | स्मालिंट |
UNIQUEIDENTIFIER | 16 बाइट GUID(UUID) डेटा | CHAR(16) |
रोवर्शन | स्वचालित रूप से अपडेट किया गया बाइनरी डेटा | BYTEA |
स्मॉलमनी | 32 बिट मुद्रा राशि | पैसा |
छवि | परिवर्तनीय लंबाई बाइनरी डेटा, <=2GB | BYTEA |
MS SQL सर्वर और PostgreSQL में असंगतताएं
MS SQL Server और PostgreSQL में कई असंगतियाँ मौजूद हैं, आप उनमें से कुछ यहाँ देख सकते हैं। आप एक्सटेंशन बनाकर उन्हें स्वचालित कर सकते हैं ताकि आप MS SQL सर्वर फ़ंक्शन का उपयोग कर सकें जैसा कि PostgreSQL में है और आप अपना समय बचा सकते हैं।
डेटपार्ट
PostgreSQL में DATEPART को DATE_PART से बदला जाना चाहिए।
उदाहरण
एमएस एसक्यूएल:
DATEPART( datepart , date )
पोस्टग्रेएसक्यूएल:
date_part( text , timestamp )
date_part( text , interval )
ISNULL
ISNULL फ़ंक्शन को PostgreSQL में COALESCE फ़ंक्शन द्वारा प्रतिस्थापित किया जाना चाहिए।
उदाहरण
एमएस एसक्यूएल सर्वर:
ISNULL(exp, replacement)
पोस्टग्रेएसक्यूएल:
COALESCE(exp, replacement)
स्पेस
MS SQL सर्वर में SPACE फ़ंक्शन को PostgreSQL में REPEAT फ़ंक्शन द्वारा प्रतिस्थापित किया जाना चाहिए।
उदाहरण
एमएस एसक्यूएल सर्वर:
SPACE($n)
जहां $n लौटाए जाने वाले रिक्त स्थान की संख्या है।
पोस्टग्रेएसक्यूएल:
REPEAT(‘ ’, $n)
DATEADD
PostgreSQL MS SQL सर्वर के समान DATEADD फ़ंक्शन प्रदान नहीं करता है, आप समान परिणाम प्राप्त करने के लिए अंतराल शाब्दिक के साथ डेटाटाइम अंकगणित का उपयोग कर सकते हैं।
उदाहरण
एमएस एसक्यूएल सर्वर:
--Add 2 day to the current date
SELECT DATEADD(day, 2, GETDATE());
पोस्टग्रेएसक्यूएल:
--Add 2 day to the current date
SELECT CURRENT_DATE + INTERVAL ‘2 day’;
स्ट्रिंग संयोजन
MS SQL सर्वर String Concatenation के लिए '+' का उपयोग करता है जबकि PostgreSQL उसी के लिए '||' का उपयोग करता है।
उदाहरण
एमएस एसक्यूएल सर्वर:
SELECT FirstName + LastName FROM employee;
पोस्टग्रेएसक्यूएल:
SELECT FirstName || LastName FROM employee;
CHARINDEX
PostgreSQL में CHARINDEX फ़ंक्शन है। आप इस फ़ंक्शन को PostgreSQL समकक्ष POSITION फ़ंक्शन द्वारा प्रतिस्थापित कर सकते हैं।
उदाहरण
एमएस एसक्यूएल सर्वर:
SELECT CHARINDEX('our', 'resource');
पोस्टग्रेएसक्यूएल:
SELECT POSITION('our' in 'resource');
GETDATE
GETDATE फ़ंक्शन वर्तमान दिनांक और समय लौटाता है। PostgreSQL में कोई GETDATE फ़ंक्शन नहीं है, लेकिन उसी उद्देश्य के लिए Now() फ़ंक्शन है। यदि GETDATE फ़ंक्शन की एक से अधिक आवृत्तियां हैं तो आप एक्सटेंशन का उपयोग करके उन्हें स्वचालित कर सकते हैं। कृपया जांचें कि एक्सटेंशन का उपयोग करके मॉड्यूल कैसे बनाएं।
उदाहरण
एमएस एसक्यूएल सर्वर:
SELECT GETDATE();
पोस्टग्रेएसक्यूएल:
SELECT NOW();
टूल
MS SQL Server डेटाबेस को PostgreSQL में माइग्रेट करने के लिए आप कुछ टूल का उपयोग कर सकते हैं। कृपया उपकरण का उपयोग करने से पहले उसका परीक्षण करें।
-
पीजीलोडर
MS SQL डेटाबेस को PostgreSQL में माइग्रेट करने के लिए आप pgloader टूल का उपयोग कर सकते हैं। pgloader में कमांड MS SQL डेटाबेस से डेटा लोड करते हैं। Pgloader स्कीमा की स्वचालित खोज का समर्थन करता है, जिसमें अनुक्रमणिका का निर्माण, प्राथमिक कुंजी और विदेशी कुंजी बाधाएं शामिल हैं।
Pgloader विभिन्न कास्टिंग नियम प्रदान करता है जो MS SQL डेटा प्रकार को PostgreSQL डेटा प्रकार में परिवर्तित कर सकता है।
-
एसक्लसर्वर2pgsql
Microsoft SQL सर्वर डेटाबेस को PostgreSQL डेटाबेस में यथासंभव स्वचालित रूप से परिवर्तित करने के लिए यह एक और ओपन सोर्स माइग्रेशन टूल है। Sqlserver2pgsql पर्ल में लिखा गया है।
Sqlserver2pgsql टूल दो काम करता है:
- यह SQL सर्वर स्कीमा को PostgreSQL स्कीमा में कनवर्ट करता है
- यह SQL सर्वर से PostgreSQL में सभी डेटा माइग्रेट करने के लिए एक पेंटाहो डेटा इंटीग्रेटर (केटल) जिब का उत्पादन कर सकता है। यह एक वैकल्पिक हिस्सा है।
परीक्षण
एप्लिकेशन और माइग्रेट किए गए डेटाबेस का परीक्षण करना बहुत महत्वपूर्ण है क्योंकि दोनों डेटाबेस में कुछ फ़ंक्शन समान हैं, हालांकि, व्यवहार अलग है।
कुछ सामान्य परिदृश्यों की जाँच करने की आवश्यकता है:
- जांचें कि सभी डेटाबेस ऑब्जेक्ट सही ढंग से रूपांतरित हैं या नहीं।
- जांचें कि डीएमएल में सभी कार्यों का व्यवहार सही ढंग से काम कर रहा है या नहीं।
- दोनों डेटाबेस में नमूना डेटा लोड करें और दोनों डेटाबेस में सभी डीएमएल प्रश्नों के परिणाम की जांच करें। सभी SQL का परिणाम समान होना चाहिए।
- DML के प्रदर्शन की जाँच करें और यदि आवश्यक हो तो इसे सुधारें।