插入触发器后未给出所需结果

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 和函数,但验证简化版本仍然表现出您所描述的行为。