Назад | Перейти на главную страницу

Centos Postgres Не удалось запустить

У меня на сервере установлен 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, не указывая символьные ссылки на разные версии.