dancha
@dancha
Обожаю python

Повторная initial миграция с существующей бд?

Пред.история:
Добавил я как то модель в своё app.
Мигрировал на тестовый сервер(но почему то не проверял)
Потом сделал миграцию на основной сервер, там все прекрасно работало.
Прошло время, мне пришлось вернуться к этой модели на тестовый сервер.
Я удивился, когда обнаружил, что данной модели нет в бд.

Мои действия:
Не долго думая, я решил, что сбросить миграции будет хорошим способом.
Я удалил все файлы из app-migrations
Я удалил все строки из бд django_migrations
По новой запустил makemigrations
Затем migrate, на что был ответ:
django.db.utils.ProgrammingError: relation "тут_типа_модель_которыя_уже_есть_в_бд" already exists
Прогуглил, сказано сделать "ФакАп":
migrate --fake app
Я сделал (Applying app.0001_initial... FAKED)
, не сработало.
Еще были советы сделать syncdb, но это тоже чего то совсем не работает.
migrate app 0001 тоже не то.

До этого, когда бд была почти пуста, я спокойно удалял миграции и чистил бд, затем снова делал миграции и все было норм.
Сейчас у меня очень большой объем бд, и все делать заново не очень охото (даже просто экспортировать, а потом импортировать).

Вопрос:
Как сделать изначальную миграцию (0001_initial), для уже существующей бд, после удаления всех миграций и сделав makemigrations как будто впервые.
  • Вопрос задан
  • 773 просмотра
Решения вопроса 1
JRazor
@JRazor
Senior StarkOverFlow Programmer
Чтобы откатить все миграции в приложении, надо сделать так:
migrate app_name zero

Потом применить их снова:
migrate app_name

Если миграции менялись, но не откатывались заранее - могут возникнуть проблемы: придется удалять таблицу вручную и применять все миграции к приложению заново. А если и initial файл изменился, то и на двух серверах тоже.

А migrate --fake app_name - это просто запись в django_migrations, не больше

И да, не надо каждый раз пересоздавать миграции - сам себе проблем только наживешь: там одни миграции, там другие, там откатывал, там не откатывал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы