postgresql initdb出了什么问题?为什么`UTF-8`编码没有得到强制执行?

时间:2012-08-05 07:39:53

标签: database postgresql postgresql-9.1

我正在使用PostgreSQL 9.1。尝试将UTF8编码强制为默认值。

这就是我在做的事。

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

虽然启动过程没有任何问题,但

\l提示符下的psql会提供详细信息。

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

为什么UTF-8编码没有得到强制执行?

2 个答案:

答案 0 :(得分:11)

看起来您正在通过操作系统的运行级别脚本调用initdb。此脚本可能不会传递参数。您最好直接尝试执行initdb,您需要以root身份执行以下步骤,并假设数据库的OS用户帐户是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 :(得分: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手册(这不是一个简单的操作)。