2016-07-05 3 views
0

이벤트 트리거를 사용하여 트리거 정의의 유효성을 검사 할 수 있습니까?PostgreSQL - 이벤트 트리거를 사용하여 트리거 유효성 확인

CREATE TRIGGER mytrigger 
    AFTER INSERT OR UPDATE ON mytable 
    FOR EACH STATEMENT 
    EXECUTE PROCEDURE myprocedure(); 

내가 방아쇠 내부에 매개 변수를 확인하실 수 있습니다 알고

내가 원하는 트리거가 따라 예처럼, INSERT 또는 UPDATE에 성명 후에 해고 만에 삭제되지 않도록 보장하는 것입니다 함수를 TG_OP, TG_WHEN 및 TG_LEVEL과 함께 사용하지만 이러한 방식으로 삽입, 업로드 또는 삭제 중에 트리거가 올바른지 여부 만 확인하고 트리거 정의 바로 다음에 트리거하지 않습니다.

+0

없음을 그러나 영리한 시스템은 사용하려고하는 것에 따라 트리거 함수의 이름을 지정하는 것입니다 (예 : 'tf_mytable_after_iu()'. –

+0

Ziggy : 응? 왜 이벤트 트리거를 사용할 수 없습니까? –

답변

1

다음은 pgxnclient과 함께 설치할 수있는 함수를 cat_tools에 사용하는 예입니다.

첫째, 몇 가지 일반적인 설정 : 마지막으로

CREATE OR REPLACE FUNCTION no_before_triggers() RETURNS event_trigger LANGUAGE plpgsql AS $body$ 
DECLARE 
    r record; 
BEGIN 
    FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() 
    LOOP 
    IF (cat_tools.trigger__parse(r.objid)).timing = 'BEFORE' THEN 
     RAISE 'before triggers not allowed'; 
    END IF; 
    END LOOP; 
END$body$; 

g 전 트리거를 만드는 시도하고 실패하는 것을 볼 수 :

CREATE EXTENSION cat_tools; 
CREATE TABLE i(i int); 

는 실제 이벤트 트리거를 작성

CREATE TRIGGER dummy BEFORE INSERT ON i EXECUTE PROCEDURE tg_dummy(); 
ERROR: before triggers not allowed