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