django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table
今回はDjangoで「django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table 〇〇」というエラーが起きる原因についてご紹介いたします。
django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table
Djangoでmigrateをしたときに、表題のエラーになるときがあります。
PostgreSQLの場合は、「psycopg2.errors.InvalidForeignKey: there is no unique constraint matching given keys for referenced table 〇〇」というエラーも見られることがあると思います。
結論を言うと、Djangoのmodelに外部キーの定義を追加したとき、外部キーの元となるテーブルにunique制約がないことがエラーの原因です。
unique制約がなければ、外部キーが作れないですからね。
DBが初期の状態からmigrateを行っていくと、表題のようなエラーは起こりえないはずですが、DBをdumpからrestoreしたとき、もしくは最初からDBのスキーマが存在していて、後からDjangoのmigrateで定義を追加していったときなどに外部キーの元となるテーブルのunique制約がなければ表題のようなエラーが起こりえます。
現在のDBのunique定義を確認してみてください。
終わりに
今回はDjangoで「django.db.utils.ProgrammingError: there is no unique constraint matching given keys for referenced table 〇〇」というエラーが起きる原因についてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません