2010-06-29 3 views
11

삽입/업데이트 후에 AFTER 트리거를 PostgreSQL에 설정하여 호출하는 소프트웨어가 호출 소프트웨어에 제어권을 반환하기 전에 트리거가 완료 될 때까지 기다려야합니까? 아니면 트리거가 장면 뒤에서 자체적으로 실행됩니까?Postgres의 AFTER 트리거가 삽입/업데이트를 차단합니까?

+4

트리거는을 보내 http://www.postgresql.org/docs/current/static/contrib-dblink-send-query.html을 dblink_send_query 사용할 수 있습니다 귀하의 요구 사항에 따라 귀하의 트리거에서 비동기 요청. – rfusca

답변

13

예, 동일한 트랜잭션 내에서 실행되기 때문입니다. 트리거가 실패하면 삽입/업데이트도 실패합니다. 실패 할 쿼리를 실행하는 테스트를 수행하면 (존재하지 않는 테이블을 선택하십시오.) 어떻게 작업이 작동하고 응용 프로그램이 어떻게 작동하는지 확인할 수 있습니다. 당신이 "뒤에서"완료 뭔가를해야 할 경우

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER 
AS 
$$ 
BEGIN 
    EXECUTE 'SELECT fail'; 
END; 
$$ 
LANGUAGE plpgsql; 
+0

이 방법을 피할 수 있습니까? 트리거가 실패하더라도 삽입/업데이트 작업이 실패하지 않아야 함을 의미합니다. – Zoran777

관련 문제