2017-09-09 1 views

답변

1

당신은 pg_trigger_depth();RAISE NOTICE 다음은이 상황 making a system dependent on this behavior is not a good idea 디버깅에 도움이 될 것입니다하지만 우리는 또한이

NOTICE: [bar] TRIGGER DEPTH 1 
NOTICE: [bar] TRIGGER DEPTH 2 
ERROR: duplicate key value violates unique constraint "foo_pkey" 
DETAIL: Key (id)=(42) already exists. 
CONTEXT: SQL statement "INSERT INTO foo VALUES (42)" 
PL/pgSQL function bar() line 5 at SQL statement 
SQL statement "INSERT INTO foo VALUES (42)" 
PL/pgSQL function bar() line 5 at SQL statement 

를 산출 실행 TG_NAME

CREATE TABLE foo (id int primary key); 

CREATE FUNCTION bar() 
RETURNS trigger 
AS $$ 
    BEGIN 
    -- Debugging information 
    RAISE NOTICE '[%] TRIGGER DEPTH %', TG_NAME, pg_trigger_depth(); 
    INSERT INTO foo VALUES (42); 
    RETURN null; 
    END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER bar 
    AFTER INSERT ON foo 
    FOR EACH ROW 
    EXECUTE PROCEDURE bar(); 

INSERT INTO foo VALUES (41); 

를 사용하는 예입니다 수 있습니다.

관련 문제