개발/PostgreSQL

PostgreSQL UPSERT INSERT ON CONFLICT 구문 DO NOTHING

TaeDy.I.T. 2023. 2. 27. 06:37
반응형

안녕하세요. 오늘은 PostgreSQL에 UPSERT ON CONFLICT 구문의 DO NOTHING에 대해 알아보겠습니다.
 

PostgreSQL UPSERT ON CONFLICT
PostgreSQL UPSERT ON CONFLICT

 
ON CONFLICT 구문은 PostgreSQL 9.5버전 이상에서만 사용 가능합니다.
 
ON CONFLICT 구문에 옵션은 2가지가 있습니다.
1. DO NOTHING : 특정 컬럼과 데이터가 겹치면 아무런 동작을 하지 않습니다.
2. DO UPDATE SET : 특정 컬럼과 데이터가 겹치면 UPDATE를 합니다.
 

ON CONFLICT 구문 DO NOTHING 예시 및 설명
INSERT INTO MEMBER
    (SEQ
    , ID
	, NAME
	, AGE
	, SEX_CD
	, CREATE_DATE
	, UPDATE_DATE)
VALUES
    (1
    , 'a'
	, '홍길동'
	, 32
	, '1'
	, now()
	, now());

지금 MEMBER 테이블에 SEQ가 1인 데이터가 존재하고있습니다. 이 경우 위에 쿼리문을 실행 할 경우 에러가납니다.
 

inser error
inser error

여기서 ON CONFLICT 구문에 DO NOTHING 옵션을 사용하면 아무런 동작을 하지 않습니다.

INSERT INTO MEMBER
    (SEQ
    , ID
	, NAME
	, AGE
	, SEX_CD
	, CREATE_DATE
	, UPDATE_DATE)
VALUES
    (1
    , 'a'
	, '홍길동'
	, 32
	, '1'
	, now()
	, now())
ON CONFLICT (SEQ)
DO NOTHING;
PostgreSQL UPSERT ON CONFLICT DO NOTHING 결과
PostgreSQL UPSERT ON CONFLICT DO NOTHING 결과

위 쿼리를 실행해서 결과를 보면 Updated Rows 가 0인 결과를 볼 수 있습니다.
에러 없이 아무런 동작을 하지 않았습니다.
 
PK를 따로 체크해서 데이터를 insert 해야 할 경우 
PostgreSQL에 ON CONFLICT 구문의 DO NOTHING 옵션을 사용 하면 좋을 것 같습니다.
 
PostgreSQL에 ON CONFLICT 구문의 DO UPDATE SET옵션은 더 알아봐야 할 것 같습니다. 
 
이상 PostgreSQL에 UPSERT ON CONFLICT 구문의 DO NOTHING에 대해 알아보았습니다.

반응형