使用 TRIGGER 根据另一个 table 插入更新 table 行?

Update a table row based on another table insert using a TRIGGER?

我有点卡在这上面。我正在使用触发器,以便在将新数据条目插入 VISITED 时,它应该更新 table 调用位置中的 visits 属性。但是,我不知道如何才能在 table PLACES 中只更新插入行的访问。发生的事情是,对于也在 VISITED 中的每个地方,整个 visits 列在 PLACES 中得到更新...我尝试使用

SET NEW.visits = visits + 1

但后来我收到一个错误,说新的无法识别...任何 ideas/suggestions? :(

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(); 

您应该只更新 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;

顺便说一句,插入后的触发器应该 return null(尽管忽略任何 return 值)。

DbFiddle.

中测试