Я установил Windows 10 Fall Update (1709) и теперь мой сервер PostgreSQL 9.5 не запускается. Это работало вчера перед обновлением, и я не внес никаких изменений в конфигурацию.
Я проверил просмотрщик событий и нашел следующие сообщения об ошибках:
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
Похоже, что Microsoft изменила имя локали с обновлением Fall, я не смог найти список доступных имен локалей, поэтому я решил установить Postgres 10, и это подтвердило мое подозрение, postgresql.conf в Postgres 10 теперь читает:
# 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
Я изменил значения конфигурации сервера PostgreSQL 9.5 на «Czech_Czechia.1250», и все началось нормально, но проблема в том, что теперь я не могу подключиться к какой-либо базе данных, pgAdmin III выдает мне следующую ошибку:
Есть ли способ вернуть данные? Я не могу создать дамп или запустить pg_upgrade, так как базы данных теперь имеют неверный языковой стандарт, и я не могу подключиться к ним. Может быть, есть способ изменить локаль базы данных вручную? Теоретически, это не должно вызывать никаких проблем, так как это только другое имя для одной и той же кодировки.
Ответы:
Благодаря предложению Даниэля Верите я смог исправить это, не выгружая весь сервер БД. Мое понимание локалей в Windows очень ограничено, но из того, что я узнал, похоже, что Microsoft изменила название региона чешской локали с «Чешская Республика» на «Чехия» во время обновления Fall Creators (предположительно, так, чтобы оно соответствовало ISO 3166-1). ,
Postgres каким-то образом загружает локаль по комбинации имени языка и названия региона, поэтому базы данных, созданные до этого изменения, не могут быть подключены, поскольку комбинация языка и региона больше не действительна.
Чтобы исправить это, я скачал Locale Builder 2.0 от Microsoft, а затем:
Теперь я могу запустить PostgreSQL 9.5 с «Czech_Czech Republic.1250» и PostgreSQL 10 с «Czech_Czechia.1250», и они оба работают.
Я не уверен, нормально ли создавать локаль с тем же именем локали (cs-CZ), но, похоже, это не вызывает никаких проблем, может быть, кто-то может уточнить.
источник