我需要使用规则插入多行。
我的问题是: 我绘制一个poligon并保存在表z0_poligono_corte上,然后我使用规则来获取z0_poligono_corte中的多边形和其他表中的多边形之间的交集,但结果未插入到我创建的表中以保存结果。 postgres日志中也没有错误。
CREATE RULE cortar_anp AS ON INSERT TO z0_poligono_corte
DO also insert into z0_a_n_p_13 (id_poligono, folio, obs, anp, geometria) select pol.id, pol.folio, pol.obs, capa.anp, ST_Multi(ST_Intersection(capa.geom, pol.geometria))
from a_n_p_13 capa, z0_poligono_corte pol
where pol.id=NEW.id
and capa.geom && pol.geometria
and ST_IsEmpty(ST_Intersection(capa.geom, pol.geometria)) != TRUE;
我不知道我的规则是否正确。如果我使用例如pol.id = 1将插入运行到句子中,那么结果将正确保存。 图像
我没有10个声誉来放置图像:(
这里是图片
感谢。
答案 0 :(得分:0)
以下是如何通过触发器解决我的问题。 首先我创建了一个表
CREATE TABLE public.z0_poligono_corte (
id serial,
nombre character varying(255),
giro text,
geometria geometry(MultiPolygon,32614),
CONSTRAINT z0_poligono_corte_pkey PRIMARY KEY (id) )
之后我创建了一个触发函数来制作切片
CREATE OR REPLACE FUNCTION public.cortes_interseccion_amias()
RETURNS trigger AS
$BODY$
declare var_sql text;
begin
var_sql := 'insert into z0_amias08 (id_poligono, nombre, giro, tipo, geometria)
select pol.id, pol.nombre, pol.giro, capa.tipo, ST_Intersection(capa.geom, pol.geometria)
from amias08 capa, z0_poligono_corte pol
where pol.id=$1
and capa.geom && pol.geometria
and ST_IsEmpty(ST_Intersection(capa.geom, pol.geometria)) != TRUE';
execute var_sql using NEW.id;
return NEW;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
然后是触发器。
CREATE TRIGGER interseccion_amias
AFTER INSERT
ON public.z0_poligono_corte
FOR EACH ROW
EXECUTE PROCEDURE public.cortes_interseccion_amias();
因此,当我在该表上插入多边形时,触发器函数将在表上剪切数据,然后在新表上插入