Обновление PostgreSQL с 14-й на 15-ю версию на Ubuntu 20.04

Просмотры: 4300
Категория: Администрирование
Создано: 14 ноября 2021
Тэги: PostgreSQL Linux Ubuntu

Новые мажорные версии PostgreSQL выходят довольно часто. Разработчики добавляют новый функционал с каждой такой версией. А старые версии уже становятся неподдерживаемыми. В этой заметке я расскажу как перейти на более новую версию сервера PostgreSQL на примере ОС Ubuntu. В частности переходить будем с 14-й на 15-ю версию.

Это изменённая версия моей статьи по переходу с 13-й версии на 14-ю. Ничего не поменялось за исключением цифр :)

Итак, пусть на сервере установлена 13-я версия PostgreSQL и нам по каким-либо причинам нужно обновиться до 14-й версии. Делаем это так.

Сначала создаём дамп всех наших баз. Делается это всё из-под пользователя postgres.

sudo su postgres

cd /tmp

pg_dumpall > backup.sql

exit

Теперь обновляем систему, если не сделали это заранее

sudo apt update

и устанавливаем свежий PostgreSQL

sudo apt install postgresql-15 postgresql-server-dev-15

В системе теперь работают два кластера, один старый на 5432 порту, и новый - на порту 5433. Останавливаем их

sudo systemctl stop postgresql.service

Совершаем собственно обновление из-под postgres.

sudo su postgres

/usr/lib/postgresql/15/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/14/main \
--new-datadir=/var/lib/postgresql/15/main \
--old-bindir=/usr/lib/postgresql/14/bin \
--new-bindir=/usr/lib/postgresql/15/bin \
--old-options '-c config_file=/etc/postgresql/14/main/postgresql.conf' \
--new-options '-c config_file=/etc/postgresql/15/main/postgresql.conf'

exit

Правим конфигурационные файлы. Меняем порты. Старая (14-я в нашем случае) будет работать на 5433 порту, а новая (15-я у нас) на 5432 порту.

sudo vim /etc/postgresql/15/main/postgresql.conf
# меняем port на 5432

sudo vim /etc/postgresql/14/main/postgresql.conf
# меняем port на 5433

Если нужно (но если предыдущая версия была правильно настроено, то не нужно), правим файл pg_hba.conf

sudo vim /etc/postgresql/15/main/pg_hba.conf

Запускаем сервер PostgreSQL.

sudo systemctl start postgresql.service

Убеждаемся, что всё работает правильно. Например, заходим в базу в командной строке. Проверяем работоспособность серверов, которые используют PostgreSQL (например, сайты, написанные на Django). Если всё нормально, удаляем старый сервер

sudo apt remove postgresql-14 postgresql-server-dev-14

Удаляем старые конфигурационные файлы.

sudo rm -rf /etc/postgresql/14/

Чистим кластер

sudo su postgres

cd /tmp

./delete_old_cluster.sh

Перезапускаем кластер

sudo systemctl restart postgresql.service

Разработчики рекомендуют выполнить ещё такую команду

/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

На этом всё. Теперь в нашей системе PostgreSQL стоит самой последней версии.