Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL 9.1安装和数据库编码_Postgresql_Installation_Ubuntu 10.04 - Fatal编程技术网

PostgreSQL 9.1安装和数据库编码

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打开数据库时会停止警告消息 我做错什么了吗?是否有安

我刚刚在Ubuntu 10.04上安装了PostgreSQL 9.1

注意:我在Windows上用安装程序做过几次,没有问题

经过一点努力,我将其设置为通过pgAdminIII远程连接。然而,在连接到db之后,我真的很惊讶,我得到了关于编码的警告。“postgres”数据库本身是用“SQL\U ASCII”编码创建的。每次我在windows上安装后,它都会创建带有“UTF8”的postgres DB,这似乎会更好,并且在通过pgAdminIII打开数据库时会停止警告消息

我做错什么了吗?是否有安装选项/参数用于设置要使用的默认编码

有没有办法解决这个问题?我在网上读到一些东西,说你需要哑和恢复来更改数据库的编码,但我不确定这在postgres db上是否可行。是吗


谢谢你的帮助

相关选项是初始化数据库集群的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