2011-02-08 14 views
7

के लिए लिनक्स पर लोकेल को कॉन्फ़िगर करना मुझे एक विशेष डेटाबेस सेट अप और चलने में परेशानी हो रही है। मैं किसी और से प्राप्त postgreSQL डंप को पुनर्स्थापित करने की कोशिश कर रहा हूं। मैंने कुछ तरीकों का कोई फायदा नहीं लिया है।PostgreSQL

  1. सीधे pg_restore से

    pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql

  2. डेटाबेस और टेबल-स्पेस पहले बनाना

    createdb -T template0 maggieprod -E LATIN1

    एसक्यूएल: CREATE TABLESPACE magdat OWNER maggie LOCATION '/somewhere/magdat';

    pg_restore -v -d template1 maggie_prod_20110121.dump.sql

पहली विधि मैं निम्नलिखित का उपयोग करना:

pg_restore: [archiver (db)] Error while PROCESSING TOC:

pg_restore: [archiver (db)] Error from TOC entry 2308; 1262 16386 DATABASE maggieprod postgres

pg_restore: [archiver (db)] could not execute query: ERROR: encoding LATIN1 does not match locale en_CA.utf8

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8. Command was: CREATE DATABASE maggieprod WITH TEMPLATE = template0 ENCODING = 'LATIN1' TABLESPACE = magdat;

एक d सेकंड का उपयोग कर, जब मैं कोशिश करते हैं और डेटाबेस मैं बनाने के लिए:

createdb: database creation failed: ERROR: encoding LATIN1 does not match locale en_CA.utf8

DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.

तो यह है कि मैं एक latin1 एन्कोडिंग डेटाबेस नहीं बना सकते है? ऐसा क्यों है? मैं स्थानीय और एन्कोडिंग के लिए नया हूं और उनके बारे में बहुत कुछ नहीं जानता। मुझे बस पता है कि डंप को LATIN1 डेटाबेस से हटा दिया गया था।

locale के उत्पादन में है:

LANG=en_CA.utf8 LC_CTYPE="en_CA.utf8" LC_NUMERIC="en_CA.utf8" LC_TIME="en_CA.utf8" LC_COLLATE="en_CA.utf8" LC_MONETARY="en_CA.utf8" LC_MESSAGES="en_CA.utf8" LC_PAPER="en_CA.utf8" LC_NAME="en_CA.utf8" LC_ADDRESS="en_CA.utf8" LC_TELEPHONE="en_CA.utf8" LC_MEASUREMENT="en_CA.utf8" LC_IDENTIFICATION="en_CA.utf8" LC_ALL=

और locale -a के उत्पादन में है:

C en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZW.utf8 POSIX

मैं, दूसरे आदेश में latin1 नहीं दिख रहा होना चाहिए? यदि हां, तो मैं इसे जोड़ने के बारे में कैसे जाऊं? क्या यह मेरे लिए यह सही है कि मुझे अपने कंप्यूटर पर लोकेल बदलने की ज़रूरत है? यदि हां, तो क्या केवल postgreSQL के लिए ऐसा करने का कोई तरीका है? साथ ही, जब मैं डंप की कोशिश करता हूं और खोलता हूं तो मुझे बहुत सारे कचरे के पात्र दिखाई देते हैं, मुझे लगता है कि यह एन्कोडिंग की वजह से है, मैं इसे ठीक से कैसे देखूं?

किसी भी मदद के लिए धन्यवाद।

उत्तर

6

आप एक स्थान है कि एन्कोडिंग से मेल खाती, उदा डेटाबेस बनाने के लिए

createdb -T template0 maggieprod -E LATIN1 --locale=en_CA 

जब से तुम सभी स्थानों के स्थापित नहीं है, मुझे लगता है आप डेबियन या Ubuntu उपयोग कर रहे जरूरत है। उस स्थिति में, dpkg-reconfigure locales पर कॉल करें या locales-all पैकेज स्थापित करें।

वैकल्पिक रूप से, UTF8 एन्कोडिंग के साथ डेटाबेस बनाएं। जब तक आपके सभी क्लाइंट क्लाइंट एन्कोडिंग को सही ढंग से सेट करते हैं, तो इससे कोई फर्क नहीं पड़ता है।

1

मैं मुसीबत The_Denominater से createdb सिंटैक्स का उपयोग किया था, तो मैं यह नीचे दिए तरीक़े किया:

CREATE DATABASE maggieprod WITH ENCODING = 'LATIN1' 
    LC_CTYPE = 'en_CA' LC_COLLATE = 'en_CA' 
    TEMPLATE template0; 
0

आप अभी भी recode आदेश का उपयोग कर अपनी पसंद के वर्ण सेट करने के लिए अपने डेटाबेस डंप बदल सकते हैं रुचि रखते हैं इससे पहले कि आप इसे अपने नए डेटाबेस में आयात करें। यह लिंक देखें - http://blog.e-shell.org/134