触发更新更新列

Trigger to update a column on update

我写了这个函数和这个触发器:

CREATE OR REPLACE FUNCTION test4() RETURNS TRIGGER AS $BODY$
BEGIN
     UPDATE "cf"
     SET vol=(area*alt);
RETURN null;
END;
$BODY$
LANGUAGE plpgsql

触发器

CREATE TRIGGER trig_upd
AFTER OR UPDATE ON "cf"
FOR EACH ROW
EXECUTE PROCEDURE test4();

我已经测试了我的功能,没问题。所以我创建了触发器,但是我无法在 table "cf" 中插入任何值,因为系统崩溃了。

如果要为每个修改的行更新 vol 的值,请不要使用更新,只需分配值即可。为此,您还需要将触发器定义为 before 触发器:

CREATE OR REPLACE FUNCTION test4() RETURNS TRIGGER 
AS 
$BODY$
BEGIN
   new.vol := new.area * new.alt;
   RETURN new;
END;
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER trig_upd
BEFORE UPDATE ON "cf" --<< note the BEFORE!
FOR EACH ROW
EXECUTE PROCEDURE test4()