如何在PostgreSQL集群升级(Pg_Upgradecluster)期间修复“错误:环境请求的区域设置无效”

xlpyo6sf  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(0)|浏览(217)

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

pg_dropcluster 9.5 Main

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

pg_upgradecluster 9.3 Main

但是,这会导致错误:

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区域设置存在,并按照区域设置-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脚本,如下所示:

  • 找到代码中调用pg_createcluster的地方,查找注解“创建新集群”
  • 该代码由一系列“PUSH”语句组成,以可疑的行结尾:Delete$ENV{‘LC_ALL’}
  • 请注意,此LC_ALL正是错误消息中未设置的变量。
  • 注解掉删除的注解,在它前面添加一个‘#’,然后保存。

这至少绕过了这个问题,并允许您运行升级。
我的问题是:这是pg_upgradecluster脚本中的错误,还是我的系统出现了其他错误?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题