我刚刚在Ubuntu 10.04上安装了第一个PostgreSQL 9.1。
注意:我在Windows上使用安装程序完成了几次没有问题。
经过一番努力,我把它设置为通过pgAdminIII远程连接。但是,连接到数据库之后我真的很惊讶,我收到了关于编码的警告。 “postgres”数据库本身是使用“SQL_ASCII”编码创建的。每次我在Windows上安装时,它都会创建带有“UTF8”的postgres数据库 - 这似乎会好很多,并且会在通过pgAdminIII打开数据库时停止警告消息。
我做错了吗?是否有用于设置默认编码的安装选项/参数?
无论如何要解决这个问题?我已经在网上看到了一些内容,说你需要愚蠢并恢复以更改数据库的编码,但我不确定甚至可以在postgres db上实现。是吗?
感谢您的帮助!
答案 0 :(得分:11)
initdb 命令的相关选项为--locale=locale
,用于初始化数据库群集。如果您未明确提供它,则默认为系统区域设置。 (你可能在语言环境'C'上运行你的Ubuntu。)
阅读more about it in the excellent manual here。
在PostgreSQL中, 仍然可以通过基于template0
而不是默认templeate1
的新数据库隐藏在具有不同语言环境的数据库中。我引用manual here:
编码和区域设置必须与模板的设置匹配 数据库,除非将template0用作模板。
但我宁愿使用所需的语言环境重新创建数据库集群。更干净。
您只能使用操作系统提供的区域设置。我引用manual here:
系统上的可用名称取决于哪些区域设置 操作系统供应商提供的是什么 安装。在大多数Unix系统上,命令locale -a将提供一个 可用语言环境列表。 Windows使用更详细的区域设置名称, 例如German_Germany或Swedish_Sweden.1252,但原则是 同样的。
如果要使用尚未生成的语言环境,请查看Unix系统中的locale-gen
。需要了解的重要一点是,您的操作系统中可以安装多个语言环境,但只能选择其中一个语言环境来查找LC_CTYPE
,LC_COLLATE
等系统参数。查看{{1}的输出在shell中与locale
对比。通常它是相同的,通过locale -a
设置。
@David:你所做的可能已经解决了你的问题,但你可以更轻松。另请注意,环境变量LC_ALL
仅为所有区域设置提供默认。如果其中任何一个设置为不同的,则会覆盖LANG
。设置LANG
以覆盖任何现有设置。网络上的one of many sites告诉您更多相关信息。
要检查数据库(群集)的所有当前区域设置,请在您的数据库中运行:
LC_ALL
或更具体地说:
SHOW ALL;
答案 1 :(得分:10)
Erwin Brandstetter提供的答案很有帮助,但无论出于何种原因,它对我都不起作用。原因是我无法运行initdb。尝试使用语言环境运行时,我一直收到“bash:command not found”错误。我最终做的是:
更改操作系统的区域设置。对我来说,这是:
$ update-locale LANG=en_US.UTF-8
注意:然后我不得不重新启动服务器。要确认它是否有效,只需运行:
$ locale
使用该集合,我停下来并放弃了集群:
$ su postgres
$ pg_dropcluster --stop 9.1 main
注意:main是为我创建的默认群集(您的群集名称可能不同)
$ pg_createcluster --start 9.1 main
同样,我只是重新创建了具有相同名称(主要)的集群。
注意:因为我选择了相同的群集名称(main),所以我不得不返回并更新我的.conf文件。对我来说,这个特别是postgres.conf和pg_hba.conf来重新启用对该框的远程访问。我不会在这里包含如何做到这一点,因为网上有很多文档。但是,如果有人想稍后编辑此答案以包含它,那就没问题了! :)
答案 2 :(得分:1)