그것은 조금 투박하지만 당신은 조건부 트리거를 사용하여이 작업을 수행 할 수
CREATE TRIGGER t
AFTER UPDATE ON MyTable
FOR EACH ROW
WHEN (IsFirstCallForThisTransaction())
EXECUTE PROCEDURE MyTrigger();
까다로운 비트 IsFirstCallForThisTransaction()
을 정의한다. 내부적으로는 플래그를 어딘가에 설정해야하지만이 플래그가 현재 트랜잭션에 적용되도록 보장해야합니다.
하나의 옵션은 SET LOCAL
을 사용하여 custom configuration variable을 할당하는 것입니다.
ALTER DATABASE MyDB SET my_vars.trigger_called_in_current_transaction = false;
그런 다음 함수가 다음과 같이 보일 것입니다 : 문제의 데이터베이스에
my_vars.trigger_called_in_current_transaction = false
또는 대안은 디폴트를 첨부 :이 라인 서버의 postgresql.conf
파일을 넣어이 변수를 초기화 할 수
CREATE FUNCTION IsFirstCallForThisTransaction() RETURNS BOOLEAN AS
$BODY$
BEGIN
IF current_setting('my_vars.trigger_called_in_current_transaction')::boolean THEN
RETURN false;
ELSE
SET LOCAL my_vars.trigger_called_in_current_transaction TO true;
RETURN true;
END IF;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
BEGIN과 COMMIT 사이에 업데이트 문이 많은 경우이 문구를 한 번만 호출하려고합니다. 이러한 시나리오를 감지 할 수있는 방법이 있습니까? – akashag26