使用postgresql中的规则插入多行

时间:2014-05-21 08:34:07

标签: postgresql postgis rules

我需要使用规则插入多行。

我的问题是: 我绘制一个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个声誉来放置图像:(

这里是图片

感谢。

1 个答案:

答案 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();

因此,当我在该表上插入多边形时,触发器函数将在表上剪切数据,然后在新表上插入