2017-01-12 6 views
4

При использовании Django 1.7 миграции, я наткнулся на миграцию, которая работала в разработке, но не в производстве:Received «ValueError: Найдено неправильное число (0) ограничений для ...» во время миграции Джанго

ValueError: Found wrong number (0) of constraints for table_name(a, b, c, d)

Это вызвано AlterUniqueTogether правилом:

migrations.AlterUniqueTogether(
     name='table_name', 
     unique_together=set([('a', 'b')]), 
    ) 

Чтение на ошибки и такие в ошибке DB Django, кажется, примерно в БД не совпадающим с историей миграции существующего unique_together.

Как я могу обойти эту ошибку и завершить мои миграции?

ответ

7

(Postgres ответ)

Если вы посмотрите на фактическую таблице (использование \d table_name) и посмотреть на индексах, вы найдете запись для уникального ограничения. Это то, что Django пытается найти и отбросить. Но он не может найти точное совпадение.

Например,

"table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c) 

В моем случае, порядок ключей (d, a, b, c) не соответствует ограничению это выглядело падение (a, b, c, d).

Я вернулся в свою историю миграции и сменил оригинал AlterUniqueTogether в соответствии с факсом заказать в базе данных.

После этого миграция успешно завершена.

+1

См. Также здесь: - https://code.djangoproject.com/ticket/23906 – MagicLAMP

+0

Спасибо за тонну за это. Я использую MySQL и имел ту же проблему, что и порядок полей в ограничении DB, не соответствующий порядку полей в исходном файле миграции, который добавил unique_together. – dshap

Смежные вопросы