Supabase Upsert

Hyeongmin·2024년 4월 4일
0

 TIL (Today I Learned)

목록 보기
52/54

오늘은 supabase를 쓰면서 사용한 upsert 메서드에 대해 정리해봤다.

Upsert?

upsert는 "update"와 "insert"의 합성어로, 데이터베이스 작업에서 흔히 사용되는 기술이다. upsert 작업은 주어진 데이터가 이미 데이터베이스에 존재하는지를 체크한 후, 데이터가 존재하면 업데이트를, 존재하지 않으면 새로운 레코드를 삽입하는 과정을 단일 작업으로 수행한다. 이 방식은 데이터의 중복을 방지하고, 애플리케이션 로직을 더 단순화할 수 있는 장점이 있다.


Supabase에서의 Upsert 사용

Supabase에서 upsert 메서드는 PostgreSQL의 INSERT ... ON CONFLICT 구문을 추상화한 것으로, 사용자가 복잡한 SQL 문법을 직접 작성하지 않고도 upsert 작업을 쉽게 수행할 수 있도록 해준다.

기본 사용법

Supabase의 upsert 메서드는 대상 테이블에 데이터를 삽입하려고 시도하며,
만약 주어진 고유 키(예: 기본 키(primary key))에 해당하는 레코드가 이미 존재한다면,
해당 레코드를 새 데이터로 업데이트한다.

const { data, error } = await supabase
  .from('your_table')
  .upsert({ id: 1, column_name: 'value' }, { onConflict: 'id' })

이 예시에서는 'your_table'에 id가 1인 레코드를 탐색하고, 해당 레코드가 존재하면 column_name을 'value'로 업데이트를 한다. 만약 레코드가 존재하지 않는다면, 새로운 레코드를 추가해준다.

중요 옵션

onConflict: 이 옵션은 어떤 열(또는 열의 조합)이 충돌을 감지하는 데 사용될지 정의한다. 일반적으로 이것은 테이블의 기본 키나 고유 제약 조건이 적용된 열이다.


주의사항

성능: upsert 작업은 내부적으로 데이터의 존재 여부를 체크하기 때문에, 단순한 insert나 update 작업보다는 다소 오버헤드가 발생할 수 있다.
그러나 이는 데이터의 일관성과 무결성을 유지하는 데 필수적인 작업이다.

충돌 감지: upsert는 충돌을 감지할 기준이 필요하다. Supabase와 같은 시스템에서는 이를 위해 주로 기본 키나 고유 제약 조건이 사용된다.

0개의 댓글