在 PGAdmin 4 v5 中使用触发器获取在 QGIS 中生成的线的几何形状

Using Triggers in PGAdmin4 v5 to get the geom of a line being generated in QGIS

所以我有一个在 qgis 中可视化编码的管道数据库。我的目标是向 PGAdmin4 v5 添加一个触发器,该触发器使用 ST_StartPoint() 和 ST_EndPoint() 在输入时获取折线(管道)的端点。然后,我打算使用这个几何图形来获取最近的结构(一个点)并使用相应的数据自动完成两列。我有工作代码可以获取现有管道的端点并找到最近的结构,但我想使用新创建的线(管道)在将表单输入数据库时​​自动完成表单。

工作代码:

 SELECT p.id,
    dump_line.geom,
    st_endpoint(dump_line.geom) AS downstream,
    j.geom_closest_downstream,
    st_startpoint(dump_line.geom) AS upstream,
    i.geom_closest_upstream
   FROM sewers.pipes p,
    LATERAL st_dump(st_setsrid(p.geom, 2965)) dump_line(path, geom),
    LATERAL ( SELECT s.geom
           FROM sewers.structures s
          ORDER BY (st_endpoint(dump_line.geom) <-> s.geom)
         LIMIT 1) j(geom_closest_downstream),
    LATERAL ( SELECT s.geom
           FROM sewers.structures s
          ORDER BY (st_startpoint(dump_line.geom) <-> s.geom)
         LIMIT 1) i(geom_closest_upstream);

我需要弄清楚如何从更新中获取数据(向 qgis 添加条目)并使用它的几何形状而不是现有管道的几何形状。

只需将此查询放入函数中..

CREATE OR REPLACE FUNCTION insert_pipe() RETURNS TRIGGER AS $$
BEGIN
  SELECT 
  j.geom_closest_downstream,
  i.geom_closest_upstream
  INTO NEW.geom_closest_downstream, NEW.geom_closest_upstream
  FROM ST_Dump(NEW.geom) dump_line,
  LATERAL (SELECT s.geom 
           FROM structures s
           ORDER BY ST_EndPoint((dump_line).geom)<->s.geom 
           LIMIT 1) j (geom_closest_downstream),
  LATERAL (SELECT s.geom 
           FROM structures s
           ORDER BY ST_StartPoint((dump_line).geom)<->s.geom 
           LIMIT 1) i (geom_closest_upstream);
           
  RETURN NEW;
END; $$ LANGUAGE plpgsql;

并为其附加一个触发器,例如BEFORE INSERT OR UPDATE 触发器:

CREATE TRIGGER t_insert_pipe 
BEFORE INSERT OR UPDATE ON pipes FOR EACH ROW EXECUTE PROCEDURE insert_pipe();

此演示可能会给您一些提示:db<>fiddle