миграция django - повторное создание базы данных

Я использую python 2.7 и django 1.8.

У меня точно такая проблема.

Ответ, опубликованный в виде комментария: What I did is completely remake the db, erase the migration history and folders.

Я очень не уверен в удалении и создании базы данных.

Я запускаю базу данных PostgreSQL. Если я удалю/удалю базу данных, а затем запущу миграции, будет ли база данных перестроена из миграций? Я не хочу удалять базу данных, а потом оказаться в еще худшей ситуации.


person user1261774    schedule 25.06.2016    source источник
comment
Вы всегда можете сделать резервную копию. Вся информация о схеме должна быть в миграции, а данные нет. Используйте dumpdata/loaddata в этом отношении. Однако я должен сказать, что я не совсем уверен, хорошо ли сбрасывать базу данных, но со мной этого никогда не случалось.   -  person Wtower    schedule 25.06.2016
comment
@Wtower спасибо. Могу ли я удалить проблемную таблицу, а затем запустить миграцию, чтобы создать таблицу?   -  person user1261774    schedule 25.06.2016
comment
Добро пожаловать. Вероятно, нет, миграция работает не так.   -  person Wtower    schedule 25.06.2016
comment
Добавление поля в существующую модель создает проблему? Я хотел бы знать команду, которую вы выполнили для создания миграции   -  person Mohammad Mustaqeem    schedule 25.06.2016
comment
@Mohammad Mustaqeem Я добавил новое поле, затем использовал python manage.py makemigrations , затем python manage.py migrate. Затем я запустил python manage.py migrate --fake, который завершил миграцию. Затем ошибка возникает на веб-странице как column core_coverlettersaveddetails.cover_letter_saved_details_format does not exist.   -  person user1261774    schedule 25.06.2016
comment
Почему вы запустили python manage.py migrate --fake ?   -  person Mohammad Mustaqeem    schedule 25.06.2016
comment
потому что python manage.py migrate возвращает ошибку.   -  person user1261774    schedule 25.06.2016
comment
в чем была ошибка?   -  person Mohammad Mustaqeem    schedule 25.06.2016
comment
ошибка: django.db.utils.ProgrammingError: relation "core_coverlettersaveddetails" already exists   -  person user1261774    schedule 25.06.2016
comment
Давайте продолжим обсуждение в чате.   -  person Mohammad Mustaqeem    schedule 25.06.2016
comment
что с этим стало?   -  person e4c5    schedule 10.07.2016


Ответы (2)


Вот что я сделал, чтобы исправить эту проблему:

Во-первых, создайте сценарий данных, чтобы при уничтожении и повторном создании базы данных можно было легко воссоздать данные.

Затем запустите следующий сценарий, чтобы сбросить базу данных (это удалит все данные базы данных и удалит таблицы базы данных).

Затем запустите следующий скрипт, чтобы воссоздать базу данных:

python manage.py reset_db

Затем запустите следующий скрипт, чтобы заново создать БД:

python manage.py migrate

Затем запустите скрипт для создания данных базы данных.

Наконец, запустите следующий скрипт, чтобы запустить сервер:

python manage.py runserver

Вот и все.

Я надеюсь, что это поможет кому-то там.

person user1261774    schedule 10.07.2016

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

  1. Убедитесь, что к вашей БД не обращается (записывается) процесс или ваше приложение во время процесса миграции. У меня было много проблем с этим.

  2. Если ваш сервер работает, обязательно выключите его. Есть некоторые проблемы, которые препятствуют миграции или обновлению результатов во время работы сервера, в частности, в рабочем режиме.

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

  4. Помните о значениях по умолчанию. Если вы выполняете миграцию, чтобы включить новый столбец в уже существующую таблицу, вы должны указать значение по умолчанию для заполнения этих строк в новом столбце.

person Jorge Cardenas    schedule 08.07.2020