Ошибка миграции на юг-отношение уже существует
фон: После добавления djangoratings в мой проект я попытался запустить
django-admin.py schemamigration djangoratings --initial
--settings=myapp.settings.local
что привело к неизвестной ошибке команды для schemamigration. Я попытался устранить эту ошибку, добавив каталог проекта в PYTHONPATH (я использую virtualenv и virtualenvwrapper). Это разрешило неизвестную ошибку команды для schemamigration, но я думаю, что я указал один каталог выше моего каталога проекта для PYTHONPATH и когда начальная миграция была запущена для djangoratings, он жаловался на что-то связанное с whoosh (который я использую в своем проекте). Я изменил каталог PYTHONPATH и попытался запустить
django-admin.py schemamigration djangoratings --initial
--settings=myapp.settings.local
снова. Затем я запустил команду migrate. Это когда я получил ошибку:
django.db.utils.DatabaseError: relation "djangoratings_vote" already exists
Я пробовал мигрировать обратно через:
django-admin.py migrate djangoratings zero --settings=myapp.settings.local
Running migrations for djangoratings:
- Migrating backwards to zero state.
< djangoratings:0006_add_cookies
< djangoratings:0005_add_exclusions
< djangoratings:0004_rethink_recommendations
< djangoratings:0003_add_correlations
< djangoratings:0002_add_mean_and_stddev
< djangoratings:0001_initial
а затем снова запуск --initial, но та же ошибка произошла после выполнения команды migrate.
Я посмотрел на список таблиц в моей базе данных и не видел ни одного для djangoratings_vote.
мой текущий список миграций для djangoratings выглядит следующим образом:
0001_initial.py 0006_add_cookies.py
0001_initial.pyc 0006_add_cookies.pyc
0002_add_mean_and_stddev.py 0007_initial.py
0002_add_mean_and_stddev.pyc 0007_initial.pyc
0003_add_correlations.py 0008_initial.py
0003_add_correlations.pyc 0008_initial.pyc
0004_rethink_recommendations.py 0009_initial.py
0004_rethink_recommendations.pyc 0009_initial.pyc
0005_add_exclusions.py __init__.py
0005_add_exclusions.pyc __init__.pyc
как я могу разрешить отношение "djangoratings_vote" уже существует ошибка? Предпочтительно использовать Юг?
3 ответов
мне кажется, что Юг не синхронизирован с вашей базой данных (это может произойти, если Юг начал создавать таблицы, но затем терпит неудачу, не имея возможности завершить обратную миграцию). Я бы рекомендовал вручную восстановить базу данных и юг следующим образом (Сначала сделайте резервную копию своей БД в случае ошибки):
- удалить все таблицы djangoratings_* из базы данных.
- откройте таблицу south_migrationhistory в базе данных и отфильтруйте по имя приложения. Удалите все записи для djangoratings.
- удалить все файлы миграции в каталоге djangoratings/migrations.
Как только вы это сделаете, у вас должна быть чистая база данных и история юга. В этот момент повторно запустите:
./manage.py schemamigration djangoratings --initial
который будет генерировать один файл миграции. Затем:
./manage.py migrate djangoratings.
предполагая, что вы не получите ошибок, которые у вас были в первый раз, это должно настроить базу данных, чтобы Вы были готовы использовать рейтинги Джанго.
есть лучший способ решить это:
python manage.py migrate djangoratings --fake
и затем:
python manage.py migrate
Это в расширении ответа @stef_huayue, если он не совсем работает, как ожидалось.
узнайте, какая миграция не удалась. В coressponding migration_file.py как правило, будет где migrations.AddField
операция происходит. Потом бежать:
python manage.py migrate app_name --fake [migration_file]
без расширения файла. Затем:
python manage.py migrate app_name