Cómo solucionar “Error: la configuración regional solicitada por el entorno no es válida” durante la actualización del clúster de postgresql (pg_upgradecluster)

3 minutos de lectura

Después de una actualización de Ubuntu Server 14.04 a 16.04, también tuve que actualizar mis clústeres de Postgres de 9.3 a 9.5. La forma normal de hacerlo es descartar primero el clúster 9.5 (vacío) que creó la actualización:

# pg_dropcluster 9.5 principal

y luego para actualizar el antiguo clúster 9.3 a 9.5:

# pg_upgradecluster 9.3 principal

Sin embargo, esto da como resultado un error:

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

Esto significa que no pude actualizar a Postgres 9.5.

Revisé todas las configuraciones regionales:

  • la configuración regional en_US.UTF-8 existe y se genera correctamente como se verifica con la configuración regional -a (muestra en_US.utf8 en su lista)
  • El archivo /etc/environment contiene LC_ALL=en_US.UTF-8 y LANG=en_US.UTF-8
  • /etc/default/locale contiene la misma configuración para LANG, LANGUAGE y LC_ALL
  • Puedo iniciar Perl sin ningún problema usando “perl -e exit”

El mensaje de error se genera a partir del script pg_createcluster al que se llama desde pg_updatecluster. Pero ejecutar pg_createcluster desde la línea de comando funciona bien, sin ningún problema.

Solución para el problema:

Utilicé la siguiente solución para al menos hacer que la conversión funcionara. Edité el script /usr/bin/pg_upgradecluster de la siguiente manera:

  • Encuentre el código donde llama a pg_createcluster buscando el comentario “crear nuevo clúster”
  • Ese código consiste en una serie de declaraciones “push”, que terminan en la línea sospechosa: delete $ENV{‘LC_ALL’}
  • Observe que este LC_ALL es exactamente la variable que no está configurada en el mensaje de error.
  • Comente ese comentario eliminado agregando un ‘#’ antes de él, luego guárdelo.

Esto al menos evita este problema y le permite ejecutar la actualización.

Mi pregunta: ¿se trata de un error en la secuencia de comandos pg_upgradecluster, o hay algo más mal en mi sistema?

  • Artículo relacionado: stackoverflow.com/questions/49089099/…

    – Khoi Ngo

    6 abr a las 10:01

tenía el mismo problema en un servidor ubuntu 16.04. lo que ayudó en mi caso fue generar todos las localidades que aparecen en su lista de $ locale:

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

¡buena suerte!

En mi caso, se quejó de

Error: The locale requested by the environment is invalid:
LANG: en_GB
LANGUAGE: en_GB:en

Asique unset LANG y unset LANGUAGE Y funcionó.

  • Esto funcionó para mí, pero tuve que agregar un comando adicional: establecer LC_CTYPE = “en_US.UTF-8”

    – negrotico19

    2 de agosto a las 2:30

Para mí, he seguido muchas sugerencias y todavía no funcionó. El guión mencionado

LC_TIME=en_UK pero no tiene ninguna relación, así que lo ignoré al principio. Resulta que este era el problema y hacer “unset LC_TIME” era todo lo que necesitaba.

Pongo aquí por si le ha pasado a alguien más.

Mi forma rápida de desactivar ese mensaje: (macOS 12 Monterey M1)

Abra Terminal -> Preferencias -> pestaña Avanzado -> desmarque Establecer variables de entorno locales al inicio

Acabo de encontrar esto en una nueva instalación de Ubuntu + PostgresQL, después de todos esos años… de cualquier manera, la solución es:

apt-get install locales

¿Ha sido útil esta solución?