Open3

supabaseのdatabaseでupsertを機能させる

kitakitakitakita

supabaeのdatabaseでupsertを使おうとした時に、
要素が重複していても新規にデータが追加されてしまったり
エラーが出たりしてなかなか思うよう動かなかったのでメモ。

特定のカラムの値が重複していたら追加ではなく更新したいときに
upsertのオプションでonConflictでカラムを指定かつカラムのIs Uniqueをtrueで設定すると機能した

kitakitakitakita

Is Uniqueの設定はsupabaseの管理画面から
Database→tables

◯columnsをクリック

重複を許さない要素の編集アイコンをクリック

Is Uniqueにチェック

kitakitakitakita

upsertの書き方は公式ドキュメントより
onConflictオプションで要素が重複したらinsertではなくupdateするものを指定する。

下記の場合handleの重複を許さない。
新たなデータとしてhandle: 'saoirse'を含むものが追加されようとした時に
insertではなくupdateになる

const { data, error } = await supabase
  .from('users')
  .upsert({ id: 42, handle: 'saoirse', display_name: 'Saoirse' }, { onConflict: 'handle' })
  .select()