【发布时间】:2014-05-21 08:34:06
【问题描述】:
我需要使用规则插入几行。
我的问题是: 我画了一个 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 名声望来放图片 :(
图片在这里
谢谢。
【问题讨论】:
-
您当前的规则将尝试插入根据所有现有记录选择的记录(不包括正在插入的新记录)。如果您只想在
z0_a_n_p_13中插入与插入到z0_poligono_corte的记录相对应的记录,请使用new而不是z0_poligono_corte pol。 -
like this: CREATE RULE cortar_anp AS ON INSERT TO z0_poligono_corte DO 也插入 z0_a_n_p_13 (id_poligono, folio, obs, anp, geometria) 选择 new.id, new.folio, new.obs, capa。 anp, ST_Multi(ST_Intersection(capa.geom, new.geometria)) 来自 a_n_p_13 capa, NEW where capa.geom && pol.geometria and ST_IsEmpty(ST_Intersection(capa.geom, new.geometria)) != TRUE;但说新关系不存在。 @ADTC
-
capa.geom && pol.geometria AND ST_IsEmpty(ST_Intersection(capa.geom, pol.geometria)) != TRUE是一种非常复杂的询问它们是否相交的方法。大大简化为ST_Intersects(capa.geom, pol.geometria)。 -
请查看Postgres Docs about Rules 以了解如何正确使用
NEW和OLD伪关系,以及它们的用途。
标签: postgresql postgis rules