Ошибка миграции на юг-отношение уже существует

фон: После добавления 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 ответов


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

  1. удалить все таблицы djangoratings_* из базы данных.
  2. откройте таблицу south_migrationhistory в базе данных и отфильтруйте по имя приложения. Удалите все записи для djangoratings.
  3. удалить все файлы миграции в каталоге 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