【发布时间】:2018-09-06 12:08:28
【问题描述】:
我维护两个 postgis 表:“track_points”和“buffers”。 “track_point”表包含大量(近 10 亿个)点,“buffer”表包含大约 20 个多边形。
我想要做的是,检查包含它们的缓冲区中的所有点,并将相应的缓冲区 id 分配给点记录。在网上搜索后,我发现“空间关节”在这里可能有很大帮助。根据我在网上找到的内容,我整理了一个如下所示的查询({schema} 只是架构名称的占位符):
WITH join_query AS (
SELECT
points.id AS point_id,
buffers.profile_id AS profile_id
FROM {schema}.buffers AS buffers
JOIN {schema}.track_points AS points
ON ST_Contains(buffers.geom, points.geom)
)
UPDATE {schema}.track_points
SET profile_id = join_query.profile_id
FROM join_query
WHERE id = join_query.point_id
我运行了查询,但 track_points 表中的 profile_id 值都没有改变。所以我想我的查询一定有问题?!??
另外,是否有人建议如何更有效地实现我的目标(关于 track_points 表中的大量点)?
顺便说一下,我正在使用 Python 的 psycopg2 连接数据库。
【问题讨论】: