INSERT ON CONFLICT
ON CONFLICT 는 PostgreSQL 9.5이상의 버전에서 사용이 가능합니다. 더 낮은 버전을 사용하고 있다면, 사용이 어렵습니다.
INSERT ON CONFLICT
문은 새롭게 INSERT될 데이터가 이미 테이블에 존재하는 경우, 거기에 대한 제어를 할 수 있게 합니다.
INSERT ON CONFLICT
INSERT ON CONFLICT
문은 아래와 같이 사용됩니다.
xxxxxxxxxx
INSERT INTO table_name(column_list) VALUES(value_list)
ON CONFLICT target action;
DML의 INSERT
문에 ON CONFLICT target action
이 붙는 형식으로 이루어집니다.
target & action
target
- column_name: 속성명
- ON CONSTRAINT constraint_name: 제약조건 이름(UNIQUE constraint의 이름)
- WHERE predicate:
WHERE
절
action
- DO NOTHING
- DO UPDATE SET column_1 = value_1, .. WHERE condition: 테이블의 몇몇 필드를 수정
예시 - target: column_name
xxxxxxxxxx
INSERT INTO customers (name, email)
VALUES
(
'Microsoft',
'hotline@microsoft.com'
)
ON CONFLICT (name)
DO NOTHING;
예시 - target: ON CONSTRAINT
xxxxxxxxxx
INSERT INTO customers (NAME, email)
VALUES
(
'Microsoft',
'hotline@microsoft.com'
)
ON CONFLICT ON CONSTRAINT customers_name_key
DO NOTHING;
예시 - action: DO UPDATE SET
INSERT INTO customers (name, email)
VALUES
(
'Microsoft',
'hotline@microsoft.com'
)
ON CONFLICT (name)
DO
UPDATE
SET email = EXCLUDED.email || ';' || customers.email;
'DB > postgresql' 카테고리의 다른 글
PostgreSQL EXISTS & IN (0) | 2020.04.10 |
---|---|
pg_hba.conf 설정하기 (0) | 2019.01.15 |