Comment réparer “Erreur: l’environnement local demandé par l’environnement n’est pas valide” pendant la mise à niveau du cluster postgresql (pg_upgradecluster)

Après une mise à niveau d’Ubuntu Server 14.04 à 16.04, j’ai également dû mettre à niveau mes clusters Postgres de 9.3 à 9.5. La méthode normale consiste à supprimer d’abord le cluster 9.5 (vide) créé par la mise à niveau:

# pg_dropcluster 9.5 main

puis mettre à niveau l’ancien cluster 9.3 vers 9.5:

# pg_upgradecluster 9.3 main

Cela entraîne cependant une erreur:

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 

Cela signifie que je ne pouvais pas passer à Postgres 9.5.

J’ai vérifié tous les parameters régionaux:

  • l’environnement local en_US.UTF-8 existe et est correctement généré comme vérifié avec locale -a (il affiche en_US.utf8 dans sa liste)
  • Le fichier / etc / environment contient LC_ALL = en_US.UTF-8 et LANG = en_US.UTF-8
  • / etc / default / locale contient le même paramètre pour LANG, LANGUAGE et LC_ALL
  • Je peux lancer Perl sans aucun problème en utilisant “perl -e exit”

Le message d’erreur est généré à partir du script pg_createcluster appelé à partir de pg_updatecluster. Mais exécuter pg_createcluster à partir de la ligne de commande fonctionne sans problème.

Solution de contournement pour le problème:

J’ai utilisé la solution de contournement suivante pour que la conversion fonctionne au moins. J’ai édité le script / usr / bin / pg_upgradecluster comme suit:

  • Recherchez le code où il appelle pg_createcluster en recherchant le commentaire “create new cluster”
  • Ce code consiste en une série d’instructions “push”, se terminant par la ligne suspecte: delete $ ENV {‘LC_ALL’}
  • Notez que cette LC_ALL est exactement la variable non définie dans le message d’erreur.
  • Commentez cette suppression en ajoutant un “#” avant, puis enregistrez.

Cela contourne au moins ce problème et vous permet de lancer la mise à niveau.

Ma question est la suivante: est-ce un bogue dans le script pg_upgradecluster ou est-ce que quelque chose d’autre est gênant sur mon système?

avait le même problème sur un serveur Ubuntu 16.04. ce qui a aidé dans mon cas était de générer tous les parameters régionaux qui apparaissent dans votre liste de $ locale :

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

bonne chance!