Что такое фейковые миграции в Django и в каких случаях их применяют

Ответ

Фейковые (fake) миграции в Django — это процесс пометки миграций как выполненных в базе данных без фактического выполнения соответствующих SQL-запросов для изменения схемы.

Это мощный, но рискованный инструмент, который используется в строго определенных ситуациях.

Основные сценарии использования:

  1. Синхронизация состояния. Когда схема базы данных уже находится в нужном состоянии (например, изменения были применены вручную или другим инструментом), но Django об этом не знает.
  2. Разрешение конфликтов миграций. При слиянии веток, когда история миграций расходится, но итоговая схема БД корректна.
  3. Начальная настройка проекта. При развертывании существующего проекта на новую базу данных, которая уже создана с нужной схемой (например, через sqlmigrate).

Как применить:

Чтобы пометить все еще не примененные миграции в приложении как выполненные:

python manage.py migrate --fake my_app

Чтобы пометить конкретную миграцию:

python manage.py migrate --fake my_app 0002_some_migration_name

Важные предостережения:

  • Используйте с осторожностью. Неправильное применение может привести к рассинхронизации состояния схемы БД и моделей Django, что вызовет трудноуловимые ошибки.
  • Убедитесь в соответствии схемы. Перед выполнением --fake вы должны быть на 100% уверены, что структура таблиц в БД соответствует тому, что ожидает миграция.
  • Не применяйте к initial миграциям на уже существующей базе с данными, если вы не уверены в полном совпадении схем.