0
내가 가지고있는 트리거가 PostgreSQL에서 반복 또는 반복되는지 어떻게 알 수 있습니까? 사용법에 대한 예가 있습니까?PostgreSQL에서 트리거 재귀를 어떻게 디버깅합니까?
오류의 원인이 재귀인지 확인하려면 add code to my current trigger을 확인하는 방법의 예를 찾고 있습니다.
내가 가지고있는 트리거가 PostgreSQL에서 반복 또는 반복되는지 어떻게 알 수 있습니까? 사용법에 대한 예가 있습니까?PostgreSQL에서 트리거 재귀를 어떻게 디버깅합니까?
오류의 원인이 재귀인지 확인하려면 add code to my current trigger을 확인하는 방법의 예를 찾고 있습니다.
당신은 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);
를 사용하는 예입니다 수 있습니다.