2016-11-19 781 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" 

好運!