В статье мы расскажем, как выполнить обновление PostgreSQL на операционных системах семейства Linux: Ubuntu и Debian.
Когда нужно изменить версию PostgreSQL
В интернете размещено большое количество программного обеспечения. Оно может быть бесплатным или коммерческим, а также относиться к любой категории: текстовые и графические редакторы, операционные системы, утилиты, среды программирования и др.
Развитие ПО происходит на регулярной основе: разработчики добавляют новый функционал, устраняют баги (при их наличии) и уязвимости. Чаще всего эти улучшения добавляются в новых версиях программы, в том числе и в PostgreSQL.
PostgreSQL — это популярная объектно-реляционная СУБД, с которой работает большое количество пользователей по всему миру. Ее поддержкой занимается сообщество PostgreSQL, которое добавляет новые возможности вместе с новой версией СУБД. Номер версии PostgreSQL обычно состоит из двух частей:
- номер основной версии — как правило, в нее вносятся крупные изменения;
- номер корректирующего релиза, в котором устранены старые ошибки и уязвимости.
Обновление на основе логической репликации
Когда требуется переход на новую версию PostgreSQL? Чаще всего для этого есть две причины:
- 1. Для работы с базами данных требуется функционал, которого нет в текущей версии.
- 2. В старой версии обнаружены уязвимости, по которым злоумышленники могут перехватить данные из базы.
Существует несколько способов изменить версию Постгрес. Ниже мы опишем, как происходит обновление PostgreSQL: эти инструкции подойдут для ОС Ubuntu и Debian.
Обновление PostgreSQL в пределах основной версии
- 1 Подключитесь к серверу по SSH.
-
2
Выполните обновление:
sudo apt upgrade
-
3
Добавьте репозиторий Постгрес:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Затем загрузите ключ подписи:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
-
4
Обновите набор пакетов в операционной системе:
sudo apt update
-
5
Установите PostgreSQL:
sudo apt install postgresql-14.3
Вместо 14.3 укажите нужную версию СУБД.
-
6
Проверьте список установленных компонентов:
dpkg --get-selections | grep postgres
Затем ознакомьтесь со списком кластеров:
pg_lsclusters
В выводе отобразится список кластеров со старой и новой версией.
-
7
Чтобы внести изменения в базу данных, необходимо остановить PostgreSQL. Это можно сделать с помощью команды:
sudo service postgresql stop
-
8
Чтобы избежать конфликтов между прежним и недавно созданным кластером, необходимо переименовать новый кластер. Для этого выполните команду:
sudo pg_renamecluster 14.3 main new_name
Где:
- main — прежнее имя нового кластера,
- new_name — новое имя кластера.
-
9
Обновите старый кластер:
sudo pg_upgradecluster 14.1 main
Вместо main укажите имя кластера.
-
10
Запустите Постгрес:
sudo service postgresql start
-
11
Проверьте список кластеров:
pg_lsclusters
Убедитесь, что новый кластер активен — он должен иметь статус online:
14 main 5432 online postgres /var/lib/postgresql/14.3/main /var/log/postgresql/postgresql-14.3-main.log
-
12
Удалите старый кластер для старой и новой версии. Для этого поочередно выполните команды:
sudo pg_dropcluster 14.1 main
Вместо 14.1 укажите старую версию СУБД.
Готово, вы обновили PostgreSQL в пределах основной версии.
Обновление через pg_upgrade
- 1 Подключитесь к серверу по SSH.
-
2
Обновите пакеты. Для этого поочередно выполните команды:
sudo apt update sudo apt upgrade
-
3
Остановите PostgreSQL:
sudo service postgresql stop
-
4
Переименуйте каталог со старой версией:
mv /usr/local/pgsql /usr/local/pgsql.old
- 5 Установите новую версию из исходного кода. Для этого используйте официальную документацию.
- 6 Проверьте совместимость флагов старой и новой версии.
-
7
Загрузите файлы запуска и начните установку:
make prefix=/usr/local/pgsql.new install
Вместо /usr/local/pgsql.new укажите путь к серверу баз данных с новой версией Постгрес.
- 8 Перенесите файлы полнотекстового поиска — словари, стоп-слова, списки синонимов и др. — в новую директорию.
- 9 Чтобы pg_upgrade могла подключиться к старому и новому хосту, добавьте аутентификацию peer в файл pg_hba.conf.
-
10
Остановите оба сервера баз данных. Для этого поочередно выполните команды:
pg_ctl -D /opt/PostgreSQL/12 stop pg_ctl -D /opt/PostgreSQL/14 stop
Где:
- 12 — старая версия СУБД,
- 14 — новая версия СУБД.
-
11
Ознакомьтесь со списком корректировок, которые нужно будет внести после апдейта PostgreSQL:
pg_upgrade --check
Затем выполните команду от имени нового сервера БД.
- 12 Восстановите прежнее состояние файла pg_hba.conf.
- 13 Запустите обновленный кластер. Если он работает корректно, удалите старый кластер.
Готово, вы обновили PostgreSQL через pg_upgrade.
Обновление через pg_dumpall
- 1 Подключитесь к серверу по SSH.
-
2
Обновите пакеты. Для этого поочередно выполните команды:
sudo apt update sudo apt upgrade
-
3
Убедитесь, что в базе данных не производятся изменения. После этого загрузите дамп и запишите его в отдельный файл:
pg_dumpall > file_name
Вместо file_name укажите имя файла.
-
4
Приостановите сервер PostgreSQL:
pg_ctl stop
-
5
Переименуйте каталог со старой версией Постгрес:
mv /usr/local/pgsql /usr/local/pgsql.old
Вместо /usr/local/pgsql укажите путь до каталога.
- 6 Установите новую версию из исходного кода. Для этого используйте официальную документацию.
-
7
Создайте новый кластер:
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
- 8 Перенесите содержимое конфигурационных файлов в pg_hba.conf и postgresql.conf соответственно.
-
9
Возобновите работу сервера PostgreSQL:
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
-
10
Восстановите данные из бэкапа:
/usr/local/pgsql/bin/psql -d postgres -f file_name
Вместо file_name укажите имя файла.
-
11
Перенесите информацию со старого сервера БД на новый. Для этого используйте команду:
pg_dumpall -p 1234 | psql -d postgres -p 4321
Где:
- 1234 — порт, на котором запускается старый сервер БД;
- 4321 — порт, на котором запускается новый сервер БД.
Готово, вы обновили PostgreSQL через pg_dumpall.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊