У меня на сервере установлен CentOs 6.7:
bash-4.1# uname -r
2.6.32-573.18.1.el6.x86_64
После перезапуска сервера мой сервер PostgreSQL 9.6 не запускается из-за проблем с локалью.
Вот сообщение об ошибке журнала: pgstartup.log
< 2017-01-26 16:33:08.115 IST > LOG: invalid value for parameter "lc_messages": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG: invalid value for parameter "lc_monetary": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG: invalid value for parameter "lc_numeric": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > LOG: invalid value for parameter "lc_time": "en_US.UTF-8"
< 2017-01-26 16:33:08.123 IST > FATAL: configuration file "/var/lib/pgsql/9.6/data/postgresql.conf" contains errors
Ожидается, что в системе будет доступна локаль "en_US.UTF-8". Я проверил, и он действительно доступен.
bash-4.1# locale -a | grep en_US
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
en_US
en_US.UTF-8
en_US.iso88591
en_US.iso885915
en_US.utf8
Итак, я прокомментировал следующие строки из файла postgresql.conf:
#lc_messages = 'en_US.UTF-8' # locale for system error message
# strings
#lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
#lc_numeric = 'en_US.UTF-8' # locale for number formatting
#lc_time = 'en_US.UTF-8' # locale for time formatting
После комментирования строк, как указано выше, сервер смотрит, но не может войти на сервер и выдает следующую ошибку:
bash-4.1$ psql
psql: FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE "en_US.UTF-8", which is not recognized by setlocale().
HINT: Recreate the database with another locale or install the missing locale.
Теперь у меня есть локаль в системе, которую требует postgres, а потом еще и плач. Не знаю, в чем именно проблема.
Примечание. Эта проблема возникает после перезагрузки сервера.
Я нашел решение этой проблемы.
Фактически, локали предоставляются библиотекой Glibc. На сервере версия Glibc была 2.12.
По какой-то причине нам нужна была версия 2.14, и было невозможно обновить 2.12 до 2.14 через yum, поскольку yum сообщал о своей последней версии.
Итак, мы вручную скомпилировали исходный код 2.14 и создали двоичные файлы.
и изменил ссылку 2.12 на 2.14 и создал этот беспорядок.
Решение: вернул символьную ссылку к исходной версии 2.12.
Мораль: никогда не портите glibc, не указывая символьные ссылки на разные версии.