आपको इस सर्वरफॉल्ट पृष्ठ में स्वीकृत उत्तर में कुछ उपयोगी जानकारी प्राप्त करने में सक्षम होना चाहिए:https://serverfault.com/questions/65407/best-tool-to-migrate-a-postgresql-database-to-ms-sql- 2005.
यदि आप डेटा के बिना स्कीमा परिवर्तित करवा सकते हैं, तो आप इस आदेश का उपयोग करके डेटा के चरणों को छोटा करने में सक्षम हो सकते हैं:
pg_dump --data-only --column-inserts your_db_name > data_load_script.sql
यह लोड काफी धीमा होगा, लेकिन --column-inserts
विकल्प डेटा की प्रत्येक पंक्ति के लिए संभव सबसे सामान्य INSERT विवरण उत्पन्न करता है और संगत होना चाहिए।
संपादित करें:स्कीमा को परिवर्तित करने के सुझाव इस प्रकार हैं:
मैं स्कीमा को डंप करके शुरू करूंगा, लेकिन स्वामित्व या अनुमतियों से संबंधित किसी भी चीज को हटा दूंगा। यह पर्याप्त होना चाहिए:
pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql
लाइन जोड़ने के लिए इस फ़ाइल को संपादित करें BEGIN TRANSACTION;
शुरुआत तक और ROLLBACK TRANSACTION;
अंत तक। अब आप इसे लोड कर सकते हैं और इसे SQL सर्वर में एक क्वेरी विंडो में चला सकते हैं। यदि आपको कोई त्रुटि मिलती है, तो सुनिश्चित करें कि आप फ़ाइल के निचले भाग में जाते हैं, रोलबैक स्टेटमेंट को हाइलाइट करें और इसे चलाएं (स्टेटमेंट हाइलाइट होने पर F5 दबाकर)।
मूल रूप से, आपको प्रत्येक त्रुटि को तब तक हल करना होगा जब तक कि स्क्रिप्ट साफ-सुथरी न हो जाए। फिर आप ROLLBACK TRANSACTION
को बदल सकते हैं करने के लिए COMMIT TRANSACTION
और एक अंतिम बार चलाएं।
दुर्भाग्य से, मैं आपकी मदद नहीं कर सकता कि आप किन त्रुटियों को देख सकते हैं क्योंकि मैं कभी भी PostgreSQL से SQL सर्वर पर नहीं गया, केवल दूसरी तरफ। कुछ चीजें जो मुझे एक मुद्दा होने की उम्मीद है, हालांकि (जाहिर है, एक विस्तृत सूची नहीं):
- PostgreSQL
NOT NULL INTEGER
को लिंक करके फ़ील्ड को ऑटो-इन्क्रीमेंट करता हैSEQUENCE
. के लिए फ़ील्ड एकDEFAULT
. का उपयोग करना . SQL सर्वर में, यह एकIDENTITY
है कॉलम, लेकिन वे बिल्कुल वही चीज़ नहीं हैं। मुझे यकीन नहीं है कि वे समकक्ष हैं, लेकिन यदि आपका मूल स्कीमा "आईडी" फ़ील्ड से भरा है, तो आप कुछ परेशानी में हो सकते हैं। मुझे नहीं पता कि SQL सर्वर मेंCREATE SEQUENCE
है या नहीं , इसलिए आपको उन्हें हटाना पड़ सकता है। - डेटाबेस फ़ंक्शन / संग्रहीत कार्यविधियाँ RDBMS प्लेटफ़ॉर्म के बीच अनुवाद नहीं करती हैं। आपको कोई भी
CREATE FUNCTION
को निकालना होगा कथन और एल्गोरिदम का मैन्युअल रूप से अनुवाद करें। - डेटा फ़ाइल की एन्कोडिंग के बारे में सावधान रहें। मैं एक लिनक्स व्यक्ति हूं, इसलिए मुझे नहीं पता कि विंडोज़ में एन्कोडिंग को कैसे सत्यापित किया जाए, लेकिन आपको यह सुनिश्चित करने की ज़रूरत है कि SQL सर्वर जो अपेक्षा करता है वह वही फ़ाइल है जिसे आप PostgreSQL से आयात कर रहे हैं।
pg_dump
एक विकल्प है--encoding=
जो आपको एक विशिष्ट एन्कोडिंग सेट करने देगा। मुझे याद है कि विंडोज़ यूनिकोड के लिए दो-बाइट, यूटीएफ -16 एन्कोडिंग का उपयोग करता है जहां पोस्टग्रेएसक्यूएल यूटीएफ -8 का उपयोग करता है। मुझे UTF-16 आउटपुट के कारण SQL सर्वर से PostgreSQL पर जाने में कुछ समस्या थी, इसलिए यह शोध के लायक होगा। - पोस्टग्रेएसक्यूएल डेटाटाइप
TEXT
बस एकVARCHAR
है अधिकतम लंबाई के बिना। SQL सर्वर में,TEXT
है... जटिल (और पदावनत)। आपके मूल स्कीमा में प्रत्येक फ़ील्ड जिसेTEXT
. के रूप में घोषित किया गया है उपयुक्त SQL सर्वर डेटा प्रकार के लिए समीक्षा करने की आवश्यकता होगी। - SQL सर्वर में
UNICODE
के लिए अतिरिक्त डेटा प्रकार हैं जानकारी। मैं सुझाव देने के लिए इससे पर्याप्त परिचित नहीं हूँ। मैं सिर्फ इशारा कर रहा हूं कि यह एक मुद्दा हो सकता है।