#!/bin/sh # Тест 2: чистая пустая БД — ТОЛЬКО alembic (без create_all). Миграция 006 # должна создать ВСЕ таблицы слоёв; cases создаёт create_all/init отдельно # (миграция 006 не дублирует legacy-скрипты 001-005 — это осознанное решение). set -e docker rm -f vec-mig-empty >/dev/null 2>&1 || true docker rm -f vec-mig-run2 >/dev/null 2>&1 || true docker run -d --name vec-mig-empty -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=vector_mchs postgres:16 >/dev/null sleep 6 docker run -d --name vec-mig-run2 --network container:vec-mig-empty -v /root/vector-mig-test:/app -w /app -e DATABASE_URL=postgresql://postgres:postgres@localhost:5432/vector_mchs python:3.11-slim sleep 600 >/dev/null docker exec vec-mig-run2 pip install -q alembic==1.14.0 sqlalchemy psycopg2-binary # На голой БД нужен cases до бэкфилла (запрос читает cases) — минимальный init: docker exec vec-mig-run2 sh -c "cd /app && PYTHONPATH=/app python -c \" from sqlalchemy import create_engine from backend.models import Case engine = create_engine('postgresql://postgres:postgres@localhost:5432/vector_mchs') Case.__table__.create(engine) print('cases table created') \"" docker exec vec-mig-run2 sh -c "cd /app/backend && alembic upgrade head" 2>&1 | tail -1 docker exec vec-mig-run2 sh -c "cd /app && PYTHONPATH=/app python -c \" import psycopg2, os conn = psycopg2.connect(os.environ['DATABASE_URL']) cur = conn.cursor() for t in ('search_models','search_teams','field_observations','areas_checked','found_events','reference_priors'): cur.execute(f'select count(*) from {t}') print(t, cur.fetchone()[0]) cur.execute('select version_num from alembic_version') print('alembic version:', cur.fetchone()[0]) \""