Обновление PostgreSQL до новой мажорной версии в Alpine Linux
Содержание
После обновления на новую мажорную версию Alpine Linux было предложено также обновить и PostgreSQL.
Executing postgresql-common-1.1-r3.trigger
* You are using 'postgresql14'. It's recommended to upgrade to the latest
* major version provided by package 'postgresql15'.
* Use command 'pg_versions' to switch between versions.
Подготовка к апгрейду
Делаем резервную копию БД:
su - postgres
pg_dumpall > pg-dump-14.sql
Сохраняем в архив вместе с конфигурацией:
tar -cvpf pgsql-14.tar \
/etc/postgresql14/pg_hba.conf \
/etc/postgresql14/pg_ident.conf \
/etc/postgresql14/postgresql.conf \
/var/lib/postgresql/pg-dump-14.sql
rm /var/lib/postgresql/pg-dump-14.sql
Останавливаем сервис, отключаем автозагрузку:
rc-service postgresql stop
rc-update del postgresql
Установка новой версии
Смотрим, что установлено:
apk info | grep postgre
postgresql-common
postgresql14-client
postgresql14
postgresql-common-openrc
postgresql14-openrc
Устанавливаем версию 15:
apk add postgresql15-client postgresql15 postgresql15-openrc
* You are using 'postgresql14'. It's recommended to upgrade to the latest
* major version provided by package 'postgresql15'.
* Use command 'pg_versions' to switch between versions.
Переключаем на версию 15:
pg_versions set-default 15
Инициализируем кластер БД:
/etc/init.d/postgresql setup
Миграция БД
Перед миграцией убедиться, что обе версии СУБД остановлены. Затем переносим базы данных:
su - postgres
/usr/libexec/postgresql15/pg_upgrade \
--old-datadir=/var/lib/postgresql/14/data \
--new-datadir=/var/lib/postgresql/15/data \
--old-bindir=/usr/libexec/postgresql14 \
--new-bindir=/usr/libexec/postgresql15
Запускаем СУБД и сбор статистики:
rc-service postgresql start
su - postgres
/usr/libexec/postgresql15/pg_upgrade \
--old-datadir=/var/lib/postgresql/14/data \
--new-datadir=/var/lib/postgresql/15/data \
--old-bindir=/usr/libexec/postgresql14 \
--new-bindir=/usr/libexec/postgresql15
Мержим старую конфигурацию /etc/postgresql14 с новой /etc/postgresql15.
Перезапускаем СУБД, проверяем работоспособность. Если всё хорошо, то добавляем в автозагрузку.
Чистка
Удаляем старую версию PostgreSQL, чистим конфигурацию, БД и мусор:
apk del --purge postgresql14-client postgresql14 postgresql14-openrc
rm -r /etc/postgresql14 /var/lib/postgresql/14
rm /var/lib/postgresql/delete_old_cluster.sh
Перезагрузка. Готово.