插入触发器后未给出所需结果
After insert trigger not giving desired result
我在一个名为 pohead
的 table 上有一个触发器
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
上则没有。
我在代码中做错了什么吗?还是我需要到别处寻找问题。
我看到一些 post 详细介绍了 FOR EACH ROW
。但是每次更新或插入只有一行。我想我可能错误地使用了 NEW
变量。
如果代码正确,我可能会考虑的另一种可能性是它们在插入之前禁用了触发器?我不知道这是否可能,但我认为一定是。
如果我创建一个 tattle-tale 函数,它在插入和更新时对我都有效。
create function releasepurchaseorder(int) returns void language plpgsql as $$
BEGIN
RAISE NOTICE 'asfdasfda';
END;
$$;
当然前提是 pohead_printed 是事实。
所以如果你认为真的有问题,那么请描述你是如何决定它不开火的,并展示一个完整的复制案例(包括 的完整定义=21=],以及两个函数)。当然,您可以同时简化 table 和函数,但验证简化版本仍然表现出您所描述的行为。
我在一个名为 pohead
的 table 上有一个触发器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
上则没有。
我在代码中做错了什么吗?还是我需要到别处寻找问题。
我看到一些 post 详细介绍了 FOR EACH ROW
。但是每次更新或插入只有一行。我想我可能错误地使用了 NEW
变量。
如果代码正确,我可能会考虑的另一种可能性是它们在插入之前禁用了触发器?我不知道这是否可能,但我认为一定是。
如果我创建一个 tattle-tale 函数,它在插入和更新时对我都有效。
create function releasepurchaseorder(int) returns void language plpgsql as $$
BEGIN
RAISE NOTICE 'asfdasfda';
END;
$$;
当然前提是 pohead_printed 是事实。
所以如果你认为真的有问题,那么请描述你是如何决定它不开火的,并展示一个完整的复制案例(包括 的完整定义=21=],以及两个函数)。当然,您可以同时简化 table 和函数,但验证简化版本仍然表现出您所描述的行为。