Postgre Upsert에 대해 알아보기 !

박성현·2025년 9월 8일

PostgreSQL

목록 보기
2/2

🔄 PostgreSQL UPSERT (ON CONFLICT)

PostgreSQL에서는 INSERT를 실행할 때 이미 같은 키 값이 존재하면 에러가 발생합니다.
하지만 "있으면 업데이트(Update), 없으면 삽입(Insert)"을 하고 싶을 때가 많죠.
이럴 때 사용할 수 있는 문법이 바로 UPSERT입니다.


1️⃣ 기본 문법

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (1,2, ...)
ON CONFLICT (고유키_또는_제약조건)
DO UPDATE SET 컬럼 = EXCLUDED.컬럼;
  • ON CONFLICT (컬럼) : 충돌을 감지할 컬럼 (주로 PRIMARY KEY, UNIQUE 제약 조건)
  • EXCLUDED.컬럼 : 새로 들어온 값 참조

2️⃣ 간단 예제

테이블 만들기

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email TEXT UNIQUE,
    name TEXT
);

UPSERT 실행

INSERT INTO users (email, name)
VALUES ('test@example.com', '홍길동')
ON CONFLICT (email)
DO UPDATE SET name = EXCLUDED.name;

👉 결과

  • email이 없으면 → 새로 삽입
  • email이 있으면 → name만 업데이트

3️⃣ 충돌 무시하기

충돌 시 아무 일도 하지 않으려면 DO NOTHING을 사용합니다.

INSERT INTO users (email, name)
VALUES ('test@example.com', '김철수')
ON CONFLICT (email) DO NOTHING;

✅ 정리

  • PostgreSQL의 UPSERT는 INSERT ... ON CONFLICT 구문으로 처리한다.
  • 충돌 시 → DO UPDATE 또는 DO NOTHING 선택 가능.
  • MySQL의 ON DUPLICATE KEY UPDATE와 비슷하지만, PostgreSQL은 더 표준 SQL에 가깝다.

profile
개발기록장

0개의 댓글