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$;
NEW.geom
与区域的geom相交时。st_intersects
的第二个参数的正确语法:我必须写像 (execute format('select geom from %I.region', vm_prescription.nspname))
这样的东西,这显然是错误的,但我希望这个想法很清楚。region
是所有物化视图的名称,只有模式名称发生变化。