728x90
반응형
조건에 맞는 데이터가 있으면 UPDATE, 없으면 INSERT 하는 것을
흔히 'UPSERT' 라고 표현을 합니다.
오라클에서는 merge into ~,
mysql에서는 ~ on duplicate on key update ~
를 사용해서 UPSERT를 하듯
PostgreSQL에서도 UPSERT를 사용할 수 있습니다.
사용 방법은 간단합니다.
이 구문만 따라 해주면 됩니다. ( V9.5 이상에서 사용)
INSERT INTO 'TABLE' (COL1, COL2, ...)
VALUES (VAL1, VAL2, ...)
ON CONFLICT(COL1, COL2)
DO UPDATE SET COL1 = VAL1, ..
주의)
ON CONFLICT 안에 들어 가는 칼럼들은 해당 테이블의 Constraints(예: 유니크 키)에 해당하는 컬럼들이 와 주어야 합니다. 이들을 가지고 UPDATE를 할지 INSERT를 할지 판별을 하니, 당연이 이런 컬럼들을 명명해주어야겠죠.
DO UPDATE ~ 여기서 부터는 INSERT 조건에 해당이 안 될 경우,
즉, 이미 해당 데이터가 있을 경우 UPDATE를 하는 구문입니다.
cf) DO UPDATE~ 위치에 다른 것도 올 수 있는 데, DO NOTHING 이 올 수 있습니다.
... DO NOTHING을 굳이 쓸 이유를 잘 모르겠음... ㅎㅎ (DO NOTHING : CONFLICT 후 INSERT 조건에 해당이 안 될 때 아무것도 안 함)
예시)
INSERT INTO customers (name, email)
VALUES('Microsoft','hotline@microsoft.com')
ON CONFLICT (name)
DO
UPDATE SET email = EXCLUDED.email || ';' || customers.email; //EXCLUDED는 기존 값을 의미.
참조) https://www.postgresqltutorial.com/postgresql-upsert/
728x90
'스마트웹앱콘텐츠전문가 > 데이터베이스' 카테고리의 다른 글
테이블 안에서 원하는 데이터 복사 (0) | 2022.01.28 |
---|---|
[PostgreSQL]GROUP BY JSON (0) | 2021.12.07 |
[PostgreSQL] 현재시각에서 하루 전 데이터 조회 (0) | 2021.11.24 |
[postgresql]대소문자구분없이조회 (0) | 2021.06.14 |
[마이바티스] FetchSize (0) | 2021.05.10 |