web-dev-qa-db-ja.com

Django移行中に「ValueError:...の制約の間違った数(0)が見つかりました」」を受け取りました

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データベース内の移行履歴と一致しません。

このエラーを回避して移行を終了するにはどうすればよいですか?

20
rrauenza

(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の順序に一致させました。

その後、移行は正常に完了しました。

29
rrauenza