SystemdDoctor
мешает работе postgresql обновления локали

PostgreSQL: локаль кластера не совпадает с системой

PostgreSQL хранит правила сортировки, зависящие от системной библиотеки локалей. После обновления системы версия библиотеки меняется, и база предупреждает о возможной порче индексов, а иногда отказывается работать с базой данных.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Обновилась библиотека локалей

    Правила сортировки изменились. Индексы, построенные по прежним правилам, могут давать неверные результаты поиска.

  2. Локаль кластера отсутствует в системе

    Кластер создан с локалью, которой в системе нет — например после переноса на минимальный образ.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Локали баз и записанные версии правил сортировки.

sudo -u postgres psql -c 'SELECT datname, datcollate, datcollversion FROM pg_database;' 2>/dev/null

Предупреждения о несовпадении версий.

sudo tail -30 /var/log/postgresql/postgresql-16-main.log | grep -i collation

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Обновилась библиотека локалей
Почему происходит
Правила сортировки изменились. Индексы, построенные по прежним правилам, могут давать неверные результаты поиска.
Как проверить
Посмотрите предупреждения базы и версии правил.
sudo -u postgres psql -c 'SELECT datname, datcollversion FROM pg_database;' 2>/dev/null
sudo tail -20 /var/log/postgresql/postgresql-16-main.log | grep -i collation
Как исправить
Перестройте индексы и обновите записанную версию правил командой обновления сортировки. Игнорировать предупреждение опасно: поиск может молча возвращать не то.
2. Локаль кластера отсутствует в системе
Почему происходит
Кластер создан с локалью, которой в системе нет — например после переноса на минимальный образ.
Как проверить
Сравните локаль кластера и доступные локали.
sudo -u postgres psql -c 'SHOW lc_collate;' 2>/dev/null
locale -a | head
Как исправить
Создайте нужную локаль в системе. Менять локаль существующего кластера нельзя: это делается только пересозданием.

Пример вывода

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

postgres[5300]: WARNING:  database "shop" has a collation version mismatch
postgres[5300]: DETAIL:  The database was created using collation version 2.36, but the operating system provides version 2.39.
postgres[5300]: HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE shop REFRESH COLLATION VERSION.

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация PostgreSQL: правила сортировки документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Наблюдалось после обновления библиотеки локалей на тестовой машине.
    собственная проверка, systemd 255
    сверено 15 сентября 2026