Миграции базы данных
Этот документ объясняет, как управлять миграциями Alembic в проекте Crisis-Monitor.
Создание миграций
При изменении моделей используйте Flask-Migrate:
flask --app app:create_app db migrate -m "Описание изменения"
flask --app app:create_app db upgrade
Историческая цепочка начинается с ревизии 0037 и предполагает, что схема до 0037 уже существует. Поэтому CI компилирует все ревизии, проверяет единый head 0081 и читает полный граф истории. Он не выдаёт пустую базу или offline SQL за поддерживаемую точку развёртывания: историческим data migration нужны существующая схема и online-соединение.
Ручной хук check-migrations запускайте только против development-базы, обновлённой до текущего head:
MIGRATION_CHECK_DATABASE_URL=postgresql://user:password@localhost/crisis_dev \
pre-commit run check-migrations --hook-stage manual
Проверка завершается ошибкой, если Alembic не смог сравнить схему или должен создать новую ревизию. Без MIGRATION_CHECK_DATABASE_URL или DATABASE_URL команда не запускается, чтобы отставший локальный SQLite-файл не выдавался за реальный schema drift.
Объединение старых миграций
Для clean-database bootstrap проекту нужна отдельная owner-approved базовая ревизия. Не удаляйте, не объединяйте и не переписывайте текущую историю в обычной feature- или cleanup-задаче: это требует проверенного production- снимка, репетиции восстановления и согласованного плана развёртывания.