创建postgresql触发器函数以更新Linestring几何图形列

创建postgresql触发器函数以更新Linestring几何图形列,postgresql,join,postgis,point,database-trigger,Postgresql,Join,Postgis,Point,Database Trigger,我不熟悉postgresql和postgis扩展。我试图创建一个触发器函数,每当我在表2中插入或更新site_a、site_b时,它都会更新表2中的几何列geom(Linestring)。后面的这些列是外键,引用表1中的站点代码 表1: site_code | geom -----------+---------------------------------------------------- MIT03 | 0101000020E6

我不熟悉postgresql和postgis扩展。我试图创建一个触发器函数,每当我在表2中插入或更新site_a、site_b时,它都会更新表2中的几何列geom(Linestring)。后面的这些列是外键,引用表1中的站点代码

表1:

 site_code |                        geom
-----------+----------------------------------------------------
 MIT03     | 0101000020E61000009B55BFC8CDF8174054483DD5C9254240
 BAS33     | 0101000020E6100000345EEA4A00A61A4095FAE019BDDD4140
表2:

 link_id | site_a | site_b | geom
---------+--------+--------+------
      72 | BAS33  | MIT03  |
      57 | AI4402 | MIT03  |
以下是我的功能:

CREATE OR REPLACE FUNCTION create_line() RETURNS TRIGGER
AS
$$
BEGIN
UPDATE links SET geom =ST_MakeLine((SELECT sites.geom FROM links JOIN sites ON site_code=NEW.site_a),(SELECT sites.geom FROM links JOIN sites ON site_code=NEW.site_b)) WHERE link_id=NEW.link_id;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
触发因素是:

CREATE TRIGGER t_create_line
AFTER INSERT OR UPDATE OF site_a, site_b
ON links
FOR EACH ROW
EXECUTE PROCEDURE create_line();

我无法使该函数工作。

我可以设法使该函数工作,问题来自ST_MakeLine中的SELECT查询;两人都返回了许多行。 通过添加限制1

(SELECT sites.geom FROM links JOIN sites ON site_code=site_a WHERE site_a=NEW.site_a LIMIT 1),(SELECT sites.geom FROM links JOIN sites ON site_code=site_b WHERE site_b=NEW.site_b LIMIT 1))
由于函数更新了表2中的所有行,因此部分解决了该问题。
更新结束时添加了一个link\u id=NEW的条件
。link\u id
,现在一切正常。

我可以设法使函数工作,问题来自ST\u MakeLine内的SELECT查询;两人都返回了许多行。 通过添加限制1

(SELECT sites.geom FROM links JOIN sites ON site_code=site_a WHERE site_a=NEW.site_a LIMIT 1),(SELECT sites.geom FROM links JOIN sites ON site_code=site_b WHERE site_b=NEW.site_b LIMIT 1))
由于函数更新了表2中的所有行,因此部分解决了该问题。 更新结束时添加了一个条件
,其中link\u id=NEW.link\u id
,现在一切正常