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)
有没有人有一些提示?
此致
您不需要parent
在触发器函数的主体中使用该表,因为来自父表的值在函数中的特殊变量OLD
and中可用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)
归档时间: |
|
查看次数: |
6507 次 |
最近记录: |