Миграция базы данных 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 и обеспечить стабильную работу базы данных.