개발/DB

[POSTGRESQL] UPSERT 정리 - 데이터 없으면 INSERT / 있으면 UPDATE

반응형

서론

이번 프로젝트 하면서 upsert 를 사용하게 되어 정리한다.

소스

<insert id="upsertCarSmr">
insert
into car_smr (
car_id
, car_nm
, car_prc
)
select
a.car_id
, a.car_nm
, b.car_prc
from car a
left outer join car_prc b
on a.car_id = b.car_id
where a.car_id = #{carId}
on conflict (car_id)
do update set
reg_id = #{regId}
, car_id = excluded.car_id
, car_nm = excluded.car_nm
, car_prc = excluded.car_prc
</insert>

설명

 
ON CONFLICT
- 특정 컬럼명을 기준으로 데이터 존재 여부 체크.
pk가 여러개일때는 여러 컬럼 적용 가능
ex) on conflict (car_id, car_nm)
 
DO UPDATE SET
- on conflict에서 데이터 존재시 기존 데이터를 update
 
EXCLUDED
- update 데이터에서 조회한 데이터를 update로 사용
 
 

결론

POSTGRESQL로 개발하면서 upsert를 처음 사용하게 되어 정리하게 되었다. 추후에 사용할 일이 있을때 도움되길 바라며..

반응형