问题描述
我在名为pohead的表上有一个触发器
CREATE TRIGGER poautorelease
AFTER INSERT OR UPDATE
ON public.pohead
FOR EACH ROW
EXECUTE PROCEDURE public._poautorelease();
触发功能
BEGIN
IF (TG_OP = 'UPDATE' AND NEW.pohead_printed = TRUE)
OR (TG_OP = 'INSERT' AND NEW.pohead_printed = TRUE) THEN
PERFORM releasepurchaSEOrder(NEW.pohead_id);
END IF;
RETURN NEW;
END
似乎在UPDATE
上执行了功能releasepurchaSEOrder()
,而在INSERT
上未执行。
我在代码中做错什么了吗?还是我需要在其他地方寻找问题。
我看过一些详细介绍FOR EACH ROW
的帖子。但每次更新或插入都只有一行。我认为我可能错误地使用了NEW
变量。
我可能会考虑的另一种可能性是代码是否正确,也许是在插入之前禁用了触发器?我不知道这是否可行,但我认为一定可以。
解决方法
如果我创建了一个具有故事意义的函数,则该函数对我来说都适用于插入和更新。
create function releasepurchaseorder(int) returns void language plpgsql as $$
BEGIN
RAISE NOTICE 'asfdasfda';
END;
$$;
当然提供pohead_printed实际上是正确的。
因此,如果您认为确实存在问题,请说明您是如何确定不触发的,并显示一个完全复制案例(包括表的完整定义以及两个函数的完整定义) )。当然,您可以简化表格和函数,但是请验证简化版本是否仍然具有您所描述的行为。