在PostgreSQL集群升级期间如何解决“错误:环境请求的语言环境无效”(pg_upgradecluster)

fja*_*ngh 5 postgresql ubuntu locale ubuntu-16.04

从Ubuntu Server 14.04升级到16.04后,我还必须将Postgres集群从9.3升级到9.5。正常的方法是首先删除升级创建的(空)9.5集群:

#pg_dropcluster 9.5主

然后将旧的9.3群集升级到9.5:

#pg_upgradecluster 9.3主

但是,这会导致错误:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US.UTF-8",
LC_ALL = (unset),
LC_PAPER = "nl_NL.UTF-8",
LC_ADDRESS = "nl_NL.UTF-8",
LC_MONETARY = "nl_NL.UTF-8",
LC_NUMERIC = "nl_NL.UTF-8",
LC_TELEPHONE = "nl_NL.UTF-8",
LC_IDENTIFICATION = "nl_NL.UTF-8",
LC_MEASUREMENT = "nl_NL.UTF-8",
LC_TIME = "nl_NL.UTF-8",
LC_NAME = "nl_NL.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
Error: The locale requested by the environment is invalid.
Error: Could not create target cluster
Run Code Online (Sandbox Code Playgroud)

这意味着我无法升级到Postgres 9.5。

我检查了所有语言环境设置:

  • en_US.UTF-8语言环境已存在,并且可以通过语言环境-a检查正确生成(它在其列表中显示en_US.utf8)
  • 文件/ etc / environment包含LC_ALL = en_US.UTF-8和LANG = en_US.UTF-8
  • / etc / default / locale包含与LANG,LANGUAGE和LC_ALL相同的设置
  • 我可以使用“ perl -e exit”毫无问题地启动Perl

该错误消息是从pg_updatecluster调用的pg_createcluster脚本生成的。但是从命令行运行pg_createcluster可以正常工作,没有任何问题。

该问题的解决方法:

我使用以下解决方法至少使转换正常工作。我编辑了/ usr / bin / pg_upgradecluster脚本,如下所示:

  • 通过查找注释“创建新集群”,找到调用pg_createcluster的代码。
  • 该代码由一系列“ push”语句组成,以可疑行结尾:delete $ ENV {'LC_ALL'}
  • 请注意,此LC_ALL 正是错误消息中未设置的变量。
  • 对删除的注释添加注释,方法是在其前面添加“#”,然后保存。

这至少可以避免此问题,并让您运行升级。

我的问题:这是pg_upgradecluster脚本中的错误,还是我的系统有其他问题?

hir*_*ist 5

在 ubuntu 16.04 服务器上遇到了同样的问题。对我来说有帮助的是生成出现在您的列表中的所有语言环境$ locale

$ sudo locale-gen "en_US.UTF-8"
$ sudo locale-gen "nl_NL.UTF-8"
Run Code Online (Sandbox Code Playgroud)

祝你好运!


ins*_*law 5

就我而言,它抱怨的是

Error: The locale requested by the environment is invalid:
LANG: en_GB
LANGUAGE: en_GB:en
Run Code Online (Sandbox Code Playgroud)

所以我unset LANGunset LANGUAGE它奏效了。