【发布时间】:2021-09-01 22:27:17
【问题描述】:
我试图更好地了解触发器,但不太理解为什么我无法在此触发器函数定义中引用新的传入行:
CREATE OR REPLACE FUNCTION public.update_origin_country()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
NEW.origin_country = a.pk
from reference.admin_layers_0 a
inner join reference.world_port_index b on a.iso_a2 = b.country
inner join new c on b.id = c.origin_port;
RETURN NEW;
END;
$$;
CREATE TRIGGER "origin_country_update" BEFORE INSERT OR UPDATE OF "origin_port" ON "active"."events"
FOR EACH ROW
EXECUTE PROCEDURE "public"."update_origin_country"();
当我使用触发器更新字段 origin_ports 时,我收到错误:
关系“新”不存在。
不知道如何绕过它。目标是评估传入的新行,检查 origin_ports 中的值,并使用该值从引用端口表和国家名称表的查询中更新 origin_country 的值。任何帮助表示赞赏。
【问题讨论】:
-
您正在尝试将
inner join转至new。new是单个记录,而不是表/关系。 -
NEW是record不是关系(表),您不能在JOIN中使用它。我会说消除inner join new c on b.id = c.origin_port;并改用WHERE b.id = new.origin_port。 -
好的,感谢您的澄清!随意写下来作为答案,以便我接受。
标签: postgresql triggers