gpt4 book ai didi

sql - 从 plpgsql 脚本中的行变量插入 PostGIS 对象(例如 ST_GeomFromText)

转载 作者:行者123 更新时间:2023-11-29 12:14:27 26 4
gpt4 key购买 nike

我有两个表 src_pos 和 dest_pos。

src_pos 存储经度、纬度和高度的位置,而 dest_pos 存储 PosGIS 几何对象。

现在我想使用以下 plpgsql 脚本将一堆数据从 src_pos 移动到 dest_pos。但它失败了,因为无法正确解释行变量(例如 row_data.longitude)。我怎样才能克服这个问题!?

--create language 'plpgsql';
drop function createPosition();
create function createPosition() returns integer AS
$$
DECLARE
updated INTEGER = 0;
row_data src_pos%ROWTYPE;
BEGIN
FOR row_data IN SELECT * FROM src_pos
LOOP
INSERT INTO dest_pos (coord) VALUES (ST_GeomFromText('POINT(row_data.longitude row_data.latitude row_data.altitude)', 4326));
updated := updated + 1;
END LOOP;
RETURN updated;
END;
$$
LANGUAGE 'plpgsql';

最佳答案

更好的是,使用 ST_MakePoint直接制作几何对象。这不仅比 ST_GeomFromText 更快,而且是无损的,因为您不需要将数字转换为文本再转换为数字。

...
WITH result AS (
INSERT INTO dest_pos (coord)
SELECT ST_SetSRID(ST_MakePoint(longitude, latitude, altitude), 4326)
FROM src_pos
RETURNING 1
)
SELECT count(*) INTO updated FROM result;
RETURN updated;
...

关于sql - 从 plpgsql 脚本中的行变量插入 PostGIS 对象(例如 ST_GeomFromText),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com