2016-11-19 76 views
1

期间,如何解决“错误:环境请求的语言环境无效”从Ubuntu Server 14.04升级到16.04之后,我还必须将Postgres群集从9.3升级到9.5。正常的方式做到这一点是先删除,升级创建的(空)9.5集群:在postgresql集群升级(pg_upgradecluster)

#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 

这意味着我不能升级到9.5的Postgres。

我检查了所有区域设置:

  • 的是en_US.UTF-8语言环境存在,并且经过locale -a检查是否正确生成(它显示en_US.utf8在其列表)
  • 文件/ etc/environment中包含LC_ALL =的en_US.UTF-8和LANG =的en_US.UTF-8
  • 的/ etc /默认/区域包含LANG,语言相同的设置和LC_ALL
  • 我可以用Perl的开始,没有任何问题“ perl -e exit“

错误消息是从pg_updatecluster调用的pg_createcluster脚本生成的。但从命令行运行pg_createcluster工作得很好,没有任何问题。

解决方法的问题:

我用以下解决方案至少可以得到转换工作。我编辑在/ usr/bin中/ pg_upgradecluster脚本,如下所示:

  • 找到它通过寻找评论称pg_createcluster代码“创建新集群”
  • 该代码由一系列的“推”的结束于可疑行: 删除$ ENV {'LC_ALL'}
  • 请注意,此LC_ALL为,正好为错误消息中未设置的变量。
  • 注释掉删除评论,在它之前加上一个'#',然后保存。

这至少可以解决这个问题,并且可以让您运行升级。

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

回答

1

在ubuntu 16.04服务器上有同样的问题。是什么帮助我的情况是产生出现在您的$ locale上市所有的语言环境:

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

好运!