PostgreSQL 9.1安装和数据库编码

6
我刚在Ubuntu 10.04上第一次安装了PostgreSQL 9.1。请注意:我以前用Windows安装过几次,并且使用安装程序没有出现任何问题。
经过一番努力,我成功地通过pgAdminIII远程连接到它。然而,在连接到数据库后,我很惊讶地收到了有关编码的警告。 "postgres"数据库本身是用"SQL_ASCII"编码创建的。每次在Windows上安装时,它都会使用"UTF8"创建postgres DB-这似乎会更好,并且会在通过pgAdminIII打开数据库时停止警告消息。
我做错了什么吗?有没有安装选项/参数来设置要使用的默认编码?
还有没有解决方法?我在网上看到一些东西,说你需要转储和恢复才能更改数据库的编码,但我不确定这是否在postgres db上可行。是吗?
感谢您的帮助!
3个回答

11
相关选项是--locale=locale,用于初始化数据库集群的initdb命令。如果您没有明确提供它,则默认为系统语言环境。(您可能在' C '语言环境下运行Ubuntu。)
在这里阅读更多关于此的优秀手册
在PostgreSQL中,您仍然可以通过以template0为基础创建新数据库来偷偷地使用不同的语言环境,而不是默认的templeate1。我在这里引用手册:

编码和语言环境设置必须与模板数据库匹配,除非将template0用作模板。

但是,我宁愿使用所需的语言环境重新创建数据库集群。更加干净。

编辑:可用区域设置信息

您只能使用操作系统提供的区域设置。我在这里引用手册:

您的系统上可用的区域设置以及对应名称取决于操作系统供应商提供的内容以及安装情况。在大多数Unix系统上,命令locale -a将提供可用区域设置的列表。Windows使用更详细的区域设置名称,例如German_Germany或Swedish_Sweden.1252,但原则是相同的。

如果您想使用尚未生成的区域设置,请在Unix系统中查看locale-gen。重要的是要了解,可以在您的操作系统中安装多个区域设置,但只能为诸如LC_CTYPELC_COLLATE等系统参数选择一个。请在shell中查看localelocale -a的输出。通常所有设置都相同,通过LC_ALL设置。

@David:你所做的可能已经解决了你的问题,但是你可以更轻松地完成。此外,请注意环境变量LANG仅为所有语言环境提供默认值。如果其中任何一个设置为其他内容,则LANG将被覆盖。设置LC_ALL以覆盖任何现有设置。这里是许多网站之一在网络上告诉您更多信息。

要检查数据库(集群)的所有当前语言环境设置,请在数据库中运行:

SHOW ALL;

更具体地说:

SELECT *
FROM   pg_settings
WHERE  name ~~ 'lc%';

谢谢回复!让我试一下,然后我会发布更新和评论等。再次感谢! - David S

10

Erwin Brandstetter提供的答案很有帮助,但出于某种原因,它对我不起作用。原因是我无法初始化initdb。每次尝试以locale运行时,都会收到“bash: command not found”错误提示。我最终做的是:

更改操作系统的locale。对我来说,这是:

$ update-locale LANG=en_US.UTF-8
注:然后我必须重新启动服务器。 为了确认它是否起作用,只需运行:

Note: 然后我必须重新启动服务器。 为了确认它是否起作用,只需运行:

$ locale

设置完成后,我停止并删除了该集群:

$ su postgres
$ pg_dropcluster --stop 9.1 main

注意:main 是为我创建的默认集群(你的集群名称可能不同)

$ pg_createcluster --start 9.1 main

我只是使用相同的名称(main)重新创建了集群。

注意: 因为我选择了相同的集群名称(main),所以我不得不回去更新我的.conf文件。对于我来说,具体而言,这是postgres.conf和pg_hba.conf,以重新启用对该框中的远程访问。我不会在这里包括如何完成此操作,因为网络上有很多相关文档。但是,如果有人想要稍后编辑此答案以包含此信息,那么那也完全没问题! :)


请注意,pg_createcluster 还有一个 --locale 开关,它接受一个类 Unix 的语言环境。 - daxelrod
1
使用您的示例,如果 locale -a 显示 en_US.UTF-8,则可以将其作为 --locale 传递。如果没有,则必须使用 sudo locale-gen en_US.UTF-8 生成它。之后,您可以传递 --locale=en_US.UTF-8 来创建集群。 - daxelrod
下次尝试使用initdb的完整路径,例如:/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data -E WIN1250 - Adam Silenko

1
通过使用initdb命令并指定编码选项(-E或--encoding=),我在Mac Os X Snow Leopard上成功创建了数据库。
initdb -D <database_directory> -E UTF8

如果您以这种方式初始化数据库,它将创建具有正确编码的数据库模板。
请参考initdb文档此处和编码文档此处选择正确的编码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接