Подтвердить что ты не робот

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

Фон: Добавив djangoratings к моему проекту, я попытался запустить

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

что привело к неизвестной ошибке команды для схемы. Я попытался разрешить эту ошибку, добавив мою директорию проекта в 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

а затем снова запустить - инициализировать, но такая же ошибка возникла после выполнения команды 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" уже существует ошибка? Предпочтительно использовать Юг?

4b9b3361

Ответ 1

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

  • Удалите все таблицы djangoratings_ * из вашей базы данных.
  • Откройте таблицу south_migrationhistory в базе данных и отфильтруйте по имени приложения. Удалите все записи для djangoratings.
  • Удалите все файлы миграции в каталоге djangoratings/migrations.

Как только вы это сделаете, у вас должна быть чистая база данных и южная история. На этом этапе запустите:

./manage.py schemamigration djangoratings --initial

Будет создан один файл миграции. Тогда:

./manage.py migrate djangoratings.

Предполагая, что вы не получили ошибки, которые у вас были в первый раз, это должно настроить базу данных, чтобы вы были готовы использовать рейтинги django.

Ответ 2

есть лучший способ его решить:

python manage.py migrate djangoratings --fake

а затем:

python manage.py migrate

Ответ 3

Это расширение ответа @stef_huayue, если оно не работает должным образом.

Узнайте, какая миграция завершилась неудачей. Соответствующий файл migration_file.py обычно будет находиться там, где выполняется операция migrations.AddField. Затем выполните: python manage.py migrate app_name --fake [migration_file]

без расширения файла. Далее следуют:

python manage.py migrate app_name