使用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
在64位Ubuntu 14.04上使用PGSQL 9.3.5。
答案 0 :(得分:2)
只需将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;
答案 1 :(得分:2)
您在程序上思考,而在大多数情况下,基于集合的方法在关系数据库中更胜一筹。像:
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';