2017-09-04 2 views
0

나는 어떻게 든 아래의 코드의 ON CONFLICT (라인 # 5)에서 추가 명령문을 실행하려고합니다. 가능한가?ON CONFLICT DO에서 여러 작업 ...?

INSERT INTO t1 (a, v) 
SELECT a, v FROM t2 
ON CONFLICT (a) DO 
    UPDATE SET t1.v = t1.v + EXCLUDED.v 
    [INSERT INTO t3 (a, v) VALUES(a, EXCLUDED.v)] 

답변

1

아니요, ON CONFLICT 동작을 사용할 수 없습니다.

DO NOTHING 
DO UPDATE SET 

documentation에서 구문에 대한 자세한 내용을 볼 수 있습니다.

  1. 트리거 AFTER UPDATE t1를 만들고 이 upsert에서 온 것으로 문을 분리하려고 :

    당신은 문제를 해결하기위한 두 가지 대안이 있습니다. 이 위와 같지 않은 문장에서 트리거 될 수 있지만 이 실행되고 업데이트되는 것을 엄격하게 제어하는 ​​경우 t1.v 만 발생하면 이 정상입니다. 트리거에서 INSERT를 수행 할 수 있습니다.

  2. 이전 방법으로 BEGIN .. EXCEPTION .. END을 사용하십시오. 예를 들어 행을 삭제하거나 변경하거나 첫 번째 "확인"을 무효화 할 수있는 동시 트랜잭션이 발생할 위험이 있습니다. 은 "스레드 안전"이 아닙니다.