PostgreSQL 更新触发器:关系 'new' 不存在
PostgreSQL update trigger: relation 'new' does not exist
我试图更好地理解触发器,但不太理解为什么我无法引用此触发器函数定义中的新传入行:
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 时,出现错误:
Relation "new" does not exist.
不确定如何绕过它。目标是评估进入的新行,检查 origin_ports 中的值,并使用它从引用端口 table 和国家名称 origin_country 的查询中更新 origin_country 的值=22=]。任何帮助表示赞赏。
我不完全理解所需的逻辑,但不是加入 new
(这是无效的,因为新行不是 relation/table),您可以将过滤器添加到 where子句,类似于:
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
WHERE new.origin_port = b.id;
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"();
这是你想要它做的吗?
我试图更好地理解触发器,但不太理解为什么我无法引用此触发器函数定义中的新传入行:
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 时,出现错误:
Relation "new" does not exist.
不确定如何绕过它。目标是评估进入的新行,检查 origin_ports 中的值,并使用它从引用端口 table 和国家名称 origin_country 的查询中更新 origin_country 的值=22=]。任何帮助表示赞赏。
我不完全理解所需的逻辑,但不是加入 new
(这是无效的,因为新行不是 relation/table),您可以将过滤器添加到 where子句,类似于:
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
WHERE new.origin_port = b.id;
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"();
这是你想要它做的吗?