PostgreSQL 9.1安装和数据库编码

时间:2011-12-06 02:52:44

标签: postgresql installation ubuntu-10.04

我刚刚在Ubuntu 10.04上安装了第一个PostgreSQL 9.1。

注意:我在Windows上使用安装程序完成了几次没有问题。

经过一番努力,我把它设置为通过pgAdminIII远程连接。但是,连接到数据库之后我真的很惊讶,我收到了关于编码的警告。 “postgres”数据库本身是使用“SQL_ASCII”编码创建的。每次我在Windows上安装时,它都会创建带有“UTF8”的postgres数据库 - 这似乎会好很多,并且会在通过pgAdminIII打开数据库时停止警告消息。

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

无论如何要解决这个问题?我已经在网上看到了一些内容,说你需要愚蠢并恢复以更改数据库的编码,但我不确定甚至可以在postgres db上实现。是吗?

感谢您的帮助!

3 个答案:

答案 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_CTYPELC_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)

使用编码选项(-E或--encoding =)通过initdb创建数据库在Mac Os X Snow Leopard上为我做了诀窍:

initdb -D <database_directory> -E UTF8

如果以这种方式初始化数据库,它也将使用正确的编码创建数据库模板。

请参阅initdb文档here和编码文档here以选择正确的编码。