2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Supabase】insert or update on table "hoge" violates foreign key constraint "fuga"の解消方法

Last updated at Posted at 2024-10-21

はじめに

この記事では、Supabaseで中間テーブルとリレーションを設定する際に発生した「UNIQUE制約」に関するエラーについて取り上げます。特に、データ挿入時に発生した重複データによる問題と、その解決方法を解説します。

この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです

原因

以下のエラーメッセージが発生しました。

insert or update on table "users" violates foreign key constraint "users_user_id_fkey

このエラーは、外部キーの制約に違反していることを示しています。具体的には、外部キーに設定されているデータが、参照先のテーブルに存在しないか、他の制約により挿入がブロックされています。

解決方法

スクリーンショット 2024-10-22 7.40.48.png

エラーの原因を調べたところ、UNIQUE制約が影響していることが判明しました。以下の画像の通り、Is Uniqueにチェックが入っていたため、同じuser_idskill_idの組み合わせが複数挿入できない状態でした。

UNIQUE制約が設定されている場合、同じデータの重複挿入が制限されます。今回はUNIQUE制約を外すことで問題を解決できました。

制約を解除した後、user_skillテーブルに以下のようなデータを挿入できるようになりました。

user_skill テーブル:
-------------------------
user_id  | skill_id
-------------------------
101      | 1  (React)
102      | 1  (React)
103      | 2  (Vue)

このように、異なるユーザーが同じスキル(skill_id)を持っている場合でも、制約が解除されることでデータが正常に挿入できるようになります。

終わりに

外部キーの制約やUNIQUE制約は、データの一貫性を保つために重要ですが、今回のように状況に応じて制約を柔軟に解除することで、問題を解決することができました。特に中間テーブルを使用する際は、制約の設定に注意する必要があります。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?