Hasuraでデータ削除する際のエラー “Foreign key violation. update or delete on table”をForeign Keysの設定で対処する

結論 : コンソールの設定で直せました

結論から言うと、Hasuraのコンソール内のテーブルの設定でForeign KeysのOn Update ViolationとOn Delete Violationの設定をいじれば解決しました。

詳細

2つのテーブル間で1対1や1対多のリレーションをしているとき、一方のテーブルからもう一方のテーブルに対してForeign Keyの設定をします。

わかりやすい例でいうとこんな感じ。

itemsテーブルのuser_idカラムが、usersテーブルのidカラムに紐づいている。
このときusersテーブルはitemsテーブルのReference Tableとなる。

この状態で、usersテーブルのデータを消そうとすると、postsテーブル内に紐付いたデータがある場合このようなエラーが発生することがあります。

{
  "errors": [
    {
      "extensions": {
        "path": "$",
        "code": "constraint-violation"
      },
      "message": "Foreign key violation. update or delete on table \"users\" violates foreign key constraint \"items_user_id_fkey\" on table \"items\""
    }
  ]
}

この場合は、 itemsテーブルの該当するデータを先に消してからusersのデータを消せばOKとなります。

でも、usersのデータを消したときに自動的に関連するitemsのデータも消えてくれたほうが楽なことが多いですね。
その場合には、コンソールからForeign Keysの設定をいじります。

今回でいえばpostsテーブルのmodify > Foreign Keys を開くと以下のような画面になるので、こちらの一番下にある「On Update Violation」「On Delete Violation」で「cascade」を選択してsaveします。

この設定をしてから再度同じようにusersのデータをdeleteまたはupdateすると、postsテーブルの紐付いたデータにも自動的に影響が及びます。

ちなみに今回はこちらのページを参考にしました。

データが一斉に書き換わってしまう設定なので、後からこの設定をする場合には動作をしっかりご確認の上で実装を進めましょう。

今回はこれまで。
ではまた!