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).