PostgreSQL执行UPDATE更新时提示子查询返回多行错误如何解决
报错原因
你编写的UPDATE语句中,赋值右侧的子查询会返回admins_polygons表所有行的_geometry字段转换结果,多行值无法赋值给当前更新行的单个polygons字段,因此触发SQL state 21000报错。
解决方案
无需嵌套子查询,直接基于当前行的字段值做转换即可。推荐使用PostGIS原生的WKT转Geometry函数ST_GeomFromText,指定和你新建列匹配的SRID=4326,避免后续空间操作出现校验错误:
UPDATE admins_polygons SET polygons = ST_GeomFromText(_geometry, 4326);
如果坚持使用CAST语法,需要额外补充SRID设置,写法如下:
UPDATE admins_polygons SET polygons = ST_SetSRID(CAST(_geometry AS GEOMETRY), 4326);
提示:直接CAST转换得到的Geometry默认SRID为0,和你通过AddGeometryColumn创建的SRID=4326的列约束不匹配,即使更新成功后续也会触发空间字段校验错误,因此必须手动指定SRID。
内容的提问来源于stack exchange,提问作者polotepes
相关产品推荐
相关产品推荐

