我有一张包含大约 210 万个元组的表。其中有纬度和经度列。我正在尝试将其转换为地理类型(带有 SRID 的点)。
我写的函数(过程)在我限制条目时工作正常(比如:)SELECT id,longitude,latitude FROM list_of_location limit 50
。
CREATE OR REPLACE FUNCTION convertlatlon() RETURNS VOID AS $$
DECLARE rec RECORD;
BEGIN
FOR rec IN SELECT id,longitude,latitude FROM list_of_location
LOOP
UPDATE list_of_location SET location= concat('SRID=4326;POINT(',rec.longitude,' ',rec.latitude,')') WHERE id=rec.id;
END LOOP;
END;
$$ LANGUAGE 'plpgsql' ;
- 当我尝试在整个表上运行它时,PostgreSQL 似乎什么也没做。已经等了一个半小时。
- 消耗它正在运行的内核上 99% 的 CPU。
- 不会弹出任何其他 PostgreSQL 实例来利用其他内核(因为请求来自单个用户?)。
- 这是因为锁(行级别)吗?
- 如何规避这一点?
PS我很确定这将作为题外话关闭。但是,我必须寻找答案。