Раздел помощи SpaceWeb

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

19 фев, 2024

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

В PostgreSQL существует несколько методов обновления, каждый из которых имеет свои особенности и преимущества.

  • установка пакетов с новой версией PostgreSQL,
  • использование pg_dumpall,
  • использование pg_upgrade,
  • обновление через логическую репликацию.

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

Подготовка к установке: что нужно знать

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

Номера версий в PostgreSQL представлены двумя цифрами, например, 10.1, где первая цифра обозначает основную версию (10), а вторая – номер корректирующего релиза (1). 

Важно! До версии PostgreSQL 10 номера имели три цифры, как, например, 9.6.3, где 9.6 – номер основного выпуска, а 3 – номер дополнительной версии.

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

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

Таким образом, перед началом процесса обновления важно внимательно изучить особенности вашей конкретной версии PostgreSQL и выбрать подходящий метод. 

Обновление PostgreSQL 14.1 до PostgreSQL 14.3 на сервере Ubuntu

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

Способ 1. Установка пакетов с новой версией PostgreSQL

Этот метод чаще всего используется для минорных обновлений и предполагает установку пакетов с новой версией PostgreSQL. Однако перед выполнением этого шага рекомендуется изучить release notes, чтобы удостовериться, что обновление не приведет к конфликтам или проблемам совместимости.

Обновление PostgreSQL на Ubuntu – процесс, который можно выполнить всего лишь с помощью нескольких команд. Но он требует внимательности и определенной последовательности шагов. 

По умолчанию PostgreSQL входит в репозиторий Ubuntu, а значит, это облегчит вам и установку, и обновление БД.

Для перехода на последнюю версию PostgreSQL выполните следующие шаги:

  1. Обновите текущие пакеты с использованием команды:

sudo apt-get upgrad

Важно! Debian и Ubuntu предоставляют только одну версию PostgreSQL для каждого выпуска операционной системы. Если вам нужна другая версия, рекомендуется воспользоваться пакетами от PGDG (PostgreSQL Global Development Group).

  1. Добавьте репозиторий PGDG для установки других версий PostgreSQL:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

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

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

  1. Переименуйте новый кластер PostgreSQL, чтобы избежать конфликтов имен при обновлении:

sudo pg_renamecluster 14.3 main main_pristine

  1.  Обновите старый кластер

sudo pg_upgradecluster 14.1 main

  1.  Запустите сервис PostgreSQL:

sudo service postgresql start

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

pg_lsclusters

  1.  Наконец, удалите старый кластер:

sudo pg_dropcluster 14.1 main

Важно! Замените номера версий в командах на актуальные значения, например, вместо «14.1» и «14.3» пропишите актуальные номера версий PostgreSQL.

Способ 2. Обновление через pg_dumpall

Для обновления можно воспользоваться стандартной программой «pg_dumpall», которая создает резервные копии всех баз данных. Этот метод обеспечивает надежное восстановление, но может привести к длительному простою базы данных в процессе обновления.

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

  1. Для создания дампа данных и сохранения его в файл пропишите команду:

pg_dumpall > output_file

  1. Далее остановите сервер:

pg_ctl stop

  1. Измените имя старого каталога, чтобы предотвратить возможные конфликты имен:

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

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

Замените «/usr/local/pgsql» на путь к вашему каталогу.

  1. Установить новую версию PostgreSQL из исходного кода. 
  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

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

pg_dumpall -p 1111 | psql -d postgres -p 2222

Где 1111 и 2222 – номера портов, на которых запущены серверы. 

Способ 3. Обновление с помощью программы pg_upgrade

Важно! Этот метод требует от вас особого внимания. Необходимо следить за журналами и выполнить дополнительные шаги после завершения основного процесса.

Для обновления PostgreSQL без необходимости в выгрузке и загрузке данных рекомендуется воспользоваться программой pg_upgrade. Она предоставляет более быстрый и удобный метод обновления. 

Эта программа пересоздает системные таблицы, учитывая изменения в последних версиях PostgreSQL, сохраняя при этом старые файлы данных. Кроме того, pg_upgrade проводит проверку совместимости между кластерами, что обеспечивает более плавный процесс обновления.

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

  1. Переместите старый кластер.

Если каталог не был привязан к старому релизу PostgreSQL (например, /usr/local/pgsql), его необходимо переименовать, чтобы избежать конфликта при обновлении.

Команда для переименования при выключенном сервере выглядит следующим образом:

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

  1. Настройте «configure» так, чтобы флаги были совместимы с конфигурацией старого кластера.
  2. Установите новые исполняемые файлы, введя:

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/8.4 stop

pg_ctl -D /opt/PostgreSQL/14 stop

  1. Запустите pg_upgrade от имени нового сервера. Но сначала выполните его проверку с помощью команды: 

pg_upgrade –check

Так вы получите перечень корректировок, которые могут потребоваться после обновления.

  1.  Запустите сервер.

Использование pg_upgrade обеспечивает эффективное обновление PostgreSQL с минимальным временем простоя и без необходимости выгрузки и загрузки данных.

Способ 4. Обновление на основе логической репликации

Для снижения времени простоя базы данных можно использовать логическую репликацию, которая стала доступной начиная с версии PostgreSQL 10.0. Этот метод основан на модели публикаций и подписок, где создается снимок базы данных, подлежащий публикации, и передается подписчику. 

Логическая репликация использует репликационные идентификаторы, часто выступающие в роли первичных ключей в базе данных.

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

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

Заключение

Таким образом, эффективное обновление версии PostgreSQL представляет собой ключевую задачу для поддержания стабильной и безопасной работы баз данных. В нашем руководстве мы рассмотрели различные методы апдейта PostgreSQL, включая использование pg_dumpall, программу pg_upgrade, а также логическую репликацию. 

Каждый из этих методов имеет свои преимущества и особенности, позволяя администраторам выбрать оптимальный способ обновления в зависимости от конкретных требований и условий их системы. Благодаря этим разнообразным методам, апдейт PostgreSQL становится гибким и индивидуально настраиваемым процессом, обеспечивая минимальный downtime и безопасное внедрение новых возможностей в СУБД.