Обязательные действия при обновлении операционной системы

Обновление операционной системы сервера требует реиндексации баз данных PostgreSQL.

Причина: из-за особенностей работы PostgreSQL при обновлении ОС меняется версия системной библиотеки glibc, отвечающая за настройки сортировки Collation в PostgreSQL. Это может привести к появлению дубликатов значений на уникальных индексах. Дубли нарушают целостность данных и могут вызвать ошибки в работе сервера — например, зависание спуллера из-за накопления сообщений о дублях в логах.

Решение: при обновлении ОС обновите Collation для PostgreSQL 15 и проведите реиндексацию базы данных для всех версий PostgreSQL.

Порядок действий про обновлении ОС:

  1. Остановите Staffcop.

sudo staffcop stop
sudo systemctl disable staffcop
  1. Обновите операционную систему в соответствии с вашим процессом.

  2. Только для PostgreSQL 15: обновите настройки сортировки Collation.

echo "ALTER DATABASE postgres REFRESH COLLATION VERSION;" | sudo -u postgres psql -d postgres
echo "ALTER DATABASE template1 REFRESH COLLATION VERSION;" | sudo -u postgres psql -d template1
echo "ALTER DATABASE staffcop REFRESH COLLATION VERSION;" | sudo -u postgres psql -d staffcop
  1. Для всех версий PostgreSQL: реиндексируйте БД.

echo "REINDEX (VERBOSE) DATABASE postgres" | sudo -u postgres psql -d postgres
echo "REINDEX (VERBOSE) DATABASE template1" | sudo -u postgres psql -d template1
echo "REINDEX (VERBOSE) DATABASE staffcop" | sudo -u postgres psql -d staffcop
  1. Запустите Staffcop.

sudo systemctl enable staffcop
sudo staffcop start
  1. Готово!