我看到很多像我的帖子,但我没有设法找到一个适当的答案我的情况,这应该是我假设的基本。我使用扩展PostGIS 2.3。这里是我的代码:PostgreSQL 9.5:缺少表“新”的FROM子句条目
CREATE OR REPLACE FUNCTION public.split_cable()
RETURNS trigger AS
$BODY$
DECLARE geometrie geometry;
BEGIN
geometrie = new.geom;
create view temp_wire as (
with brs as (select boite.geom from cablage_pays_gex.boite
where st_intersects(boite.geom, new.geom) and boite.geom not in (select st_startpoint(st_linemerge(new.geom))) and boite.geom not in (select st_endpoint(st_linemerge(new.geom)))
)
select st_dump(st_split(new.geom, brs.geom)) from brs
);
RETURN new;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
正如你可以看到我有一个变量“几何学”,我没有用,那是因为我想声明包含我要使用的数据的变量,没有成功。我得到的错误是我的问题,它指向st_intersects()函数(所以我第一次尝试调用new.geom)。我究竟做错了什么?我该如何解决这个问题?
编辑:这里是create table语句上的触发作用是:
CREATE TABLE public.cable2
(
id_cable integer NOT NULL DEFAULT nextval('cable2_seq'::regclass),
geom geometry(MultiLineString,2154),
CONSTRAINT cable2_pkey PRIMARY KEY (id_cable)
);
向我们展示触发器表的'create table'语句。但是在触发器中创建一个视图是一个**真的**,真是个坏主意 - 它会在基础表上的第二个DML语句后失败。这意味着您只能运行一次DML语句,然后再也不会再次运行,因为每次后续语句都会出现错误。 –
@a_horse_with_no_name不确定你的意思。我主要使用第三方软件QGIS与数据库交互,所以我没有使用任何语句。你的意思是“创建触发器”声明? –
然后,第三方软件将停止工作,因为在针对该表的第一条DML语句之后触发器将失败。为了找出你的触发器有什么问题,我们需要查看你正在定义触发器的表的'create table'语句。 –