PostgreSQL语言环境语言

时间:2013-06-08 01:19:57

标签: postgresql locale

我正在安装Debian 3.2 w / PostgreSQL 9.2。我的一位同事用日语初始化了数据库集群。所以现在,使用createdb创建的每个数据库,无论用户是谁,现在都使用日语作为语言进行实例化。

我无法找到将语言重置为英语的方法,无需在新群集上再次运行initdb。我真的不想这样做,因为有很多数据无法承受。

根据我的阅读,当带有这些标志的命令被称为initdb -D /place/for/data --locale=ja_JP时,数据库集群将设置为japanese。但是,当我创建相同的集群然后使用createdb创建新数据库时,错误消息的语言是英语。在我的同事群集中,来自此方案的错误消息将产生日语错误消息。

有人可以帮我理解语言环境在PostgreSQL 9.2中的工作原理吗?那么将群集改回英语的方法是什么?

1 个答案:

答案 0 :(得分:3)

如果没有完整的转储和重新加载,您无法将群集完全更改为英语。

通常,postmaster将使用该语言发出消息,并且数据库集群的编码是initdb'd。单个数据库上的会话将以语言发出消息并编码创建数据库,其中可能与群集默认值不同。

这可能会导致使用混合语言和混合文本编码进行记录,这真的非常难看。尽管在邮件列表上反复讨论过,但我们从未达成过如何解决这个问题的协议 - 它比看起来更复杂。

由于每个会话都记录了自己的区域设置,因此您CREATE DATABASE ...可以执行LC_CTYPEENCODINGLC_COLLATE等设置TEMPLATE template0 3}}。您可能必须指定jp_JP.UTF-8才能成功。这将导致新创建的数据库采用所需的语言和编码;然后,您可以将每个旧数据库转储到相应的新数据库中,重命名旧数据库,并将新数据库重命名为旧数据库。当你感觉很舒服时,旧的可以掉线。

Postmaster级消息仍然是日语。如果没有重新initdb,我认为没有办法解决这个问题。更糟糕的是,如果它不是{{1}}而是一个不同的编码,你可能在日志文件中有混合编码,这可能会使日志文件处理器等烦恼。