Перейти к содержанию

Ошибки миграций

Миграции бросают собственные подклассы HareError из hare.migrations.exceptions:

HareError
└── HareMigrationError
    ├── UnknownMigrationError(HareMigrationError, LookupError)
    ├── MigrationLoadError
    ├── CircularDependencyError
    ├── IncompatibleStateError
    ├── IrreversibleMigrationError
    ├── PartiallyAppliedMigrationError
    ├── TenantMigrationError
    ├── FieldNarrowingDataLossError
    ├── ForeignKeyTargetChangeError
    ├── InconsistentMigrationStateError(HareMigrationError, RuntimeError)
    └── MigrationAutodetectorError(HareMigrationError, RuntimeError)

Когда какое бросается

Исключение Когда
UnknownMigrationError Метка приложения, имя миграции или цель migrate не называет ничего существующего — или имени миграции соответствует несколько миграций. Это ещё и LookupError.
MigrationLoadError Файл миграции не загружается: не импортируется, в нём нет класса Migration, миграция определена дважды, зависимость называет несуществующую миграцию или приложение, или объединённая миграция заменяет миграции, из которых применены лишь некоторые, а файлов остальных уже нет.
CircularDependencyError Зависимости миграций образуют цикл.
IncompatibleStateError Операцию нельзя выполнить на состоянии, которое оставляют предыдущие миграции.
IrreversibleMigrationError Миграцию откатывают, а одну из её операций обратить нельзя, — поднимается до отката первой миграции запуска, поэтому более поздние остаются применёнными.
PartiallyAppliedMigrationError Неатомарная миграция упала посередине — часть её операций уже выполнилась. Миграция, отклонённая до первой своей команды (без RunPython), даёт свою ошибку: ничего из неё не применилось.
TenantMigrationError С tenant_schema_template миграции упали в схемах некоторых арендаторов. Схемы остальных арендаторов мигрированы; ошибка называет каждую упавшую схему с её ошибкой, а следующий migrate выполняет в каждой схеме то, чего нет в её собственном журнале.
FieldNarrowingDataLossError AlterField, сужающий колонку, обрезал бы хранящиеся значения.
ForeignKeyTargetChangeError AlterField переводит связь на другую целевую колонку (to_field), а строки хранят значения ключа по прежней.
InconsistentMigrationStateError После прогона файлов миграций связь указывает на модель, которой больше нет.
MigrationAutodetectorError makemigrations проверяет созданные миграции и находит их неверными: применённые, они не приводят к моделям, их файлы не читаются обратно теми же операциями или они зависят друг от друга по кругу. Ошибка самого hare, возникает до записи любого файла. Это ещё и RuntimeError.

Другие ошибки миграций

Операция миграции или значение, которое нельзя объявить или записать в файл миграции (lambda в default, RemoveIndex() без имени и полей), дают ConfigurationError; противоречащие друг другу цели migrate дают QueryError.