Django migration: получена ошибка relation does not exist или relation already exists

Я пытался перенести приложение Diango с одного сервера на другой и сменить движок базы данных с sqllite3 на postgres. После того как я перенес приложение с github на новый сервер и перенастроил параметры базы данных для postgres, я получил ошибку relation not existing error при попытке миграции, как показано ниже

$ python manage.py migrate
Traceback (most recent call last):
  File "/data/apps/anaconda3/envs/parts_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedTable: relation "parts" does not exist
LINE 1: SELECT "parts"."type" FROM "parts"
...

Но после того, как я создал таблицу в базе данных и повторил попытку, я получил ошибку "отношение уже существует", как показано ниже.

$ python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, partsdb, sessions
Running migrations:
  Applying partsdb.0001_initial...Traceback (most recent call last):
  File "/data/apps/anaconda3/envs/parts_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
psycopg2.errors.DuplicateTable: relation "parts" already exists
...

Итак, я получу ошибку "отношение не существует", если я уничтожу таблицу, и я получу ошибку "отношение уже существует", если я создам таблицу.

Я опустил результаты трассировки, которые получены из библиотек Django и очень длинные, но я могу предоставить их, если они могут помочь. Спасибо.

Я нашел причину проблем и смог решить их, хотя я все еще не знаю, почему это произошло. Итак, на случай, если кто-то столкнется с подобными проблемами, причина в том, что в файле определен класс, который обращается к таблице базы данных для получения некоторых данных, как показано в приведенном ниже фрагменте кода

class PartsForm(forms.ModelForm):
    for type in parts.objects.values_list('type'):     
    ...

Интересно, почему коды в этом файле будут выполняться для миграции? Таблица parts является единственной таблицей в базе данных. Но в любом случае, после того как я удалил этот файл из приложения, команда "python manage.py migrate" выполнилась и завершилась без ошибок (она создала все таблицы в базе данных, включая таблицу parts).

Вернуться на верх