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 〇〇」というエラーが起きる原因についてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

ITパスポート、基本情報技術者、応用情報技術者などIPAが提供する国家資格の過去問を学べるモバイルアプリをリリースしました。
詳しくは下記のプレスリリースをご覧ください。
https://prtimes.jp/main/html/rd/p/000000008.000073303.html

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Django

Posted by ちこ