HOWTO: Обновление версии PostgreSQL

Материал из WiKi - UserSide

В данном разделе описана процедура обновления сервера PostgreSQL на новую основную версию (например, с 9.х на 11.х). Вы также можете обновиться на максимально доступную версию на момент выполнения обновления - все они обратно совместимы.

Мы рекомендуем выполнять процедуру обновления сервера квалифицированным сотрудником используя официальную инструкцию: https://postgrespro.ru/docs/postgresql/11/upgrading.

Обновление в пределах основной версии (например, с 11.1 на 11.3) осуществляется без каких либо дополнительных действий.

Существует несколько способов обновления. Здесь будет рассмотрен способ с полным дампом перед восстановлением и затем восстановлением из дампа после обновления. Также процедура будет описана для ОС Debian и ее производных (Ubuntu и т.д.). Для других дистрибутивов и ОС процедура практически точно такая же, но используются другие утилиты, специфичные для конкретного дистрибутива или ОС.

Предполагается, что установка PostgreSql осуществлялась по этой инструкции и в систему добавлены репозитории PostgreSql, предоставляющие доступ к различным версиям PostgreSql и расширениям, а также установка производилась по этой инструкции и был установлен пакет postgresql-9.6, а не метапакет postgresql. Если у вас установлен метапакет, то обновление должно произойти автоматически при обновлении метапакета, но не факт, что оно пройдет корректно. Мы рекомендуем использовать конкретные пакеты (с указанием версии) вместо метапакетов.

Если в процессе обновления не удается успешно выполнить какую-то команду, пожалуйста, не продолжайте выполнять остальные пункты, пока не решите проблему. К сожалению, мы не являемся специалистами по всем проблемам PostgreSql, а также остальных служб, поэтому не всегда сможем дать квалифицированный ответ.

1. Остановите работу всех систем, использующих базу данных. Остановите работу php-fpm или apache2, а также временно отключите задачи в cron и остановите работающие модули usm_*.

2. Проверьте, какие версии PostgreSql и PostGis у вас установлены на данный момент:

sudo -u postgres psql -d userside -A -c "SELECT VERSION()"
sudo -u postgres psql -d userside -A -c "SELECT PostGIS_full_version()"

3. Обновите текущие версии, а также, если у вас установлен PostGis 2.4, установите PostGis 2.5 и обновите это расширение в базе данных, затем убедитесь, что расширение в базе данных обновлено:

sudo apt-get update
sudo apt-get --only-upgrade install postgresql-9.6 postgresql-9.6-postgis-2.4 -y
sudo apt-get install postgresql-9.6-postgis-2.5 -y
sudo -u postgres psql -d userside -A -c "ALTER EXTENSION postgis UPDATE"
sudo -u postgres psql -d postgres -A -c "ALTER EXTENSION postgis UPDATE"
sudo -u postgres psql -d userside -A -c "SELECT PostGIS_full_version()"
sudo -u postgres psql -d postgres -A -c "SELECT PostGIS_full_version()"

4. Установите новую версию PostgreSql и PostGis не удаляя старой(!).

sudo apt-get install postgresql-11 postgresql-11-postgis-2.5 -y

5. Выполните запасное резервное копирование всех баз данных сервера (в данном случае будет использоваться последняя версия утилиты pg_dumpall, но база данных будет использоваться все еще прежняя):

sudo -u postgres pg_dumpall > /tmp/dump_9.6_before_update.dump

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

pg_lsclusters

Вы должны увидеть таблицу:

Ver Cluster Port Status Owner    Data directory
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main
11  main    5433 online postgres /var/lib/postgresql/11/main

7. При установке PostgreSql, установщик автоматически создает кластер с конфигурацией и базами данных, чтобы можно было начинать работу с базой данных сразу же. В случае обновления это лишняя операция и кластер для 11 версии нужно удалить. Мы будем его создавать на основе кластера версии 9.6:

sudo pg_dropcluster 11 main --stop

8. Остановите работу службы

sudo systemctl stop postgresql

9. Сделайте запасное резервное копирование текущих каталогов с файлами базы данных и файлами конфигураций. Будьте осторожны, файлы базы данных могут занимать очень много места, поэтому, возможно, будет лучше выбрать другое место для их размещения. Позже, если обновление пройдет успешно, эти каталоги нужно будет удалить:

sudo cp -r /var/lib/postgresql/9.6/main/ /tmp/pg9.6-lib
sudo cp -r /etc/postgresql/9.6/main/ /tmp/pg9.6-etc

10. Запустите процедуру создания нового кластера на основе старого (обновление версии кластера):

sudo pg_upgradecluster -m upgrade 9.6 main

11. Запустите службу:

sudo systemctl start postgresql

12. Посмотрите, как выглядят ваши кластеры:

pg_lsclusters

Теперь вы должны увидеть вот такую таблицу, в которой версия 9.6 находится в состоянии down:

Ver Cluster Port Status Owner    Data directory
9.6 main    5433 down   postgres /var/lib/postgresql/9.6/main
11  main    5432 online postgres /var/lib/postgresql/11/main

13. Проверьте версии:

sudo -u postgres psql -d userside -A -c "SELECT VERSION()"
sudo -u postgres psql -d userside -A -c "SELECT PostGIS_full_version()"

14. Запустите все службы, которые вы остановили в п.1 и проверьте работу USERSIDE и модулей. Убедитесь, что всё работает корректно.

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

sudo pg_dropcluster 9.6 main --stop
sudo apt-get purge postgresql-9.6 postgresql-9.6-postgis-2.4 postgresql-9.6-postgis-2.5 -y
sudo apt autoremove -y
sudo rm -rf /tmp/pg9.6-* /tmp/dump_9.6_before_update.dump

Обновление PostgreSQL завершено.

Видеоинструкция: https://youtu.be/c9ULVSz8yQM