Обновление PostgreSQL с 14-й на 15-ю версию на Ubuntu 20.04
- Просмотры: 5224
- Категория: Администрирование
- Создано: 14 ноября 2021
- Тэги:
Новые мажорные версии 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 стоит самой последней версии.