PostGIS UPDATE语句致非目标JobCode记录Geom为空,求修正方案
解决PostgreSQL更新指定记录geom且不丢失原有数据的问题
你碰到的这个问题很典型——没加WHERE子句的UPDATE会遍历全表,子查询没匹配到的记录自然就被设为NULL了。咱们直接调整语句就能解决,给你两种靠谱的方案:
方案1:用WHERE子句限定更新范围(推荐)
这是最直接高效的方式,只对目标id_jobcode的记录执行更新,其他记录完全不受影响:
UPDATE public.data_mds_import SET geom = st_force3d(st_setsrid(st_point(longitude, latitude), 4326)) WHERE id_jobcode = 220; -- 替换成你需要处理的jobcode值
为什么这个方案靠谱?
- 它只会触及
id_jobcode等于指定值的记录,其他记录的geom字段完全保持原样,不会被修改。 - 性能更优:不需要扫描全表,只处理目标数据集,适合大量数据的场景。
方案2:用CASE语句(适合复杂条件场景)
如果之后你需要针对不同jobcode做不同的geom处理,可以用CASE语句兜底保留原有值:
UPDATE public.data_mds_import SET geom = CASE WHEN id_jobcode = 220 THEN st_force3d(st_setsrid(st_point(longitude, latitude), 4326)) ELSE geom -- 其他情况直接保留原有geom值 END;
注意事项
这个方案会扫描全表,所以当数据量非常大时,性能不如方案1。但胜在灵活,能应对多条件的更新需求。
内容的提问来源于stack exchange,提问作者Jarrad Clark
相关产品推荐
相关产品推荐

