2012-08-05 11 views
5

मैं PostgreSQL 9.1 का उपयोग कर रहा हूं। डिफ़ॉल्ट रूप से यूटीएफ 8 एन्कोडिंग को लागू करने की कोशिश कर रहा है।postgresql initdb के साथ क्या गलत हो रहा है? `यूटीएफ -8` एन्कोडिंग लागू क्यों नहीं हो रहा है?

यही वह है जो मैं कर रहा हूं।

service postgresql initdb -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype=locale='en_US.UTF-8'; 

हालांकि initilization प्रक्रिया बिना किसी समस्या के पर चला जाता है,

एक \lpsql प्रॉम्प्ट पर वहाँ का विवरण देता है।

      List of databases 
    Name | Owner |Encoding | Collate | Ctype | Access privileges 
-----------+----------+----------+---------+-------+----------------------- 
    postgres | postgres | LATIN1 | en_US | en_US| 

UTF-8 एन्कोडिंग लागू क्यों नहीं हो रहा है?

उत्तर

11

ऐसा लगता है कि आप ओएस के रनलेवल स्क्रिप्ट के माध्यम से initdb को कॉल कर रहे हैं। यह स्क्रिप्ट पैरामीटर पर पास नहीं हो सकता है। आप सीधे initdb निष्पादित करने का प्रयास करने की कोशिश करते हैं, आपको रूट के रूप में शुरू होने वाले निम्न चरणों को निष्पादित करने और डेटाबेस के लिए ओएस उपयोगकर्ता खाता पोस्ट करने की आवश्यकता होगी।

mkdir <your data dir> 
chown postgres <your data dir> 
su postgres 
initdb --pgdata=<your data dir> -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' 
+1

आप सही हैं। हालांकि मैं एक सुपरसियर के रूप में सीधे 'initdb' नहीं चला सका। एक 'initdb दिया गया: रूट के रूप में नहीं चलाया जा सकता है कृपया (अप्रकाशित) उपयोगकर्ता के रूप में लॉग इन करें (उदाहरण के लिए, "su") जो सर्वर प्रक्रिया का मालिक होगा।' त्रुटि। एक अप्रतिबंधित उपयोगकर्ता के रूप में लॉग इन करने के बाद मैं उचित एन्कोडिंग के साथ डीबी शुरू करने में सक्षम था। – ThinkingMonkey

+0

थोड़ा सा पिक्य होने के बारे में भूल गए, आदेशों के पूर्ण सेट के साथ उत्तर अपडेट किया गया हो सकता है। – Eelke

+1

हैलो दोस्तों! क्या आपको कोई विचार है कि मुझे क्यों मिलता है: ** initdb: अमान्य लोकेल नाम "'en_US.UTF-8'" **? मैंने उद्धरण के बिना भी कोशिश की है, लेकिन फिर मुझे ** initdb मिलता है: अमान्य लोकेल नाम "en_US.UTF-8" **। मैंने विंडोज के लिए Postgresql9.4.1 बाइनरी (इंस्टॉलर नहीं) डाउनलोड किया है। विंडोज़ बाइनरी में लोकेल en_US.UTF-8 उपलब्ध नहीं है? –

1

डेबियन PostgreSQL स्थापना स्वचालित रूप से initdb यानी यह डिफ़ॉल्ट एन्कोडिंग और स्थान के साथ क्लस्टर initializes कहता है। एन्कोडिंग बाद में बदला जा सकता है लेकिन लोकेल नहीं कर सकता है। स्थान (initdb में एक संभवतः अन्य विकल्प) बदलने के लिए, मौजूदा डिफ़ॉल्ट क्लस्टर हटा सकते हैं और एक नया बना:

Take root privileges. 
Run the following command: 



pg_dropcluster --stop <version> main 

For example: 

pg_dropcluster --stop 8.3 main 

Run the initdb with your options. For example: 

pg_createcluster --locale de_DE.UTF-8 --start 8.3 main 

चेतावनी!

पिछला ऑपरेशन क्लस्टर डेटाबेस में आपके पास जो कुछ भी था, उसे स्पष्ट रूप से हटा देता है। बेस पैकेज स्थापित करने के ठीक बाद इस ऑपरेशन को करें। यदि आप किसी मौजूदा डेटाबेस के लिए लोकेल को बदलना चाहते हैं तो यह PostgreSQL मैन्युअल जांचें (यह एक छोटा ऑपरेशन नहीं है)।

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