Ответ
Фейковые (fake) миграции в Django — это процесс пометки миграций как выполненных в базе данных без фактического выполнения соответствующих SQL-запросов для изменения схемы.
Это мощный, но рискованный инструмент, который используется в строго определенных ситуациях.
Основные сценарии использования:
- Синхронизация состояния. Когда схема базы данных уже находится в нужном состоянии (например, изменения были применены вручную или другим инструментом), но Django об этом не знает.
- Разрешение конфликтов миграций. При слиянии веток, когда история миграций расходится, но итоговая схема БД корректна.
- Начальная настройка проекта. При развертывании существующего проекта на новую базу данных, которая уже создана с нужной схемой (например, через
sqlmigrate
).
Как применить:
Чтобы пометить все еще не примененные миграции в приложении как выполненные:
python manage.py migrate --fake my_app
Чтобы пометить конкретную миграцию:
python manage.py migrate --fake my_app 0002_some_migration_name
Важные предостережения:
- Используйте с осторожностью. Неправильное применение может привести к рассинхронизации состояния схемы БД и моделей Django, что вызовет трудноуловимые ошибки.
- Убедитесь в соответствии схемы. Перед выполнением
--fake
вы должны быть на 100% уверены, что структура таблиц в БД соответствует тому, что ожидает миграция. - Не применяйте к
initial
миграциям на уже существующей базе с данными, если вы не уверены в полном совпадении схем.