2 min read

Миграция PostgreSQL с 14 на 16: безопасный апгрейд через pg_dump/pg_restore

Миграция PostgreSQL с 14 на 16: безопасный апгрейд через pg_dump/pg_restore

Обновление PostgreSQL с 14 до 16 — шаг, который стоит сделать ради прироста производительности, новых фич и долгосрочной поддержки. Ниже — проверенный маршрут через pg_dump и pg_restore, который сохраняет целостность данных и минимизирует простой.

Зачем переходить на PostgreSQL 16

PostgreSQL 16 приносит заметные улучшения в оптимизации запросов, параллелизме и работе с памятью. Апгрейд даёт:

  • Более быстрые и масштабируемые запросы.
  • Совместимость с актуальными фреймворками и приложениями.
  • Более свежие патчи безопасности.

Подготовка к миграции

  1. Проверь совместимость — убедись, что приложения, драйверы и расширения работают с PostgreSQL 16.
  2. Сделай полный бэкап — без него начинать нельзя.
  3. Подними PostgreSQL 16 — на том же сервере, в новом контейнере или на отдельной машине.

Шаг 1 — экспорт данных из PostgreSQL 14

В Docker:

docker exec -it sonarqube-db-1 bash
pg_dump -U sonar -d sonarqube -F c -f /tmp/sonarqube_backup.dump

На хосте:

pg_dump -U username -h localhost -p 5432 -F c -b -v -f backup.dump dbname

Что значат флаги:

  • -F c — формат custom, подходящий для pg_restore.
  • -b — включает большие объекты (BLOB).
  • -v — подробный вывод процесса.

Шаг 2 — остановка PostgreSQL 14

В Docker:

docker-compose down

На хосте:

sudo systemctl stop postgresql@14-main

Шаг 3 — развёртывание PostgreSQL 16

Пример docker-compose:

db:
  image: postgres:16
  restart: unless-stopped
  environment:
    - POSTGRES_USER=sonar
    - POSTGRES_PASSWORD=PASSWORD
    - POSTGRES_DB=sonarqube
  volumes:
    - sonarqube_db:/var/lib/postgresql
    - postgresql_data:/var/lib/postgresql/data

Запуск нового контейнера:

docker-compose up -d

Шаг 4 — восстановление данных в PostgreSQL 16

В Docker:

docker exec -it sonarqube-db-1 bash
pg_restore -U sonar -d sonarqube /tmp/sonarqube_backup.dump

На хосте:

pg_restore -U username -h localhost -p 5433 -d dbname -v backup.dump
Укажи правильный порт, если PostgreSQL 16 слушает нестандартный (например, -p 5433).

Шаг 5 — проверка миграции

Подключись к новой базе:

psql -U username -h localhost -p 5433 dbname

Проверь таблицы, целостность данных и права пользователей.

Шаг 6 — оптимизация памяти PostgreSQL

Отредактируй postgresql.conf (обычно в /var/lib/postgresql/data):

shared_buffers = 512MB
work_mem = 4MB
maintenance_work_mem = 64MB

Перезапусти сервис или контейнер:

docker restart sonarqube-db-1

Шаг 7 — очистка и переиндексация

Подключись к PostgreSQL:

docker exec -it sonarqube-db-1 bash
psql -U postgres

Команды обслуживания:

VACUUM;              -- базовая очистка
VACUUM ANALYZE;      -- очистка + обновление статистики
VACUUM FULL;         -- глубокая реорганизация
REINDEX DATABASE sonarqube;  -- пересборка всех индексов

Для отдельных таблиц или индексов:

REINDEX TABLE your_table_name;
REINDEX INDEX your_index_name;

Выход из psql и контейнера:

\q
exit

Шаг 8 — перезапуск зависимых сервисов

Если базу использует, например, SonarQube:

docker restart sonarqube-db-1

Подход через pg_dump/pg_restore даёт контролируемый апгрейд без потери данных и заодно повод привести базу в порядок — обновить статистику, перестроить индексы, настроить память под актуальные нагрузки.

Совет: прогони весь процесс на staging перед продакшеном — так найдёшь все подводные камни заранее.

Если хочешь обсудить похожую задачу — пиши на [email protected] или заходи на 1it.pro.

Связаться с нами
Telegram
WhatsApp
Email