PostgreSQL 9.5 не запускается после падения Windows 10


13

Я установил 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 выдает мне следующую ошибку:

ошибка pgAdmin

Есть ли способ вернуть данные? Я не могу создать дамп или запустить pg_upgrade, так как базы данных теперь имеют неверный языковой стандарт, и я не могу подключиться к ним. Может быть, есть способ изменить локаль базы данных вручную? Теоретически, это не должно вызывать никаких проблем, так как это только другое имя для одной и той же кодировки.


2
Возможно, вы могли бы воссоздать отсутствующий языковой стандарт как пользовательский языковой стандарт с помощью инструмента « Строитель языковых стандартов» .
Даниэль Верите

Ответы:


12

Благодаря предложению Даниэля Верите я смог исправить это, не выгружая весь сервер БД. Мое понимание локалей в Windows очень ограничено, но из того, что я узнал, похоже, что Microsoft изменила название региона чешской локали с «Чешская Республика» на «Чехия» во время обновления Fall Creators (предположительно, так, чтобы оно соответствовало ISO 3166-1). ,

Postgres каким-то образом загружает локаль по комбинации имени языка и названия региона, поэтому базы данных, созданные до этого изменения, не могут быть подключены, поскольку комбинация языка и региона больше не действительна.

Чтобы исправить это, я скачал Locale Builder 2.0 от Microsoft, а затем:

  1. Создана новая локаль на основе чешской локали (cs-CZ), с тем же названием локали (cs-CZ)
  2. Изменено название региона на "Чешская республика" (с "Чехия")
  3. Созданный установщик, выбрав «Build» -> «Build Locale Installer»
  4. Установил недавно созданную локаль, запустив MSI-файл, созданный на предыдущем шаге
  5. Перезапустил сервер PostgreSQL, на этот раз он запустился без проблем

Теперь я могу запустить PostgreSQL 9.5 с «Czech_Czech Republic.1250» и PostgreSQL 10 с «Czech_Czechia.1250», и они оба работают.

Я не уверен, нормально ли создавать локаль с тем же именем локали (cs-CZ), но, похоже, это не вызывает никаких проблем, может быть, кто-то может уточнить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.