如何在PostgreSQL 8.4中创建Unicode数据库?


14

我使用默认选项安装了postgresql-8.4软件包。一切正常,但是我似乎无法设法创建unicode数据库:

-- This doesn't work
createdb test1 --encoding UNICODE

-- This works
createdb test2

错误消息,

createdb: database creation failed: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) 

有点令人困惑,因为(afaik)我没有使用模板来创建新的数据库,还是出于某种原因隐式地引用了默认的“ postgres”数据库?

或者,也许我缺少.conf文件中的设置?

Answers:


13

它所指的模板是template1,如果您未指定其他模板,则将隐式使用该模板。

最快的解决方法是template0改为使用来从中创建数据库createdb --template=template0

您可能希望删除并使用更合理的语言环境重新初始化整个集群。您可能已将操作系统设置为默认使用C语言环境。您可以通过以下步骤重新初始化数据库系统:

sudo pg_dropcluster --stop 8.4 main
sudo pg_createcluster --locale=en_US.utf8 --start 8.4 main

当然,可以使用任何您喜欢的语言环境。


删除集群以修改语言环境正是我想要的,谢谢:)
wildpeak

伙计们,经过大量的挖掘,这也是寻找的东西!没有其他方法可以使PG使用Ubuntu语言环境,甚至可以对其进行更改。但是,使用UTF8重新创建集群确实可以解决问题:)。干杯!
lucasarruda

您可能要使用--locale=C.UTF-8(使用列出系统上支持的语言环境locale -a)。
tricasse 2015年

3

也许您需要先配置语言环境才能创建集群

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

我认为这对我有用!
alfonx

dpkg-reconfigure需要sudo ...
Cerin

-1

我想你的意思是:

createdb test42 --encoding utf-8

那应该做你想要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.