반응형
Bulk Upsert 방법은 총 두가지가 있다
1.
WITH n(column) AS (
VALUES
(value)
)
insert into table (column)
select column from n
on conflict (PkColumn) do
update set
column = excluded.column;
설명 :
1. WITH 절을 이용하여 임시 테이블을 생성하여 upsert할 값 셋팅
2. 1번에서 만든 값으로 target Table에 insert
3. insert PK가 중복되어 실패시 update로 변경
2.
WITH
n(column) AS (
VALUES
(value)
),
-- update existing rows
upsert AS (
UPDATE table o
SET column=n.column
FROM n WHERE o.PkColumn = n.PkColumn
RETURNING o.PkColumn
)
-- insert missing rows
INSERT INTO table (column)
SELECT n.column
FROM n
WHERE n.PkColumn NOT IN (
SELECT PkColumn FROM upsert
)
설명 :
1. WITH절을 이용하여 임시 테이블을 생성하여 upsert할 값 셋팅
2. 1번의 값으로 target table에 Update Update 된 값은 WITH절을 이용하여 upsert 테이블 생성
3. insert 로직 동작시 upsert 테이블에서 update 된 값을 제거한 후 insert
반응형
'개발 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] PostgreSQL 정리 (0) | 2024.05.17 |
---|---|
[ PostgreSQL ] 데이터베이스에서의 기본키 (PrimaryKey)와 유니크키(UniqueKey) (2) | 2023.10.17 |