从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 回答
在ubuntu 16.04服务器上遇到了同样的问题 . 在我的案例中有帮助的是生成 all 出现在
$ locale
列表中的语言环境:祝好运!
对我来说,我已经遵循了许多建议,仍然没有奏效 . 脚本提到了
LC_TIME=en_UK
但它完全不相关所以我一开始就忽略了它 . 事实证明这是问题所在,我只需要做"unset LC_TIME" .发布在这里以防万一发生在别人身上 .