Django 1.7マイグレーションを使用しているときに、本番環境ではなく開発では機能するマイグレーションに遭遇しました。
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')]),
)
DjangoバグDBのバグなどを読むと、既存のunique_together
データベース内の移行履歴と一致しません。
このエラーを回避して移行を終了するにはどうすればよいですか?
(PostgresとMySQLの回答)
実際のテーブルを見る場合(\d table_name
)インデックスを確認すると、一意の制約のエントリが見つかります。これがDjangoが見つけてドロップしようとしているものですが、完全に一致するものを見つけることができません。
例えば、
"table_name_...6cf2a9c6e98cbd0d_uniq" UNIQUE CONSTRAINT, btree (d, a, b, c)
私の場合、キーの順序(d, a, b, c)
は、削除しようとしている制約と一致しませんでした(a, b, c, d)
。
移行履歴に戻り、元のAlterUniqueTogether
を変更して、データベースのactualの順序に一致させました。
その後、移行は正常に完了しました。