PostgreSQL 9.5 no se iniciará después de la actualización de otoño de Windows 10

13

He instalado Windows 10 Fall Update (1709) y ahora mi servidor PostgreSQL 9.5 no se iniciará. Funcionó ayer antes de la actualización y no he realizado ningún cambio en la configuración.

Revisé el visor de eventos y encontré los siguientes mensajes de error:

2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_time": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST FATAL:  configuration file "C:/Program Files/PostgreSQL/9.5/data/postgresql.conf" contains errors

Parece que Microsoft cambió el nombre de la configuración regional con Fall Update, no pude encontrar ninguna lista de nombres de configuración regional disponibles, así que decidí instalar Postgres 10 y confirmó mi sospecha, el postgresql.conf en Postgres 10 ahora dice:

# These settings are initialized by initdb, but they can be changed.
lc_messages = 'Czech_Czechia.1250'          # locale for system error message
                # strings
lc_monetary = 'Czech_Czechia.1250'          # locale for monetary formatting
lc_numeric = 'Czech_Czechia.1250'           # locale for number formatting
lc_time = 'Czech_Czechia.1250'              # locale for time formatting

Cambié los valores de configuración para el servidor PostgreSQL 9.5 a 'Czech_Czechia.1250' y comenzó bien, pero el problema es que ahora no puedo conectarme a ninguna base de datos, pgAdmin III me da el siguiente error:

pg Error de administrador

¿Hay alguna manera de recuperar los datos? No puedo crear un volcado o ejecutar pg_upgrade ya que las bases de datos ahora tienen una configuración regional no válida y no puedo conectarme a ellas. ¿Quizás haya una manera de cambiar la configuración regional de la base de datos manualmente? En teoría, no debería causar ningún problema, ya que su único nombre diferente para la misma codificación.

jvb
fuente
2
Tal vez podría recrear la configuración regional que falta como configuración regional personalizada con su herramienta Generador de configuraciones regionales .
Daniel Vérité

Respuestas:

12

Gracias a la sugerencia de Daniel Vérité, pude solucionarlo sin volcar todo el servidor db. Mi comprensión de las configuraciones regionales en Windows es muy limitada, pero por lo que aprendí parece que Microsoft cambió el nombre de la región de la configuración regional checa de "República Checa" a "República Checa" durante la actualización de Fall Creators (presumiblemente por lo que cumple con la norma ISO 3166-1) .

Postgres de alguna manera carga la configuración regional mediante la combinación del nombre del idioma y el nombre de la región, por lo que las bases de datos creadas antes de este cambio no se pueden conectar ya que la combinación de idioma y región ya no es válida.

Entonces, para solucionarlo, descargué Locale Builder 2.0 de Microsoft y luego:

  1. Se creó una nueva configuración regional basada en la configuración regional checa (cs-CZ), se mantuvo el mismo nombre de configuración regional (cs-CZ)
  2. Se cambió el nombre de la región a "República Checa" (de "Chequia")
  3. Instalador creado seleccionando "Build" -> "Build Locale Installer"
  4. Instalé la configuración regional recién creada ejecutando el archivo .msi creado en el paso anterior
  5. Reinicié el servidor PostgreSQL, esta vez comenzó sin problemas.

Ahora puedo ejecutar PostgreSQL 9.5 con 'Czech_Czech Republic.1250' y PostgreSQL 10 con 'Czech_Czechia.1250' y ambos funcionan.

No estoy seguro de si está bien crear la configuración regional con el mismo nombre de configuración regional (cs-CZ), pero no parece causar ningún problema, tal vez alguien pueda elaborar más.

jvb
fuente