HOWTO: Обновление версии PostgreSQL
Обновление PostgreSQL
В данном разделе описана процедура обновления сервера 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