postgresql - 如何在 FOR 循环内进行选择以进行进一步计算?

标签 postgresql for-loop postgis plpgsql

使用 postgresql 和 postgis 我有 2 个 openstreetmap 表,包含:

  1. 点:具有单一坐标的位置
  2. 多边形:具有坐标集的区域

现在,我尝试遍历 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。

最佳答案

您正在按程序思考,而在大多数情况下,基于集合的方法在关系数据库中更胜一筹。喜欢:

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';

关于postgresql - 如何在 FOR 循环内进行选择以进行进一步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450490/

相关文章:

mysql - 如果表中有大列,即使未选择这些列,SQL 查询在内存方面是否更多 "expensive"?

bash - 暂停循环直到按下键

r - 如何选择R中的整行而不是第一个元素?

python - Django 测试——无法删除并重新创建测试数据库

sql - PostgreSQL多pg_trgm相似度评分子查询

postgresql - libpq:如何在 PGconn 连接失败后获取错误代码

hibernate - 通过 Hibernate 调用 Postgres 函数

postgresql - 通过在 postgresql 上声明变量来选择查询

postgresql - 如何使 postgreSQL 备份密码 protected

java - 栅栏柱问题