
Версия PostgreSQL на сервере Ubuntu напрямую влияет на производительность и безопасность приложений. Для систем на базе Ubuntu 22.04 поддерживаются версии PostgreSQL от 12 до 16. Каждое обновление включает исправления критических уязвимостей и улучшения планировщика запросов, которые могут снизить нагрузку на CPU до 15% в крупных базах данных.
Перед обновлением важно создать полную резервную копию с помощью pg_dumpall или инструментов, встроенных в pg_basebackup. Это обеспечит сохранность всех ролей, схем и данных. Пропуск этапа резервного копирования может привести к потерям информации при несовместимости старой и новой версии.
Добавление официального репозитория PostgreSQL позволяет устанавливать версии, которые не входят в стандартные репозитории Ubuntu. После обновления необходимо выполнить миграцию данных через pg_upgrade или ручной перенос с проверкой логов, чтобы убедиться, что все таблицы и индексы корректно перенесены и сервер запущен без ошибок.
Эта инструкция пошагово проведет через проверку текущей версии, резервное копирование, добавление репозитория, установку новой версии, перенос данных и удаление устаревшей версии, чтобы минимизировать простой системы и исключить потерю информации.
Обновление PostgreSQL на Ubuntu: пошаговое руководство

Для обновления PostgreSQL на Ubuntu сначала необходимо определить текущую установленную версию командой psql —version. Если версия ниже 16, обновление возможно через официальный репозиторий PostgreSQL. Рекомендуется фиксировать версию репозитория, чтобы избежать автоматического скачивания нестабильных сборок.
Создайте резервную копию всех баз данных с помощью pg_dumpall -U postgres -f /var/backups/all_databases.sql. Для больших баз можно использовать pg_basebackup, что ускоряет процесс и сохраняет бинарные файлы, необходимые для миграции.
Добавьте репозиторий PostgreSQL для Ubuntu с помощью команд wget -qO — https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add — и sudo sh -c ‘echo «deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main» > /etc/apt/sources.list.d/pgdg.list’. После этого выполните sudo apt update и установите новую версию sudo apt install postgresql-16.
Для переноса данных используйте pg_upgrade с указанием старого и нового каталога данных. Проверяйте логи /var/log/postgresql/pg_upgrade.log для выявления ошибок индексов или несоответствий типов данных.
После успешного обновления проверьте работу всех баз командой psql -U postgres -c «\l» и запустите тестовые запросы. Только после этого можно удалить старую версию PostgreSQL с помощью sudo apt remove postgresql-15 и очистить устаревшие файлы конфигурации.
Проверка текущей версии PostgreSQL на Ubuntu
Перед обновлением важно точно определить установленную версию PostgreSQL. Это позволяет выбрать совместимую версию для обновления и корректно спланировать миграцию данных.
Основные способы проверки версии:
- Внутри сервера PostgreSQL: подключитесь к базе командой sudo -u postgres psql и выполните SELECT version(); – отображает точную версию сервера.
- Через пакетный менеджер: apt list —installed | grep postgresql – показывает все установленные версии пакета и модули.
После проверки зафиксируйте версию в документации или заметках, чтобы исключить ошибки при выборе репозитория для обновления.
Создание резервной копии баз данных перед обновлением

Перед обновлением PostgreSQL обязательна полная резервная копия всех баз данных, ролей и схем. Это предотвращает потерю данных при ошибках миграции и несовместимости версий.
Основные методы резервного копирования:
- pg_dumpall – сохраняет все базы данных и роли в один файл SQL. Команда: sudo -u postgres pg_dumpall -f /var/backups/all_databases.sql.
- pg_dump – используется для отдельных баз. Рекомендуется для крупных систем, чтобы ускорить восстановление. Пример: sudo -u postgres pg_dump mydatabase > /var/backups/mydatabase.sql.
- pg_basebackup – выполняет бинарное резервное копирование кластера, включая WAL-журналы. Подходит для больших баз данных с минимальным простоем. Команда: sudo -u postgres pg_basebackup -D /var/backups/base -F tar -z.
После создания резервной копии рекомендуется проверить целостность файлов и доступность SQL-дампа с помощью pg_restore —list или тестового восстановления в отдельном кластере. Это исключает ошибки на этапе обновления.
Добавление официального репозитория PostgreSQL для новой версии

Для установки последней версии PostgreSQL на Ubuntu необходимо подключить официальный репозиторий PGDG, так как стандартные репозитории часто содержат устаревшие версии.
Пошаговое добавление репозитория:
- Импортируйте ключ подписи репозитория для проверки пакетов:
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- Добавьте репозиторий в список источников:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
- Обновите индекс пакетов:
sudo apt update
- Проверьте доступные версии PostgreSQL командой:
apt list -a postgresql
Использование официального репозитория гарантирует установку стабильных версий, корректное обновление зависимостей и доступ к последним исправлениям безопасности. Рекомендуется фиксировать версию пакета для избегания случайного обновления на тестовые сборки.
Установка новой версии PostgreSQL через apt

После добавления официального репозитория PGDG на Ubuntu установка новой версии PostgreSQL выполняется через пакетный менеджер apt. Рекомендуется проверять доступные версии командой apt list -a postgresql.
Пошаговая установка:
- Обновите индекс пакетов: sudo apt update
- Установите сервер PostgreSQL и клиентские утилиты: sudo apt install postgresql-16 postgresql-client-16
- Проверьте статус службы после установки: sudo systemctl status postgresql@16-main. Сервис должен быть активен и запущен.
- Настройте автоматический запуск сервера при старте системы: sudo systemctl enable postgresql@16-main
Если на сервере уже установлена старая версия PostgreSQL, новая версия создаст отдельный кластер данных. Это позволяет выполнять миграцию без остановки текущих баз и уменьшает риск потери данных.
Перенос данных из старой версии в новую
После установки новой версии PostgreSQL необходимо перенести данные из старого кластера. Для этого используют pg_upgrade или ручное восстановление из SQL-дампов.
Перенос с помощью pg_upgrade:
- Остановите старый кластер: sudo systemctl stop postgresql@15-main
- Запустите утилиту pg_upgrade с указанием путей к старому и новому кластерам:
sudo -u postgres pg_upgrade -b /usr/lib/postgresql/15/bin -B /usr/lib/postgresql/16/bin -d /var/lib/postgresql/15/main -D /var/lib/postgresql/16/main -U postgres
- Проверьте логи в /var/lib/postgresql/pg_upgrade_output.log на наличие ошибок индексов и несовпадений типов данных.
- После успешного переноса выполните анализ и пересоздание статистики:
vacuumdb --all --analyze-in-stages
При восстановлении из дампа SQL используйте команду: psql -U postgres -f /var/backups/all_databases.sql. Для больших баз рекомендуется разбивать дампы по отдельным базам для ускорения процесса.
После переноса убедитесь, что все роли, схемы и функции корректно работают, проверив списки баз командой psql -U postgres -c «\l» и протестировав ключевые запросы.
Проверка работы базы после обновления

После переноса данных необходимо убедиться, что PostgreSQL функционирует корректно и все базы доступны. Начните с проверки статуса сервиса:
- sudo systemctl status postgresql@16-main – должен отображать активное состояние.
- sudo journalctl -u postgresql@16-main —since «10 minutes ago» – проверка последних логов на наличие ошибок запуска.
Проверка доступности баз данных:
- Тестирование ключевых таблиц и индексов: SELECT COUNT(*) FROM table_name; для контроля целостности данных.
Дополнительно рекомендуется проверить работу функций, триггеров и пользовательских ролей. Если используются расширения, например postgis, убедитесь, что версии расширений совместимы с новой версией PostgreSQL.
После успешной проверки всех компонентов можно считать обновление завершенным и приступить к удалению старого кластера для освобождения ресурсов системы.
Удаление старой версии PostgreSQL и очистка системы

После успешного переноса данных и проверки работы новой версии PostgreSQL старую версию можно удалить, чтобы освободить место и исключить конфликты между кластерами.
Пошаговое удаление и очистка:
- Остановите старый кластер: sudo systemctl stop postgresql@15-main
- Удалите пакеты старой версии: sudo apt remove —purge postgresql-15 postgresql-client-15
- Очистите оставшиеся файлы конфигурации и каталоги данных: sudo rm -rf /var/lib/postgresql/15 /etc/postgresql/15
- Обновите индексы пакетов и удалите ненужные зависимости: sudo apt autoremove
Рекомендуется проверить состояние системы после удаления с помощью таблицы занятости диска:
| Команда | Описание | |
|---|---|---|
| df -h | Проверка свободного места на диске после удаления старой версии | /dev/sda1 50G 30G 20G 60% / |
| du -sh /var/lib/postgresql/* | Контроль размеров оставшихся каталогов PostgreSQL | 16M /var/lib/postgresql/16 |
| ls /etc/postgresql/ | Проверка удаления конфигурационных файлов старых версий | 16 |
После этих действий система будет очищена от старой версии PostgreSQL, а новая версия полностью готова к эксплуатации.
Вопрос-ответ:
Можно ли обновить PostgreSQL на Ubuntu без остановки старой базы данных?
Полностью параллельное обновление невозможно, так как pg_upgrade или восстановление из дампа требуют остановки старого кластера для корректного переноса данных. Однако можно минимизировать простой: установить новую версию в отдельный каталог и подготовить резервную копию заранее, чтобы свести время простоя к нескольким минутам.
Какая разница между pg_dump и pg_basebackup при создании резервной копии?
Команда pg_dump создаёт дамп базы данных в формате SQL или архивном формате, что удобно для отдельных баз и небольших серверов. pg_basebackup выполняет бинарное копирование всего кластера, включая журналы WAL, что ускоряет восстановление крупных систем и позволяет использовать бинарный перенос данных при обновлении PostgreSQL.
Что делать, если после обновления появляются ошибки в индексах или типах данных?
Сначала проверьте лог /var/lib/postgresql/pg_upgrade_output.log, чтобы определить проблемные объекты. Затем можно использовать REINDEX для исправления индексов и ALTER TABLE для корректировки типов данных, если они были некорректно перенесены. Для сложных случаев рекомендуется восстановление из дампа и пошаговая проверка каждой базы.
Можно ли удалить старую версию PostgreSQL сразу после переноса данных?
Не рекомендуется удалять старый кластер до проверки работы новой версии. Следует убедиться, что все базы, роли и функции работают корректно, провести тестовые запросы и проверить индексы. Только после этого старые пакеты и каталоги можно удалить, освободив дисковое пространство.
Как проверить, что новая версия PostgreSQL корректно обслуживает расширения, например PostGIS?
После обновления подключитесь к базе с расширением и выполните команды проверки версий: SELECT PostGIS_Version();. Также проверьте таблицы и функции, специфичные для расширения. Если версия расширения несовместима, потребуется обновить его через пакетный менеджер или пересоздать объекты в базе.
Как проверить, что после обновления PostgreSQL на Ubuntu все базы данных работают корректно?
После переноса данных сначала убедитесь, что служба новой версии запущена командой sudo systemctl status postgresql@16-main. Затем проверьте список всех баз данных через psql -U postgres -c «\l». Для каждой базы выполните контрольные запросы, например подсчёт строк в ключевых таблицах: SELECT COUNT(*) FROM table_name;. Если в проекте используются функции или триггеры, проверьте их выполнение через тестовые сценарии. Также важно проверить работу установленных расширений, например PostGIS, командой SELECT PostGIS_Version();. Логи сервера (/var/log/postgresql/postgresql-16-main.log) помогут выявить скрытые ошибки и предупреждения.
