반응형

데이터가 있으면 UPDATE / 데이터가 없으면 INSERT

 

DB에서 흔히 말하는 upsert 구문을 PostgreSQL에서도 사용해보자.

 

INSERT INTO [TABLE] (COLUMN1, COLUMN2, ...)
VALUES (VALUE1, VALUE2, ...)
ON CONFLICT ([column_name / ON CONSTRAINT constraint_name/ WHERE predicate])
 [DO NOTHING]
 [DO UPDATE SET column1 = value1, ...]

 

ON CONFLICT column_name : 특정 컬럼명을 기준으로 체크하고, 컬럼을 여러 개 넣을수도 있다.

ON CONSTRAINT constraint_name : 테이블 생성할 때 만든 constraint 명을 기준으로 체크한다. 

WHERE predicate : UNIQUE INDEX 생성 시 사용한다. 

 

DO NOTHING : 아무 동작을 하지 않는다.

DO UPDATE SET : UPDATE 의 역할과 동일한 기능이다. 

 

-- member_id 기준으로 체크하고 충돌날 경우 아무것도 하지 않음
-- do nothing
insert into member (member_id, name, juso, phone_number)
values (1, '홍길동', '서울시 강남구 역삼동', '010-1234-5678')
on conflict (member_id)
do nothing

-- member_id 기준으로 체크하고 충돌날 경우 update 
-- do update
insert into member (member_id, name, juso, phone_number)
values (1, '홍길동', '서울시 강남구 역삼동', '010-1234-5678')
on conflict (member_id)
do update
set member_id = #{memberId},
    name = #{name}
    juso = #{juso}
    phone_number = #{phoneNumber}

 

 

참고) https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-upsert/

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기