Обновление PostgreSQL в Docker¶
Обновление мажорной версии PostgreSQL требует инициализации БД с использованием новой версии PostgreSQL, создания дампа и его восстановления. Ниже описана процедура для инсталляций CodeScoring, развёрнутых с помощью Docker Compose.
Необходимые условия¶
Дисковое пространство¶
Требуется свободное дисковое пространство в объёме не менее размера тома db-data.
Пример утилизации дискового пространства при обновлении:
- версии PostgreSQL:
- исходная: 13.21
- новая: 15.15
- данные инсталляции CodeScoring:
- ~500 000 пакетов
- ~1 200 проектов
- ~22 000 образов
- размер тома
db-data: ~50 GiB - потребление дискового пространства в процессе обновления:
- сжатая резервная копия: ~9 GiB
- сжатый дамп: ~3 GiB
- размер
db-dataпосле восстановления: ~32 GiB
Окно планового технического обслуживания¶
Процедура требует полной остановки CodeScoring. Фактическое время выполнения зависит от объёма данных.
Для примера выше:
- создание сжатой резервной копии: ~11 минут 45 секунд
- восстановление резервной копии: ~2 минуты 30 секунд
pg_dump+pg_restore: ~3 минуты 30 секунд- перенос данных между томами: ~1 минута
- сбор статистики планировщика: ~1 секунда
Переопределение конфигурации Docker Compose¶
Для обновления требуется файл переопределения конфигурации Docker Compose. Файл postgres-upgrade.override.yml поставляется, начиная с версии CodeScoring 2026.3.1, и располагается в той же директории, что и файл docker-compose.yml.
Описание компонентов файла переопределения конфигурации¶
Тома¶
upgrade-new-db-data- временныйpgdataPostgreSQL новой версииupgrade-dump- сжатый дампupgrade-backup- сжатый бэкап
Сервисы¶
psql-new- PostgreSQL новой версии с конфигурацией, идентичной сервисуpsqlupgrade-dump- создание сжатого дампаupgrade-dump-restore- восстановление дампа в PostgreSQL новой версииupgrade-cleanup-transfer- очистка и перенос данных в основной томdb-dataupgrade-analyze-in-stages- итеративный сбор статистики планировщикаupgrade-backup- создание резервной копииupgrade-backup-restore- восстановление резервной копии
Резервное копирование¶
Создание резервной копии¶
Остановите CodeScoring:
Создайте резервную копию:
Восстановление резервной копии¶
Остановите CodeScoring:
Восстановите резервную копию:
docker compose \
-f docker-compose.yml \
-f postgres-upgrade.override.yml \
run --rm upgrade-backup-restore
Убедитесь, что значение POSTGRES_IMAGE в файле .env соответствует версии PostgreSQL до обновления:
Процедура обновления¶
Установите в .env:
POSTGRES_IMAGE=postgres:13.23-rev1 # версия, с которой обновляемся
POSTGRES_UPGRADE_IMAGE=postgres:15.15-rev1 # версия, на которую обновляемся
Загрузите образы, необходимые для обновления:
Остановите все сервисы:
Инициализируйте PostgreSQL новой версии, выполните дамп и восстановление:
docker compose \
-f docker-compose.yml \
-f postgres-upgrade.override.yml \
run --rm upgrade-dump-restore
Снова остановите сервисы:
Перенесите данные в основной том db-data:
docker compose \
-f docker-compose.yml \
-f postgres-upgrade.override.yml \
run --rm upgrade-cleanup-transfer
Установите версию PostgreSQL для образа, используемого сервисом psql, в файле .env:
Запустите сбор статистики (можно не дожидаться завершения):
docker compose \
-f docker-compose.yml \
-f postgres-upgrade.override.yml \
run --rm upgrade-analyze-in-stages
Запустите CodeScoring:
docker compose -f docker-compose.yml up \
--detach \
--force-recreate \
--remove-orphans \
--renew-anon-volumes
Проверьте логи и убедитесь в работоспособности инсталляции CodeScoring:
Удалите следующие тома:
${COMPOSE_PROJECT_NAME}_upgrade-new-db-data${COMPOSE_PROJECT_NAME}_upgrade-dump${COMPOSE_PROJECT_NAME}_upgrade-backup