Перемещение базы данных django postgres на новый сервер приводит к InconsistentMigrationHistory - PullRequest
1 голос
/ 27 мая 2020

У меня есть файл дампа базы данных моей PostgreSQL базы данных, созданной pg_dump.

Переношу этот файл на новый сервер. Я также перенес все соответствующие файлы models.py на этот сервер Never. Я использовал следующую команду для загрузки всех данных на новый сервер.

gunzip -c dump_file | psql -p port db_name db_user

Я настроил Django для доступа к этой базе данных, и я могу запрашивать данные, используя manage.py shell_plus. Для eaxmple я могу запустить Images.objects.all().count(), который возвращает правильное число, то есть такое же количество объектов изображения, какое было на старом сервере.

Учитывая, что это другой сервер, он не содержит никаких исходных файлов миграции. Я использовал ./manage.py makemigrations для создания файлов миграции. Кажется, это работает правильно, и файлы миграции создаются для каждого из моих installed_apps.

Далее запускаю ./manage.py migrate. Это приводит к следующей ошибке:

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration shapes.0001_initial is applied before its dependency bsdfs.0002_auto_20200527_1647 on database 'default'.

Все ответы на SO говорят, что нужно просто раскомментировать shapes из списка installed_apps, но это не работает, потому что это приводит к следующей ошибке, когда я ' m импортируя его в models.py. Модели очень большие, и раскомментировать каждый экземпляр, где используется shapes, это невозможно.

RuntimeError: Model class shapes.models.Material doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

Что я могу сделать, чтобы правильно перенести базу данных?

1 Ответ

1 голос
/ 28 мая 2020

Полагаю, у вас не было никаких миграций для старой базы данных.
Полагаю, pg_dump содержал всю информацию о связывании таблиц.

В этом случае после запуска makemigrations вы можете попытаться создать таблицу с именем django_migrations и вручную вставить строку, которая сообщает django, что «начальная миграция» уже выполнена (поскольку ваша база данных находится в синхронизируйте c с вашим кодом). И когда вы запустите migrate, он должен сказать, что мигрировать нечего.
И если позже вы измените свою модель, новые миграции должны быть совместимы, потому что ваша база данных синхронизирована c теперь с вашим кодом.

Если ваше приложение - «contenttypes», а имя файла миграции - «0001_initial.py», вы просто установите некоторую прошедшую дату для применяемого столбца.

pgadmin 4 view of django_migrations table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...