2010-06-16 3 views
2

INSERT의 특정 인스턴스 (이 경우 if do_backup = true)에서만 실행하려는 트리거 기능이 있습니다. 모든 인스턴스에서 발생하면 무한 루프가 발생합니다. 로직은 나에게 매우 단순하게 보이고 나머지 기능은 작동한다. 하지만 트리거 기능은 내 조건을 등록하지 않는 것 같고 backup = true 일 때도 항상 실행됩니다.postgres 트리거에서 "IF statements"을 어떻게 사용할 수 있습니까?

CREATE OR REPLACE FUNCTION table_styles_backup() RETURNS 
TRIGGER AS $table_styles_backup$ 

DECLARE 
... 
do_backup boolean; 

    BEGIN 
SELECT backup INTO do_backup FROM table_details WHERE id=NEW.table_meta_id; 

     IF (do_backup = true) THEN 

    ... 


      INSERT INTO table_styles_versions 
    (
    ... 
    ) 

    VALUES (
    ... 
    ); 
END IF; 

    RETURN NULL; 

    END; 

$table_styles_backup$ LANGUAGE plpgsql; 

CREATE TRIGGER table_styles_backup AFTER INSERT ON table_styles 

FOR EACH ROW EXECUTE PROCEDURE table_styles_backup(); 

답변

2

Per the documentation, 당신은 명시 적으로 IF 문에서 부울 데이터 유형을 테스트 할 필요가 없습니다 - 그들은 당신이 사용하는 거라고, 그래서 진실되고 테스트하기 위해 기본 : 트릭을 할 것으로 보인다

IF do_backup THEN 
    ... 
    INSERT INTO table_styles_versions (... 
ELSE 
    -- omit this & the ELSE keyword if nothing needs to happen if do_backup is false 
END IF; 
+0

, 감사! –

관련 문제