Загрузка данных


TS=$(date +%F_%H%M)
  mkdir -p /opt/terraform-web/backend/backups

  Шаг 1 — Бэкап прода (первым делом, обязательно)

  pg_dump -U tfweb_user -h localhost -Fc terraform_web \
    > /opt/terraform-web/backend/backups/pre_mig_$TS.dump
  ls -lh /opt/terraform-web/backend/backups/pre_mig_$TS.dump
  → пришли мне размер файла (убедимся, что дамп не пустой).

  Шаг 2 — Проверить текущую «голову» alembic

  cd /opt/terraform-web/backend
  /opt/terraform-web/venv/bin/alembic current
  → пришли мне вывод. Жду add_vm_groups_001 (наша миграция ждёт именно её как down_revision).
  - если так — идём дальше;
  - если другое (пусто / уже add_os_images_001 / что-то новее) — стоп, разберёмся, почему.

  Шаг 3 — Сгенерировать точный SQL офлайн (БД не меняется)

  cd /opt/terraform-web/backend
  /opt/terraform-web/venv/bin/alembic upgrade add_vm_groups_001:head --sql \
    > /tmp/mig_$TS.sql
  cat /tmp/mig_$TS.sql
  → пришли мне весь mig_$TS.sql. Проверю глазами перед применением: должны быть только CREATE TABLE os_images, три индекса (ix_os_images_sha256, uq_os_images_owner_sha256, партиальный uq_os_images_catalog_sha256),
  idx_os_images_expires, ADD COLUMN image_id в vm_requests/user_vms + их индексы, и в конце UPDATE alembic_version. Ничего лишнего — только тогда «зелёный свет».

  Шаг 4 — Тест на копии прода (прод НЕ трогаем)

  createdb -U tfweb_user -h localhost terraform_web_migtest
  pg_restore -U tfweb_user -h localhost -d terraform_web_migtest \
    /opt/terraform-web/backend/backups/pre_mig_$TS.dump
  psql -U tfweb_user -h localhost -d terraform_web_migtest \
    --single-transaction -f /tmp/mig_$TS.sql
  Проверить, что таблица появилась:
  psql -U tfweb_user -h localhost -d terraform_web_migtest \
    -c "\d os_images" -c "\di uq_os_images_catalog_sha256"
→ пришли вывод. Если ок — убираем копию:
  dropdb -U tfweb_user -h localhost terraform_web_migtest
  Упало на копии → чиним локально, прод так и не увидел сломанную миграцию.

  Шаг 5 — Применить к проду атомарно (только после успешного теста)

  psql -U tfweb_user -h localhost -d terraform_web \
    --single-transaction -f /tmp/mig_$TS.sql

  Шаг 6 — Проверка

  /opt/terraform-web/venv/bin/alembic current   # должно стать add_os_images_001
  → пришли вывод.

  Пока БД на этом останавливаемся — сервисы перезапустим уже после того, как разложим файлы кода (шаг из общего порядка). Если после всего что-то не так — есть задокументированный откат из дампа pre_mig_$TS.dump.

  ---
  Начинай с Шага 1–2 и пришли мне вывод alembic current — по нему подтвержу, что цепочка миграций сходится, и дам добро на Шаг 3. Как только скажешь, что предпочитаешь для переноса файлов (USB-tar или rsync), подготовлю и
  эту часть.