2

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

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

根据我的阅读,当调用带有这些标志的命令时,数据库集群设置为日语initdb -D /place/for/data --locale=ja_JP。但是,当我创建相同的集群然后用于createdb创建新数据库时,错误消息的语言是英语。在我的同事集群中,这种情况下的错误消息会产生日语错误消息。

有人可以帮助我了解 PostgreSQL 9.2 中的语言环境如何工作吗?将集群改回英文的方法是什么?

4

1 回答 1

3

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

一般来说,postmaster 会以初始化数据库集群的语言和编码发出消息。单个数据库上的会话将以创建数据库的语言和编码发出消息,这可能与集群默认值不同。

这可能导致混合语言和混合文本编码的日志,这真的很丑陋。尽管在邮件列表上反复讨论,但我们从未就如何解决这个问题达成一致——它比看起来更复杂。

因为每个会话都记录了自己的语言环境设置,所以您可以根据手册页CREATE DATABASE ...使用适当LC_CTYPE的 、ENCODINGLC_COLLATE等设置。您可能必须指定此操作才能成功。这将导致新创建的数据库采用所需的语言和编码;然后,您可以将每个旧数据库转储到相应的新数据库中,重命名旧数据库,并将新数据库重命名为旧数据库。当你觉得一切都很好时,可以放弃旧的。CREATE DATABASETEMPLATE template0

邮政局长级别的邮件仍将使用日语。如果没有重新初始化数据库,我认为没有办法解决这个问题。更糟糕的是,如果它不是jp_JP.UTF-8不同的编码,那么您的日志文件中可能有混合编码,这可能会严重扰乱日志文件处理器等。

于 2013-06-08T11:35:12.527 回答