반응형
데이터가 있으면 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/
반응형
'DBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] AWS RDS For PostgreSQL 성능 최적화 (0) | 2023.02.13 |
---|---|
[PostgreSQL] DB 파티셔닝(Partitioning) 정의 및 예제 (0) | 2023.02.09 |
[PostgreSQL] 공간 인덱스 활용 (0) | 2023.02.07 |
[PostgreSQL] 뷰(View) 테이블 생성 및 제어 (0) | 2023.01.27 |
[PostgreSQL] 특정 문자열 개수 구하기 (0) | 2023.01.19 |
최근댓글