我尝试从表中批量更新每一行,为它们分配一个单独的位置。这是我正在使用的查询
UPDATE point SET location=
ST_PointFromText('POINT(' ||
(SELECT random()+5) || ' ' ||
(SELECT random()+5) || ')', 4326)
WHERE parent_id=100;
问题是每行会收到完全相同的值。
答案 0 :(得分:2)
我发现this article by Szymon Lipiński触及了我的问题。以下是我修复查询的方法:
UPDATE point p SET location=
ST_PointFromText('POINT(' ||
((SELECT random() WHERE p=p)+5) || ' ' ||
((SELECT random() where p=p)+5) || ')', 4326)
WHERE parent_id=100;
为了强制PostgreSQL每次都重新评估表达式,需要外部依赖。