Instalei a atualização de outono do Windows 10 (1709) e agora meu servidor PostgreSQL 9.5 não será iniciado. Funcionou ontem antes da atualização e não fiz alterações na configuração.
Verifiquei o visualizador de eventos e encontrei as seguintes mensagens de erro:
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 a Microsoft mudou o nome da localidade com a atualização de outono, não consegui encontrar nenhuma lista de nomes de localidades disponíveis, então decidi instalar o Postgres 10 e confirmou minha suspeita, o postgresql.conf no Postgres 10 agora diz:
# 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
Alterei os valores de configuração do servidor PostgreSQL 9.5 para 'Czech_Czechia.1250' e tudo começou bem, mas o problema é que agora não consigo me conectar a nenhum banco de dados, o pgAdmin III me dá o seguinte erro:
Existe uma maneira de recuperar os dados? Não consigo criar dump ou executar pg_upgrade, já que os bancos de dados agora possuem localidade inválida e não consigo conectar-me a eles. Talvez haja uma maneira de alterar o local do banco de dados manualmente? Em teoria, isso não deve causar problemas, pois seu único nome diferente para a mesma codificação.
Respostas:
Graças à sugestão de Daniel Vérité, eu pude corrigi-lo sem descarregar o servidor db inteiro. Meu conhecimento das localidades no Windows é muito limitado, mas, pelo que aprendi, parece que a Microsoft mudou o nome da região do local checo de "República Tcheca" para "República Tcheca" durante a atualização do Fall Creators (presumivelmente em conformidade com a ISO 3166-1) .
O Postgres de alguma forma carrega o código do idioma pela combinação do nome do idioma e do nome da região, portanto, os bancos de dados criados antes dessa alteração não podem ser conectados, pois a combinação de idioma e região não é mais válida.
Então, para corrigi-lo, baixei o Locale Builder 2.0 da Microsoft e depois:
Agora eu posso executar o PostgreSQL 9.5 com 'Czech_Czech Republic.1250' e o PostgreSQL 10 com 'Czech_Czechia.1250' e os dois funcionam.
Não tenho certeza se está certo criar o código de idioma com o mesmo nome de código de idioma (cs-CZ), mas isso não parece causar problemas, talvez alguém possa elaborar mais.
fonte