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

这是你想要它做的吗?