首页 文章

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

提问于
浏览
4

从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

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

我检查了所有区域设置:

  • en_US.UTF-8语言环境存在并正确生成,并使用locale -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_createcluster脚本生成的,该脚本是从pg_updatecluster调用的 . 但是从命令行运行pg_createcluster工作正常,没有任何问题 .

问题的解决方法:

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

  • 通过查找注释"create new cluster"找到它调用pg_createcluster的代码

  • 该代码由一系列"push"语句组成,以可疑行结尾:delete $ ENV {'LC_ALL'}

  • 请注意,此LC_ALL正是错误消息中未设置的变量 .

  • 注释掉之前添加'#'删除评论,然后保存 .

这至少可以解决这个问题,并允许您运行升级 .

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

2 回答

  • 0

    在ubuntu 16.04服务器上遇到了同样的问题 . 在我的案例中有帮助的是生成 all 出现在 $ locale 列表中的语言环境:

    $ sudo locale-gen "en_US.UTF-8"
    $ sudo locale-gen "nl_NL.UTF-8"
    

    祝好运!

  • 2

    对我来说,我已经遵循了许多建议,仍然没有奏效 . 脚本提到了

    LC_TIME=en_UK 但它完全不相关所以我一开始就忽略了它 . 事实证明这是问题所在,我只需要做"unset LC_TIME" .

    发布在这里以防万一发生在别人身上 .

相关问题