【发布时间】:2021-05-15 06:56:38
【问题描述】:
我的 PostgreSQL 数据库触发器有问题。
我正在尝试使用 PostGIS 工具计算两个地理点之间的距离。
这两个点在不同的表中,这两个表之间的 KEY 是site_id 列。
sites 表结构为:
CREATE TABLE sites(
site_id INT,
site_name text,
latitude float ( 6 ),
longitude float ( 6 ),
geom geometry
);
dots 表结构为:
CREATE TABLE dots(
dot_id INT,
site_id INT,
latitude float ( 6 ),
longitude float ( 6 ),
rsrp float ( 6 ),
dist INT,
project_id INT,
dist_from_site INT,
geom geometry,
dist_from_ref INT;
);
目标是制作一个触发器,在添加新点时自动计算距离。
我创建的触发器是:
CREATE TRIGGER dots_insert_site_dist_trigger
AFTER UPDATE OF "geom"
ON "dots"
FOR EACH ROW
EXECUTE PROCEDURE dots_insert_site_dist_update();``
函数本身:
RETURNS trigger
AS
$$
BEGIN
UPDATE dots SET dist_from_site =
(SELECT ROUND(100*ST_Distance(NEW.geom, sites.geom))
FROM
dots,
sites
WHERE sites.site_id = NEW.site_id);
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';
错误:
错误:用作表达式的子查询返回多行 上下文:SQL 语句“更新点 SET dist_from_site = (SELECT ROUND(100*ST_Distance(NEW.geom,sites.geom)) 从 点, 网站 WHERE sites.site_id = NEW.site_id)" PL/pgSQL 函数 dots_insert_site_dist_update() SQL 语句第 3 行
站点表:
点表:
【问题讨论】:
标签: sql postgresql postgis