2015-02-13 8 views
9

मेरे पास दो पोस्टग्रेस 9.3 सर्वर सिंक्रोनस प्रतिकृति में हैं।PgAdmin III, खोलने वाला सर्वर स्थिति "यूटीएफ 8 एन्कोडिंग के लिए अमान्य बाइट अनुक्रम"

recovery.conf में एक नया archive_cleanup_command लोड करने के लिए मुझे दास को पुनरारंभ करने की आवश्यकता थी।

सर्वर सही ढंग से पुनरारंभ किया गया और अब यह पूरी तरह से मास्टर सर्वर के साथ सिंक हो गया है।

लेकिन जब मैं खोलने pgAdmin III में गुलाम सर्वर (जो निष्पादन मास्टर सर्वर पर स्थित है) के लिए "सर्वर स्थिति" पैनल, मैं कुछ त्रुटियाँ इस तरह मिलती है:

invalid byte sequence for encoding “UTF8” प्लस कुछ हेक्स कोड

enter image description here

क्योंकि मैं archive_cleanup_command एक टिल्ड ~ शब्दों में कहें, लेकिन यह काम नहीं किया था यह हो सकता है, तो मैं इसे हटा दिया और आदेश सही ढंग से काम किया।

2015-02-13 11:11:32 CET ERROR: invalid byte sequence for encoding “UTF8”: 0xe8 0x20 0x73 
2015-02-13 11:11:32 CET STATEMENT: SELECT pg_file_read('pg_log/postgresql-2015-02-13_111038.log', 0, 50000) 
:

हो सकता है कि ~ कहीं लिखा गया है और यह एक वैध चार नहीं है ... लेकिन मैं यह भी नष्ट कर दिया लॉग ...

गुलाम सर्वर लॉग निम्नलिखित की तरह लाइनों की एक बहुत है

ध्यान दें कि postgresql-2015-02-13_111038.log अंतिम लॉग है, जिसकी मुझे इन पंक्तियां मिलीं।

+0

आपके पास कॉन्फ़िगरेशन पैरामीटर 'lc_messages' सेट क्या है? यह भी देखें [यह फ्रेंच मंच पोस्ट] (http://forums.postgresql.fr/viewtopic.php?id=1258) और [यह बग रिपोर्ट] (http://www.postgresql.org/message-id/201009161112। [email protected]) – harmic

+0

यह जानने के लिए भी प्रासंगिक है: आप इन डेटाबेस को किस ओएस पर चल रहे हैं? – harmic

+0

@ हार्मिक: विंडोज 7। – Teejay

उत्तर

0

यह आपके postgresql.log को दूषित 'pf_file_read ....' कथन में बताए गए दूषित होने के कारण है।

यदि आप सर्वर लॉग पर "स्पर्श" (शायद आपके लॉग के बैकअप के बाद) करते हैं, और फिर से कनेक्ट करते हैं, तो आपको अब यह यूनिकोड त्रुटि दिखाई नहीं देगी और इस प्रकार, आप pgadmin III को और अधिक उपयोग करने में सक्षम होंगे ।

+1

मुझे नहीं लगता कि कैसे 'स्पर्श' *** *** *** एक भ्रष्ट फ़ाइल हो सकता है। .. जिस तरह से मैंने पूरी तरह से लॉग हटाने की कोशिश की ... – Teejay

4

आपके पास समस्या यह है कि लोकेल सेटिंग lc_messages डेटाबेस एन्कोडिंग के लिए अलग एन्कोडिंग पर सेट है। नतीजतन, कुछ संदेशों को विंडोज -1252 एन्कोडिंग का उपयोग करके लॉग में लिखा जा रहा है, जबकि जब आप लॉग देखने के लिए PgAdmin का उपयोग करने का प्रयास करते हैं, तो यह यूटीएफ -8 का उपयोग कर फ़ाइल की व्याख्या करने का प्रयास करता है। लॉग में लिखे गए कुछ बाइट अनुक्रम वैध यूटीएफ -8 मान्य नहीं हैं, जिससे त्रुटि उत्पन्न होती है।

असल में, जिस तरह से अलग-अलग लोकल पोस्टग्रेस्क्ल में इंटरैक्ट करते हैं, परिणामस्वरूप लॉग फ़ाइल में मिश्रित एन्कोडिंग हो सकती है। इस पर Bug Report है, लेकिन ऐसा लगता है कि यह हल हो गया है।

शायद इसे हल करने का सबसे आसान तरीका lc_messages से English_United States.UTF-8 पर सेट करना है।

यह भी lc_messages सर्वर पर सभी डेटाबेस (या कम से कम सभी एक ही एन्कोडिंग का उपयोग कर) में गठबंधन करना बेहतर होगा।

किसी मौजूदा लॉग फ़ाइलों को निकालना सुनिश्चित करें क्योंकि उनमें पहले से ही गलत एन्कोडिंग होगा।

+0

उत्तर के लिए धन्यवाद। लेकिन, क्या आप सुनिश्चित हैं कि सही मान 'english_United States.UTF-8' है? '" अंग्रेजी_United States.1252 "के लिए Google को खोजना, मुझे लगभग 15 ** के ** परिणाम मिलते हैं, '' अंग्रेज़ी_ संयुक्त राज्य .UTF-8 'खोजते हैं,' मुझे केवल 5 तक ले जाता है। – Teejay

+0

@Teejay '1252' संदेशों को लिखते समय विंडोज -1252 एन्कोडिंग का उपयोग करने के लिए निर्दिष्ट करता है। डेटाबेस 'pg_file_read' फ़ंक्शन के माध्यम से संदेश पढ़ने के बाद से यूटीएफ -8 एन्कोडिंग की अपेक्षा करता है, जो काम नहीं कर सकता है। हालांकि मुझे संदेह है कि यह काम कर सकता है क्योंकि अंग्रेजी (मूल रूप से ASCII) में वर्णित वर्णों का सबसेट दोनों एन्कोडिंग प्रकारों में एन्कोड किया जाता है। – harmic

+0

जिसने मेरी एक ही समस्या को हल किया। इसे स्वीकार किया जाना चाहिए। – Matthieu

संबंधित मुद्दे