PL/pgSQL:IF THEN 在 FOR 循环中

问题描述 投票:0回答:0

PostgreSQL 14

函数的目标是在

IF
条件为
true
时刷新具体的物化视图:

    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
    vm_prescription RECORD;
begin
    FOR vm_prescription in 
        select relname, relnamespace, nspname, relowner, relkind, nspowner from
        pg_catalog.pg_class join
        pg_catalog.pg_namespace
        on relnamespace = pg_catalog.pg_namespace.oid
        and relkind = 'm' and relname = 'prescription'
        order by nspname
    LOOP 
        IF (st_intersects(NEW.geom, *here is the problem*)) THEN
            EXECUTE format( 'refresh materialized view %I.%I', vm_prescription.nspname, vm_prescription.relname);
        END IF;
    END LOOP;
    return null;
END;
$BODY$;
  • 我想刷新一个区域的物化视图,就这个one,当插入的
    NEW.geom
    与区域的geom相交时。
  • 我找不到
    st_intersects
    的第二个参数的正确语法:我必须写像
    (execute format('select geom from %I.region', vm_prescription.nspname))
    这样的东西,这显然是错误的,但我希望这个想法很清楚。
    region
    是所有物化视图的名称,只有模式名称发生变化。
postgresql function for-loop if-statement
© www.soinside.com 2019 - 2024. All rights reserved.