Все ответы приносят интересную информацию в таблицу, но некоторые немного устарели, так что вот мое зерно соли.
Миграции поддерживаются на всех серверах, с которыми поставляется Django, как
а также любые сторонние бэкэнды, если они запрограммированы в поддержке
для изменения схемы (выполняется с помощью класса SchemaEditor ).
Однако некоторые базы данных более эффективны, чем другие, когда дело доходит до
схемы миграции; некоторые предостережения описаны ниже.
PostgreSQL
PostgreSQL является самой способной из всех баз данных здесь с точки зрения
поддержка схемы; Единственное предостережение заключается в том, что добавление столбцов по умолчанию
значения приведут к полной перезаписи таблицы в течение времени, пропорционального
к его размеру.
По этой причине рекомендуется всегда создавать новые столбцы с
null = True, так как они будут добавлены немедленно.
MySQL
В MySQL отсутствует поддержка транзакций вокруг изменения схемы
операции, что означает, что если миграция не будет применена, у вас будет
отменить изменения вручную, чтобы повторить попытку (это невозможно
откатиться на более раннюю точку).
Кроме того, MySQL полностью переписывает таблицы практически для каждой схемы.
операция и обычно занимает время, пропорциональное количеству
строки в таблице для добавления или удаления столбцов. На более медленном оборудовании это
может быть хуже минуты на миллион строк - добавив несколько столбцов к
таблица с несколькими миллионами строк может заблокировать ваш сайт
десять минут.
Наконец, MySQL имеет достаточно небольшие ограничения на длину имени для
столбцы, таблицы и индексы, а также ограничение на объединенный размер
всех столбцов индекса охватывает. Это означает, что индексы, которые
возможно на других серверах не будет создан под MySQL.
SQLite
SQLite имеет очень мало встроенной поддержки изменения схемы, и поэтому
Джанго пытается подражать ему:
- Создание новой таблицы с новой схемой
- Копирование данных по
- Отбрасывание старого стола
- Переименование новой таблицы в соответствии с исходным именем
Этот процесс обычно работает хорошо, но иногда он может быть медленным
багги. Не рекомендуется запускать и переносить SQLite в
производственная среда, если вы не очень осведомлены о рисках и
ограничения; поддержка, с которой поставляется Django, позволяет
разработчики использовать SQLite на своих локальных машинах, чтобы разрабатывать меньше
сложные проекты Django без необходимости полной базы данных.