【发布时间】:2020-03-25 11:40:14
【问题描述】:
我正在尝试在插入绘画后触发触发器,然后我想将其插入In_Gallery 表或On_Loan 表,但不能同时插入两者。当我尝试制作触发功能时,我不断收到错误消息:
ERROR: stack depth limit exceeded HINT: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.
我不确定这有什么问题:
CREATE OR REPLACE FUNCTION checkOnLoan()
RETURNS trigger AS
$$
DECLARE
countGal numeric;
BEGIN
SELECT COUNT(*) INTO countGal FROM IN_GALLERY WHERE P_id = new.P_id;
IF countGal = 0 THEN
INSERT INTO ON_LOAN VALUES (new.Certid, new.P_id, new.Insurer);
ELSE
RAISE EXCEPTION 'ALREADY IN GALLERY';
END IF;
RETURN new;
END;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER OnLoan
AFTER INSERT ON ON_LOAN
FOR EACH ROW
EXECUTE PROCEDURE checkOnLoan();
【问题讨论】:
-
你有一个递归调用。您的插入之一是插入到表中,它正在触发触发器,它正在插入到表中,这会触发触发器......等等。这些层中的每一层都需要堆栈空间。最终,你用完了。
-
@3Dave 您好,感谢您的帮助,我该怎么做才能摆脱它,过去 4 个小时里我的大脑一直看着这个问题。
标签: sql postgresql plpgsql database-trigger