Open3
supabaseのdatabaseでupsertを機能させる
supabaeのdatabaseでupsertを使おうとした時に、
要素が重複していても新規にデータが追加されてしまったり
エラーが出たりしてなかなか思うよう動かなかったのでメモ。
特定のカラムの値が重複していたら追加ではなく更新したいときに
upsertのオプションでonConflictでカラムを指定かつカラムのIs Uniqueをtrueで設定すると機能した
Is Uniqueの設定はsupabaseの管理画面から
Database→tables
◯columnsをクリック
重複を許さない要素の編集アイコンをクリック
Is Uniqueにチェック
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()