conflict_target
를 새 것으로 오래된 행을 여러 null 허용 열에서이 테이블에 고유 인덱스를 생성하고 업데이트 할 방법을 찾는 것입니다 on conflict
에서 기존 고유 색인을 식별해야합니다.
on conflict (vendor, external_id, extinct)
3 개의 열에 색인이 없기 때문에 사용할 수 없습니다. Postgres는 여러 목표를 충족시키기 위해 여러 색인을 결합하는 것이 현명하지 않습니다.
당신은 그러나이 같은 단일 부분 인덱스 만들 수 있습니다
insert into security (vendor, external_id, extinct)
values('Legion', 'LGNONE', false)
on conflict (vendor, external_id, extinct) -- exact match to the index definition
where coalesce(vendor, external_id) is not null -- obligatory index_predicate
do update set
vendor = excluded.vendor,
external_id = excluded.external_id,
extinct = excluded.extinct
참고 특별한 기록 excluded
의 사용 :
create unique index unique_vendor_external_id
on security(vendor, external_id, extinct)
where coalesce(vendor, external_id) is not null;
지금 당신이 충돌 대상으로 세 개의 열을 사용할 수 있습니다 . 문서의 경우 :
설정 및 ON 충돌이 조항은 UPDATE를 수행 테이블의 이름 (또는 별명)를 사용하여 기존 행에 액세스 할 수 WHERE 및 특별 제외 테이블을 사용하여 삽입을 제안 행합니다.
이것은 훌륭한 제안이며 답변입니다. 고마워요! – cingulata