Обновление PostgreSQL

В этой статье я расскажу как в Debian 8 (jessie) обновить версию PostgreSQL, например, с версии 9.4 до 9.6. Эта процедура несколько отличается от привычного для Debian набора команд apt-get update && apt-get upgrade, так как после установки новой версии нужно ещё обновить кластеры баз данных.

Перед началом операции обновления настоятельно рекомендую сделать полный бэкап, хотя бы при помощи pg_dumpall. Что-то вроде этого:

sudo -u postgres pg_dumpall > /var/backups/pg_all_databases.sql

В репозиториях Debian пока нет свежей версии PostgreSQL, поэтому придётся воспользоваться репозиторием разработчиков:

# добавляем репозиторий
echo "deb https://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/postgresql.list

# получаем публичный ключ
gpg --keyserver keyserver.ubuntu.com --recv-keys 7FCC7D46ACCC4CF8

# добавляем ключ в доверенные
gpg --export --armor 7FCC7D46ACCC4CF8 | sudo apt-key add -

Обновляем список пакетов:

sudo apt-get update

Устанавливаем новую версию PostgreSQL:

sudo apt-get install postgresql-9.6

После установки в системе будет два кластера баз данных: новый и старый. Убедимся, что это так:

pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5433 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Так как новый кластер был создан автоматически и не содержит ценных данных, то мы можем безболезненно его удалить следующей командой:

sudo pg_dropcluster --stop 9.6 main

Теперь можно начать процедуру обновления кластера:

sudo pg_upgradecluster -v 9.6 9.4 main

Если вдруг система в процессе выполнения этой команды не сможет остановить старый кластер, то придётся помочь ей нижеприведённой командой, после чего повторить попытку.

sudo pg_ctlcluster 9.4 main stop

После успешного окончания обновления, проверяем жизнеспособность нового кластера, а затем удаляем старый:

sudo pg_dropcluster 9.4 main

Деинсталлируем старую версию PostgreSQL из системы:

sudo apt-get remove postgresql-9.4

Если новая версия СУБД вдруг окажется остановленной к этому моменту, то запустим её:

sudo systemctl postgresql start

На этом процесс обновления завершён. Далее я лишь приведу пару команд для проверки версии установленной PostgreSQL.

 

Версия PostgreSQL выводится утилитой psql при подключении к серверу:

sudo -u postgres psql
psql (9.6.2, server 9.6.3)
Type "help" for help.

postgres=#

Ещё один вариант проверки версии PostgreSQL — ввести в интерактивном терминале psql команду:

select version();
 PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)

Добавить комментарий