Обновление версии PostgreSQL: инструкция

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Что важно знать перед обновлением PostgreSQL

    Главное — понимать особенности обновлений между разными версиями.

    Номера состоят из двух цифр — например, 10.1. Первая цифра — номер основной версии (10). Вторая цифра — номер корректирующего релиза (1).

    До PostgreSQL 10 номера состоят из трёх цифр. Например, 9.6.3. Здесь 9.6 — номер основного выпуска, а 3 — номер дополнительной версии.

    Понимать эту разницу нужно для того, чтобы правильно выбирать способ обновления.

    В корректирующих версиях не меняется форма данных. Благодаря этому нет проблем с совместимостью. Поэтому переход с PostgreSQL 10.1 на 10.6 выполняется без лишних затрат ресурсов. Для обновления выключите сервер, замените исполняемые файлы и запустите сервер заново.

    Однако в документации отмечается, что для некоторых выпусков могут потребоваться ручные изменения. Поэтому всегда читайте примечания к выпуску, прежде чем выполнять обновление.

    В основных версиях формат данных может измениться. Это усложняет обновление. В таком случае нельзя изменить номер. Нужно или выгружать данные и загружать их заново, или использовать программу pg_upgrade, или применять логическую репликацию.

    Обо всех этих способах поговорим ниже.

    Обновление в рамках одной основной версии

    Посмотрим на примере апдейта PostgreSQL 14.1 до PostgreSQL 14.3 на сервере Ubuntu.

    PostgreSQL доступен на Ubuntu по умолчанию. Обновитесь командой:

    Debian и Ubuntu выпускают только одну версию PostgreSQL для каждого выпуска ОС. Например, в Debian Squeeze/6.0 есть только PostgreSQL 8.4. Если вам нужна другая версия PostgreSQL, используйте пакеты от PGDG.

    Если вы хотите самый свежий релиз, то нужно прежде установить репозиторий Постгреса.

    Импортируйте ключ подписи:

    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

    Обновите перечень пакетов в системе:

    Установите нужную версию СУБД:

    sudo apt-get -y install postgresql-14.3

    Чтобы посмотреть список установленных СУБД, выполните:

    dpkg --get-selections | grep postgres

    Также посмотрите список кластеров:

    Прежде чем вносить изменения, остановите PostgreSQL:

    sudo service postgresql stop

    Когда пакеты Postgres устанавливаются, они создают для вас кластер по умолчанию. Нам нужно переименовать новый кластер postgres, чтобы при апгрейде старого кластера имена не конфликтовали.

    sudo pg_renamecluster 14.3 main main_pristine sudo pg_upgradecluster 14.1 main sudo service postgresql start

    Снова проверьте список кластеров и убедитесь, что новый работает:

    Избавьтесь от старого кластера:

    sudo pg_dropcluster 14.1 main

    Подставьте в эти команды нужные номера версий вместо 14.1 и 14.3.

    Обновление через pg_dumpall

    Если нужно изменить основную версию, используйте программу pg_dumpall. Суть этого метода в том, чтобы выгрузить данные из одной основной версии, а затем загрузить их в другую.

    1. Прежде чем выгружать данные, убедитесь, что в БД не проводятся никакие изменения прямо сейчас. В противном случае часть изменений может не попасть в итоговый дамп.

    2. Получите дамп и запишите его в файл:

    3. Измените имя старого каталога чтобы исключить появление конфликта имён:

    mv /usr/local/pgsql /usr/local/pgsql.old

    Старый каталог можно просто удалить. Но разумнее будет его переименовать, чтобы оставить возможность для восстановления. Вместо /usr/local/pgsql укажите путь до своего каталога.

    1. Установите новую версию из исходного кода. Подробная инструкция на русском языке — в документации.
    2. Сформируйте новый кластер:
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
    1. Перенесите все изменения в файлы pg_hba.conf и postgresql.conf.
    2. Запустите сервер БД:
    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
    1. Восстановите данные из резервной копии:
    /usr/local/pgsql/bin/psql -d postgres -f output_file

    Минус этого способа — сервер будет выключен длительное время. Для сокращения времени простоя можно установить новый сервер в другой каталог, а затем запустить старый и новый серверы на разных портах. Для переноса данных используйте команду:

    pg_dumpall -p 5432 | psql -d postgres -p 5433

    Вместо 5432 и 5433 укажите номера портов, на которых вы запустили серверы.

    Обновление через pg_upgrade

    Чтобы не делать выгрузку и загрузку данных, используйте программу pg_upgrade. Она помогает обновиться быстрее. Программа pg_upgrade создаёт системные таблицы заново, учитывая изменения последних версий. При этом старые файлы данных сохраняются. Кроме того, pg_upgrade проверяет, что кластеры совместимы.

    Программу pg_upgrade помогает обновиться с PostgreSQL 8.4.X до текущего релиза СУБД.

    Рассмотрим общий план обновления с помощью pg_upgrade.

    1. Переместите старый кластер. Это нужно сделать, если каталог не был привязан к старому релизу. Например, он находится по адресу /usr/local/pgsql. Если вы его не переименуете, то при обновлении произойдёт конфликт.

    Переименование выполняется при выключенном сервере командой:

    mv /usr/local/pgsql /usr/local/pgsql.old
    1. Соберите новую версию из исходного кода. Настройте configure, чтобы флаги были совместимы с конфигурацией старого кластера. Прежде чем начинать обновление, pg_upgrade проверит совместимость флагов.
    2. Инсталлируйте новые исполняемые файлы. Для размещения сервера в нестандартной директории, используйте prefix:
    make prefix=/usr/local/pgsql.new install
    1. Используйте initdb, чтобы инициализировать новый кластер. Проверьте, что флаги совместимы с флагами старого кластера.
    2. Инсталлируйте разделяемые объектные файлы расширения. Если для них доступны обновления, pg_upgrade самостоятельно создаст скрипт для их последующей установки.
    3. Перенесите файлы полнотекстового поиска.
    4. Настройте аутентификацию peer в pg_hba.conf. Это нужно сделать, потому что pg_upgrade будет несколько раз подключаться к старому и новому хостам.
    5. Проверьте, что старый и новый серверы остановлены:
    pg_ctl -D /opt/PostgreSQL/9.6 stop pg_ctl -D /opt/PostgreSQL/14 stop
    1. Запустите pg_upgrade от нового сервера. Для начала вызовите программу в режиме проверки, добавив флаг: pg_upgrade --check. В ответ вы получите перечень корректировок, которые необходимо внести вручную после опгрейда.
    2. Если вы вносили правки в файл pg_hba.conf, восстановите его предыдущее состояние pg_hba.conf. Иногда требуются изменения других конфигов на новом кластере, чтобы они соответствовали параметрам старого кластера.
    3. Запустите сервер.

    Если результат устраивает, удалите ненужный кластер.

    Подробности и особенности использования pg_upgrade смотрите в документации.

    Использование логической репликации

    В 10-й версии СУБД появился метод логической репликации объектов данных и изменений в них. Он основан на использовании репликационных идентификаторов — обычно ими выступают первичные ключи.

    В основе логической репликации лежит использование модели публикаций и подписок. Пользователь создаёт снимок публикуемой базы данных и копирует его на подписчика. В документации PostgreSQL одним из типичных сценариев использования логической репликации названа как раз репликация между разными основными версиями PostgreSQL.

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

    Резервный сервер может располагаться на том же хосте или на другом. После завершения синхронизации доступны разные опции. Например, вы можете сделать новый сервер главным, а старый — отключить.

    Главный плюс логической репликации — минимальный downtime. Прерывание работы сервера в некоторых случаях ограничивается несколькими секундами.

    Разверните PostgreSQL в облаке за минуту

    Мы рассмотрели универсальные методы апдейта PostgreSQL. Иногда процесс отличается. Например, обновление версии PostgreSQL для 1C требует установки дополнительных зависимостей.

    В некоторых случаях обязанности по обновлению PostgreSQL можно делегировать. Например, Simple-Server предлагает облачные базы данных. Среди них — PostgreSQL актуальной версии. Обновление и администрирование базы в этом случае возьмет на себя провайдер. При таком подходе изменить версию PostgreSQL можно в один клик через панель управления.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны