postgresql触发器用于更新多列

postgresql触发器用于更新多列

我想将某个表中的一列与 PostgreSQL 数据库中另一个表中的列匹配,因此我尝试创建一个可以实现此目的的触发器:

CREATE OR REPLACE FUNCTION modify_res_partner() RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
UPDATE res_partner
SET x_street1=res_partner_address.street
FROM res_partner_address
WHERE res_partner.id=res_partner_address.partner_id;
END IF;
END;
$$ LANGUAGE 'plpgsql';

CREATE TRIGGER modify_res_partner_trigger
AFTER INSERT OR UPDATE OR DELETE ON res_partner_address
FOR EACH ROW EXECUTE PROCEDURE modify_res_partner();

这两个表的每个记录都具有相同的值partner_id,但是您可能已经猜到了,此触发器会针对每个真实条件执行查询,因此当我修改第一个表上的一条记录时,触发器会导致每个匹配对发生 800(例如)次修改partner_id

我怎样才能单独修改与第一个表上修改的记录相匹配的记录?

答案1

您需要将查询更改为如下形式:

UPDATE res_partner
SET x_street1=res_partner_address.street
FROM res_partner_address
WHERE res_partner.id = NEW.partner_id;

你应该利用NEW行。在INSERT操作时,这指的是插入的行。在操作时,它还指的是更新的行UPDATE

顺便说一句,您不需要创建DELETE操作的触发器。

相关内容