使用postgresql和postgis,我有2个openstreetmap表,包含:
现在,我试图循环遍历Point表,对于每个记录,我都试图使用postgis函数进行一些计算,例如ST_Intersects()
。然后尝试将结果插入另一个表中。
到目前为止,我只使用postgis函数完成了简单的SELECT
查询,它们基本上是这样工作的:
SELECT a.name, b.name
FROM table_point AS a, table_polygon AS b
WHERE a.name = 'Berlin' AND ST_Intersects(a.way, b.way);
注意:way
是包含几何数据的两个表中的列。
回到我想要操作的循环,我发现自己缺乏plpgsql基础知识。我创建了以下循环结构,但不知道如何为postgis函数选择第二组记录(table_point AS a, table_polygon AS b
)。简短:如何选择table_polygon
和for -循环的记录?或者,有没有更好的方法来解决这个问题?
DO
$do$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT * FROM table_point
LOOP
RAISE NOTICE '%', r;
...
END LOOP;
END;
$do$ LANGUAGE plpgsql
在Ubuntu 14.04 64位上使用PGSQL 9.3.5 .
发布于 2014-12-12 16:51:48
在大多数情况下,基于集合的方法在关系数据库中更优越。比如:
INSERT INTO table_other (point, polygon, result)
SELECT a.name, b.name, calculate(a.?, b.?) AS result -- undefined what to do
FROM table_point a
JOIN table_polygon b ON ST_Intersects(a.way, b.way)
WHERE a.name = 'Berlin';
发布于 2014-12-12 11:41:18
只需将r2定义为记录。
然后做一些如下的事情:
FOR r IN SELECT * FROM table_point
LOOP
RAISE NOTICE '%', r;
for r2 in select * from table2 where table2.id=r.somecolumn
LOOP
--perform calcs here
end loop;
END LOOP;
https://stackoverflow.com/questions/27450490
复制相似问题