触发器更新另一个表

geo*_*row 3 postgresql triggers plpgsql

一段时间以来,我一直在尝试编写一个触发器函数,该函数在父表更改时更新子表中的行。我已经阅读了 Trigger procedure 文档,但我还没有真正掌握如何构建这些函数。

这是我尝试过但不起作用的方法...

CREATE FUNCTION myschema.update_child() RETURNS trigger AS
$BODY$
BEGIN
UPDATE myschema.child 
set new.number = parent.number 
FROM myschema.parent
WHERE id = "id";
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)

然后触发

CREATE TRIGGER update_child_after_update
   AFTER INSERT OR UPDATE OR DELETE
   ON myschema.child
   FOR EACH ROW
   EXECUTE PROCEDURE myschema.update_child();
Run Code Online (Sandbox Code Playgroud)

有没有人有一些提示?
此致

Tom*_*ico 9

您不需要parent在触发器函数的主体中使用该表,因为来自父表的值在函数中的特殊变量OLDand中可用NEW。在这种情况下,您只需要NEW.

如果您只在更新时需要触发器,那么定义一个仅更新触发器:

CREATE or replace FUNCTION update_child() RETURNS trigger AS
  $BODY$
BEGIN
  UPDATE child
  set number = NEW.number
  WHERE id = NEW.id;
  RETURN NEW;
END
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER update_child_after_update
AFTER UPDATE 
ON parent
FOR EACH ROW
EXECUTE PROCEDURE update_child(); 
Run Code Online (Sandbox Code Playgroud)