Содержание

Обновление PostgreSQL до новой мажорной версии в Alpine Linux

После обновления на новую мажорную версию Alpine Linux было предложено также обновить и PostgreSQL.

text

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.

Делаем резервную копию БД:

shell

su - postgres
pg_dumpall > pg-dump-14.sql

Сохраняем в архив вместе с конфигурацией:

shell

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

Останавливаем сервис, отключаем автозагрузку:

shell

rc-service postgresql stop
rc-update del postgresql

Смотрим, что установлено:

shell

apk info | grep postgre

text

postgresql-common
postgresql14-client
postgresql14
postgresql-common-openrc
postgresql14-openrc

Устанавливаем версию 15:

shell

apk add postgresql15-client postgresql15 postgresql15-openrc

text

* 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:

shell

pg_versions set-default 15

Инициализируем кластер БД:

shell

/etc/init.d/postgresql setup

Перед миграцией убедиться, что обе версии СУБД остановлены. Затем переносим базы данных:

shell

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

Запускаем СУБД и сбор статистики:

shell

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, чистим конфигурацию, БД и мусор:

shell

apk del --purge postgresql14-client postgresql14 postgresql14-openrc
rm -r /etc/postgresql14 /var/lib/postgresql/14
rm /var/lib/postgresql/delete_old_cluster.sh

Перезагрузка. Готово.

  1. PostgreSQL_multiple_major_versions
  2. pg_dumpall documentation
  3. pg_upgrade documentation
  4. Nextcloud Alpine Wiki