Обновление PostgreSQL 9.4 до 14 на Ubuntu

Материал из Записки на полях
Перейти к навигации Перейти к поиску

Устанавливаем Postgresql 14

apt update
apt install postgresql-14

Инициализируем базу данных

/usr/lib/postgresql/14/bin/pg_ctl initdb -D /mnt/db/14/main/

Миграция

Предварительно проверяем возможность корректной миграции с ключём --check

/usr/lib/postgresql/14/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.4/bin/ --new-bindir=/usr/lib/postgresql/14/bin/ --old-datadir=/mnt/db/9.4/main --new-datadir=/mnt/db/14/main/ --check

Если проверка пошла успешно, начинаем процедуру. Время простоя зависит от объема данных.

systemctl stop postgresql@9.4-main.service
ln -s /etc/postgresql/9.4/main/postgresql.conf /mnt/db/9.4/main/postgresql.conf
sudo su - postgres
/usr/lib/postgresql/14/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.4/bin/ --new-bindir=/usr/lib/postgresql/14/bin/ --old-datadir=/mnt/db/9.4/main --new-datadir=/mnt/db/14/main/

Копируем pg_hba.conf и правим конфиг Postgresql 14

cp /etc/postgresql/9.4/main/pg_hba.conf /etc/postgresql/14/main/pg_hba.conf
vi /etc/postgresql/14/main/postgresql.conf

Запускаем Postgresql 14 и проверяем

systemctl start postgresql@14-main.service
systemctl status postgresql@14-main.service

При апгрейде базы статистика оптимизации не переносится, поэтому запускаем

sudo su - postgres
/usr/lib/postgresql/14/bin/vacuumdb --all --analyze-in-stages

Завершающий этап

sudo systemctl enable postgresql@14-main.service
sudo systemctl disable postgresql@9.4-main.service

И удаляем старую базу

./delete_old_cluster.sh