PostgreSQL 9.1安装和数据库编码

Dav*_*d S 6 postgresql installation ubuntu-10.04

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

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

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

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

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

谢谢你的帮助!

Erw*_*ter 11

相关选项是--locale=localeinitdb的命令,该命令初始化数据库集群.如果您未明确提供它,则默认为系统区域设置.(你可能在语言环境'C'上运行你的Ubuntu.)

在这里的优秀手册中阅读更多相关信息.

在PostgreSQL中,您仍然可以通过基于新数据库template0而不是默认数据库来隐藏具有不同语言环境的数据库templeate1.我在这里引用手册:

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

但我宁愿使用所需的语言环境重新创建数据库集群.更清洁.


编辑:有关可用区域设置的信息

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

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

locale-gen如果您想使用尚未生成的语言环境,请查看Unix系统.要了解的重要一点是,多个语言环境可以安装在你的操作系统,但只有其中一个可以拾取系统参数,如LC_CTYPE,LC_COLLATE等看的输出localelocale -a中壳.通常它对所有人都是一样的,设置为via LC_ALL.

@David:你所做的可能已经解决了你的问题,但你可以更轻松.另请注意,环境变量LANG仅为所有区域设置提供默认值.如果其中任何一个被设置为不同的东西,LANG将被覆盖.设置LC_ALL为覆盖任何现有设置.以下是网络中众多网站之一,告诉您更多相关信息.

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

SHOW ALL;
Run Code Online (Sandbox Code Playgroud)

或者更具体地说:

SELECT *
FROM   pg_settings
WHERE  name ~~ 'lc%';
Run Code Online (Sandbox Code Playgroud)


Dav*_*d S 10

Erwin Brandstetter提供的答案很有帮助,但无论出于何种原因,它对我都不起作用.原因是我无法运行initdb.尝试使用语言环境运行时,我一直收到"bash:command not found"错误.我最终做的是:

更改操作系统的区域设置.对我来说,这是:

$ update-locale LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

注意:然后我不得不重新启动服务器.要确认它是否有效,只需运行:

$ locale
Run Code Online (Sandbox Code Playgroud)

在那个集合中,我停下来并放弃了集群:

$ su postgres
$ pg_dropcluster --stop 9.1 main
Run Code Online (Sandbox Code Playgroud)

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

$ pg_createcluster --start 9.1 main
Run Code Online (Sandbox Code Playgroud)

同样,我只是重新创建了具有相同名称(主要)的集群.

注意:因为我选择了相同的群集名称(main),所以我不得不返回并更新我的.conf文件.对我来说,这个特别是postgres.conf和pg_hba.conf来重新启用对该框的远程访问.我不会在这里包含如何做到这一点,因为网上有很多文档.但是,如果有人想稍后编辑此答案以包含它,那就没问题了!:)