PostgreSQL 9.1安装和数据库编码
我刚刚在Ubuntu 10.04上安装了PostgreSQL 9.1 注意:我在Windows上用安装程序做过几次,没有问题 经过一点努力,我将其设置为通过pgAdminIII远程连接。然而,在连接到db之后,我真的很惊讶,我得到了关于编码的警告。“postgres”数据库本身是用“SQL\U ASCII”编码创建的。每次我在windows上安装后,它都会创建带有“UTF8”的postgres DB,这似乎会更好,并且在通过pgAdminIII打开数据库时会停止警告消息 我做错什么了吗?是否有安装选项/参数用于设置要使用的默认编码 有没有办法解决这个问题?我在网上读到一些东西,说你需要哑和恢复来更改数据库的编码,但我不确定这在postgres db上是否可行。是吗PostgreSQL 9.1安装和数据库编码,postgresql,installation,ubuntu-10.04,Postgresql,Installation,Ubuntu 10.04,我刚刚在Ubuntu 10.04上安装了PostgreSQL 9.1 注意:我在Windows上用安装程序做过几次,没有问题 经过一点努力,我将其设置为通过pgAdminIII远程连接。然而,在连接到db之后,我真的很惊讶,我得到了关于编码的警告。“postgres”数据库本身是用“SQL\U ASCII”编码创建的。每次我在windows上安装后,它都会创建带有“UTF8”的postgres DB,这似乎会更好,并且在通过pgAdminIII打开数据库时会停止警告消息 我做错什么了吗?是否有安
谢谢你的帮助 相关选项是初始化数据库集群的initdb命令的
--locale=locale
。如果不显式提供,则默认为系统语言环境。(您可能在语言环境“C”上运行Ubuntu。)
阅读
在PostgreSQL中,您仍然可以通过基于template0
而不是默认的template1
来潜入具有不同语言环境的数据库。我引述:
编码和区域设置必须与模板的设置相匹配
数据库,但template0用作模板时除外
但我宁愿用所需的语言环境重新创建数据库集群。干净多了
编辑:有关可用区域设置的信息 您只能使用操作系统提供的区域设置。我引述: 您的系统上有哪些可用的区域设置,其名称取决于 操作系统供应商提供了什么以及 安装。在大多数Unix系统上,命令locale-a将提供 可用区域设置的列表。Windows使用更详细的区域设置名称, 例如德国或瑞典。1252,但原则是 同样的 如果要使用尚未生成的区域设置,请在Unix系统中查看
locale gen
。需要了解的重要一点是,您的操作系统中可以安装多个区域设置,但只能选择其中一个作为系统参数,如LC\u CTYPE
、LC\u COLLATE
,等等。查看shell中locale
与locale-a
的输出。通常情况下,通过LC\u all
设置的所有值都是相同的
@大卫:你所做的也许解决了你的问题,但你本可以更轻松一些。另外,请注意,环境变量LANG
仅为所有语言环境设置提供默认值。如果其中任何一个设置为不同的值,LANG
将被覆盖。设置LC\u ALL
以覆盖任何现有设置。这里是在网上告诉你更多关于这一点
要检查数据库(群集)的所有当前区域设置,请在数据库中运行:
SHOW ALL;
或者更具体地说:
SELECT *
FROM pg_settings
WHERE name ~~ 'lc%';
Erwin Brandstetter提供的答案很有帮助,但无论出于什么原因,它对我都不起作用。原因是我无法运行initdb。在尝试使用区域设置运行它时,我一直收到一个“bash:command not found”错误。我最后做的是: 更改操作系统的区域设置。对我来说,这是:
$ update-locale LANG=en_US.UTF-8
注意:然后我不得不重新启动服务器。要确认它是否工作,只需运行:
$ locale
使用该设置,我停止并丢弃了群集:
$ su postgres
$ pg_dropcluster --stop 9.1 main
注意:main是为我创建的默认集群(您的集群名称可能不同)
同样,我刚刚用相同的名称(main)重新创建了集群
注意:因为我选择了相同的集群名称(main),所以我必须返回并更新我的.conf文件。对我来说,这就是postgres.conf和pg_hba.conf,用于重新启用对该框的远程访问。我不打算在这里介绍如何做到这一点,因为网上有很多关于这一点的文档。但是,如果有人想稍后编辑此答案以将其包括在内,那就太好了!:) 使用编码选项(-E或--encoding=)通过initdb创建数据库在Mac Os X Snow Leopard上帮了我的忙:
initdb -D <database_directory> -E UTF8
initdb-D-E UTF8
如果以这种方式初始化数据库,它也将创建具有正确编码的数据库模板
请参阅initdb文档和编码文档以选择正确的编码。谢谢您的回复!让我试试看,我会发表评论等更新。再次感谢!请注意,pg_createcluster还有一个--locale开关,它采用unix风格的区域设置。使用您的示例,如果
locale-a
显示en_US.UTF-8,您可以将其作为--locale传递。如果没有,则必须使用sudo locale gen en_US.UTF-8
生成它。之后,您可以将--locale=en_US.UTF-8传递给createcluster。下次尝试使用initdb的完整路径,例如:/usr/local/pgsql/bin/initdb-D/usr/local/pgsql/data-E WIN1250
initdb -D <database_directory> -E UTF8