मुझे PostgreSQL 8.2.x डेटाबेस को किसी अन्य सर्वर पर स्थानांतरित करने के लिए कार्य दिया गया था। ऐसा करने के लिए मैं pgAdmin 1.12.2 का उपयोग कर रहा हूं (जिस तरह से Ubuntu 11.04 पर) और बैकअप और पुनर्स्थापना का उपयोग करके कस्टम / संपीड़ित प्रारूप (.backup) और UTF8 एन्कोडिंग का उपयोग कर रहा हूं।
मूल डेटाबेस UTF8 में है, जैसे:
-- Database: favela
-- DROP DATABASE favela;
CREATE DATABASE favela
WITH OWNER = favela
ENCODING = 'UTF8'
TABLESPACE = favela
CONNECTION LIMIT = -1;
मैं इस डेटाबेस को बिल्कुल गंतव्य सर्वर पर इस तरह बना रहा हूं। लेकिन जब मैं पुनर्स्थापना विकल्प का उपयोग करके डेटाबेस को .backup फ़ाइल से पुनर्स्थापित करता हूं तो यह मुझे इनमें से कुछ त्रुटियां देता है:
pg_restore: restoring data for table "arena"
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2173; 0 35500 TABLE DATA arena favela
pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0xe3a709
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
CONTEXT: COPY arena, line 62
जब मैं यह जांचता हूं कि किस रिकॉर्ड ने इस त्रुटि को ट्रिगर किया है तो वास्तव में कुछ वार्टेक्ट फ़ील्ड में ç (जैसे पुर्तगाली में उपयोग किए जाने वाले चरित्र वर्णक होते हैं, उदाहरण के लिए, "caça"), और जब मैं मैन्युअल रूप से उन्हें पाठ से हटाता हूं, तो रिकॉर्ड अगले रिकॉर्ड में पास हो जाता है उनके पास है - क्योंकि जब कॉपी में त्रुटि होती है तो वह इस टेबल पर डेटा डालना बंद कर देता है। और मैं इसे पूरा करने के लिए एक-एक करके उन्हें मैन्युअल रूप से बदलना नहीं चाहता।
लेकिन यह अजीब है क्योंकि UTF8 के साथ इस तरह की समस्याएं नहीं होनी चाहिए, है ना?
मुझे नहीं पता कि वे पहली जगह में वहां कैसे पहुंचे। मैं केवल डेटाबेस को माइग्रेट कर रहा हूं, और मुझे लगता है कि किसी तरह डेटाबेस LATIN1 में था और फिर अनुचित रूप से UTF8 में बदल गया था।
क्या यह जांचने का कोई तरीका है कि क्या तालिका / डेटाबेस में UTF8 अनुक्रम अमान्य हैं? या इन वर्णों को UFT8 में लागू करने / पुन: स्वरूपित करने का कोई तरीका ताकि मैं किसी भी समस्या में भाग न लूं जब मैं पुनर्स्थापना को निष्पादित करूं?
अग्रिम में धन्यवाद।