반응형
이번 게시글에서는 postgresql 의 merge 구문에 대해 정리해보았습니다.
1. merge구문이란?
테이블에 데이터가 이미 있으면 업데이트 하고, 없으면 값을 넣어줘야 하는 경우에 사용합니다.
merge 구문을 사용하지 않으면
데이터가 있는지 확인, 있으면 update, 없으면 insert 총 세개의 쿼리를 짜야하지만
merge 구문을 사용하면 하나의 쿼리로 해결이 가능합니다.
postgresql에서는 이렇게 사용합니다.(upsert, merge 등등으로 불립니다. 사실 merge구문은 oracle에 존재하는 구문이지만 postgresql에서도 merge라고 하는 경우가 많습니다.)
2. sql
with upsert as
(
update student set
age = #{age}
where
id = #{id}
returning *
)
# with 구문을 사용하여 원하는 데이터를 업데이트 해주며
# 마지막에 returning *을 해줍니다.
insert into student
(
id,
name,
age
)
select
#{id},
#{name},
#{age}
where not exists(select * from upsert);
# insert select를 통해 하나의 레코드를 insert 해주며
# where 조건에 where not exists를 하여 업데이트 된 레코드가 있는지 확인합니다.
with 구문과 returning * 으로 업데이트가 된 데이터가 있다면 해당 레코드를 보관하고있다가
where not exists(select * from upsert)를 통해 업데이트된 레코드가 없다면 insert 문을 실행하도록 하면 됩니다.
반응형
'postgresql' 카테고리의 다른 글
[postgresql] postgresql 재귀쿼리(계층 쿼리) 사용법 (2) | 2021.03.28 |
---|
댓글