🧐 🤔 그거 어떻게 쓰더라 🙄 😙

Postgresql bulk upsert

2023. 9. 1. Evergood Kim이가 씀

insert문 끝에 다음과 같이 ON CONFLICT 절 추가

ON CONFLICT ON CONSTRAINT "제한조건의 이름"
DO UPDATE SET 
"업데이트할 필드1" = EXCLUDED."업데이트할 필드1",
"업데이트할 필드2" = EXCLUDED."업데이트할 필드2", ...

참고로; PK 제한조건의 이름은 따로 지정하지 않은 경우 기본값은 테이블이름_pkey이다.

아래 예시

-- 테이블 생성
CREATE TABLE "test1" (
   "id" SMALLINT,
   "value1" VARCHAR(50),
   "value2" VARCHAR(50),
   PRIMARY KEY ("id")
);

-- 값 넣고 확인
INSERT INTO "test1" ("id", "value1", "value2")
VALUES
(1, 'apple', 'good'),
(2, 'banana', 'happy'),
(3, 'kiwi', 'sad')
;
SELECT * FROM "test1";

-- upsert 후 확인
INSERT INTO "test1" ("id", "value1", "value2")
VALUES
(1, 'apple 2', 'bad'),
(2, 'banana 2', 'heaven')
ON CONFLICT ON CONSTRAINT "test1_pkey"
DO UPDATE SET 
"value1" = EXCLUDED."value1",
"value2" = EXCLUDED."value2"
;
SELECT * FROM "test1";

DROP TABLE IF EXISTS "test1";

 

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

PK 참고: https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-primary-key/

728x90