Обновление PostgreSQL 15

Обновление на ARM (aarch64) с нестандартной локалью

Я только что потратил время на исправление сбоя при обновлении на одном сервере с двумя контейнерами.

  1. Его процессор — ARM.
  2. Discourse был настроен с локалью en_UK.UTF-8.

Пошагово я выяснил следующее:

  1. tianon/postgres-upgrade:13-to-15 не работает на ARM.
  2. Настройка локали хранится в файле share/${CONTAINER}/postgres_data/postgresql.conf.

Я начал с закомментирования части env: в контейнере данных, чтобы убедиться, что используются локали по умолчанию.

Таким образом, чтобы выбраться из хаоса обновления, я предпринял опасный шаг, предположив, что различия в сортировке между en_GB и en_US незначительны, и безжалостно обновил весь кластер до en_US:

UPDATE pg_database SET datctype='en_US.UTF-8', datcollate='en_US.UTF-8';

Я не уверен, что этот шаг необходим, YMMV. Оставляю это здесь для более сведущих людей, чтобы они высказались, и я категорически не рекомендую делать это для других языков!

Затем я заменил локаль в postgresql.conf:

sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
ОБНОВЛЕНИЕ POSTGRES ЗАВЕРШЕНО

:tada:

Не думайте, что это было легко: я даже не упоминаю долгий путь изучения вариантов, особенно потому, что когда я вмешался, административный интерфейс был недоступен, а последнее резервное копирование было выполнено 6 дней назад. Мне пришлось повозиться, прежде чем я смог прийти к правильному — или, по крайней мере, рабочему — решению.

Надеюсь, это сэкономит кому-то время.

5 лайков