Миграции — это не «просто применить SQL»
Alembic — стандарт де-факто для миграций в SQLAlchemy-проектах. Но даже с инструментом легко наделать ошибок.
Вот принципы, которые помогают держать миграции под контролем:
🗂 Одна миграция — одно логическое изменение • Не смешивайте создание таблицы, добавление индекса и заполнение справочника в одном файле • Если что-то пойдёт не так — проще откатить и исправить
🔁 Идемпотентность: миграция должна быть безопасной для повторного запуска • Используйте IF NOT EXISTS, ALTER TABLE ... ADD COLUMN IF NOT EXISTS • Для заполнения данных — проверяйте, не выполнено ли действие ранее
🧪 Тестирование миграций: • Запуск на тестовой БД с продакшен-подобными данными • Проверка, что откат (alembic downgrade) работает корректно • Интеграционные тесты, которые проверяют, что приложение работает после миграции
🚨 Продакшен-чеклист: • Бэкап перед применением • Применение в окне низкой нагрузки • Мониторинг блокировок и длительности выполнения • План отката на случай проблем
🎯 Практический совет: Для сложных изменений (например, переименование колонки с данными) используйте двухэтапный подход: 1) добавить новую колонку и начать писать в обе, 2) перенести данные, 3) удалить старую колонку в следующей миграции.
#Alembic #DatabaseMigrations #PostgreSQL #SQLAlchemy #Backend #DataEngineering #OpenToWork