2012-08-05 27 views
5

我正在使用PostgreSQL 9.1。試圖強制默認使用UTF8編碼。postgresql initdb出了什麼問題?爲什麼「UTF-8」編碼沒有得到執行?

這就是我正在做的。

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

雖然動初始化過程的推移,沒有任何問題,

一個\lpsql提示提供有詳細介紹。

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

爲什麼UTF-8編碼沒有得到強制執行?

回答

11

看起來像通過操作系統的運行級腳本調用initdb。該腳本可能不會傳遞參數。您最好直接嘗試執行initdb,您將需要以root身份執行以下步驟,並假定數據庫的操作系統用戶帳戶是postgres。

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:不能以root身份運行 請以((非特權))用戶身份登錄(例如使用「su」),該用戶將擁有服務器進程。以非特權用戶身份登錄後,我能夠使用正確的編碼來初始化數據庫。 – ThinkingMonkey 2012-08-05 08:38:14

+0

忘了它有點挑剔,用可能需要的全套命令更新了答案。 – Eelke 2012-08-05 08:49:27

+1

你好!你有什麼想法爲什麼我會得到:** initdb:無效的區域設置名稱「'en_US.UTF-8'」**?我也試過沒有引號,但後來我得到** initdb:無效的區域設置名稱「en_US.UTF-8」**。我已經下載了Windows的Postgresql9.4.1二進制文件(不是安裝程序)。語言環境en_US.UTF-8在Windows二進制文件中不可用? – 2015-03-16 09:51:12

1

Debian PostgreSQL安裝會自動調用initdb,即它使用默認編碼和區域設置初始化羣集。編碼可以稍後更改,但區域設置不能。更改地區(在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手冊(這不是一項簡單的操作)。