Миграция базы данных PostgreSQL 14 → 16 с использованием pg_dump и pg_restore

Этот инструкция описывает процесс обновления базы данных PostgreSQL с версии 14 до 16 с использованием pg_dump и pg_restore. Метод основан на резервном копировании и восстановлении базы данных.

1. Создание резервной копии базы данных в PostgreSQL 14

Подключитесь к контейнеру с PostgreSQL 14:

docker exec -it sonarqube-db-1 bash

Создайте резервную копию базы данных:

pg_dump -U sonar -d sonarqube -F c -f /tmp/sonarqube_backup.dump

-F c — указывает формат резервной копии (архив, который можно восстановить с помощью pg_restore).

-f /tmp/sonarqube_backup.dump — путь к файлу резервной копии.

2. Остановка контейнера с PostgreSQL 14

Остановите контейнер с PostgreSQL 14:

docker-compose down

3. Создание нового контейнера с PostgreSQL 16

Обновите docker-compose.yml, заменив PostgreSQL 14 на 16:

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

Запустите контейнер с PostgreSQL 16:

docker-compose up -d

4. Восстановление базы данных в PostgreSQL 16

Подключитесь к контейнеру с PostgreSQL 16:

docker exec -it sonarqube-db-1 bash

Восстановите базу данных из резервной копии:

pg_restore -U sonar -d sonarqube /tmp/sonarqube_backup.dump

После восстановления база данных должна быть готова к работе.

5. Оптимизация памяти PostgreSQL

Для увеличения производительности можно изменить параметры памяти в postgresql.conf (обычно находится в /var/lib/postgresql/data).

Пример настроек:

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

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

docker restart sonarqube-db-1

6. Решение проблем с нехваткой памяти

Проверьте потребление ресурсов контейнером:

docker stats

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

docker-compose restart db

7. Очистка и оптимизация базы данных

Подключение к контейнеру PostgreSQL

docker exec -it sonarqube-db-1 bash

Подключение к PostgreSQL

psql -U postgres

Очистка базы данных (VACUUM)

Простой вакуум:

VACUUM;

Вакуум с анализом:

VACUUM ANALYZE;

Глубокая очистка (полная реорганизация данных):

VACUUM FULL;

Перестроение индексов (по необходимости)

Для перестроения всех индексов в базе данных:

REINDEX DATABASE sonarqube;

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

REINDEX TABLE your_table_name;
REINDEX INDEX your_index_name;

Завершение работы с контейнером

Выйдите из PostgreSQL:

\q

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

exit

8. Перезапуск контейнера SonarQube (если необходимо)

docker restart sonarqube-db-1

Резюме

Используйте pg_dump и pg_restore для безопасного обновления базы данных PostgreSQL.
Оптимизируйте память PostgreSQL для повышения производительности.
Очистите базу данных с помощью VACUUM и REINDEX.
Перезапустите контейнер SonarQube после выполнения всех операций.
Эти шаги помогут успешно обновить PostgreSQL до версии 16 и обеспечить стабильную работу базы данных.

🇺🇦 Stop Russian Aggression!
See what you can do →

Выберите мессенджер

Telegram Email Discord Forms