使用TRIGGER基于另一个表插入更新表行?

时间:2018-04-27 19:05:49

标签: database postgresql database-design triggers plpgsql

我有点坚持这个。我正在使用触发器,以便在将新数据条目插入VISITED时,它应该更新名为places的表中的visits属性。但是,我不知道如何制作它,以便只在表格PLACES中更新插入行的访问次数。发生了什么事情是整个访问列在PLACES中为每个也在VISITED的地方更新...我尝试使用

SET NEW.visits = visits + 1

但是后来我收到一个错误,新的不被认可......任何想法/建议? :(

CREATE OR REPLACE FUNCTION log_visits() RETURNS TRIGGER AS $BODY$
 BEGIN
   UPDATE places
   SET visits = visits + 1
   FROM visited WHERE(places.name = visited.name AND 
places.borough = visited.borough);
   RETURN NEW;
 END;
$BODY$
LANGUAGE plpgsql;


CREATE TRIGGER trigger_visits AFTER INSERT ON visited
FOR EACH ROW EXECUTE PROCEDURE
log_visits(); 

1 个答案:

答案 0 :(得分:1)

您应该只更新new所指向的行:

create or replace function log_visits() 
returns trigger as $body$
begin
    update places
    set visits = visits + 1
    where places.name = new.name 
    and places.borough = new.borough;
    return null;
end;
$body$
language plpgsql;

顺便说一句,插入后的触发器应返回null(但忽略任何返回值)。

DbFiddle.

中测试