如何在Postgres(Postgis)查询中将错误转换为null?

时间:2018-11-14 01:03:10

标签: postgresql postgis

我有以下postgis查询:

select st_pointonsurface(geometry), geometry, other, important, columns 
from my_polygons;

在〜2.5m的结果之后,有一条记录记录了该函数失败的地方。

ERROR: GEOSPoint OnSurface: TopologyException: 
Input geom 1 is invalid: Self-intersection at or near 
point -9083598.0378282126 3646413.3039207752 at -9083598.0378282126 3646413.3039207752

看看几何图形,我明白为什么它失败了。这是一个不好的多边形。

我想

  1. 忽略该行(从结果集中过滤掉该行);或
  2. 忽略该列(将其转换为null并返回其他列)。

如何获得这些结果中的任何一个?

1 个答案:

答案 0 :(得分:0)

此函数将“尝试/捕获”该函数,并在发生任何异常时返回null

CREATE OR replace FUNCTION polylabel(arg geometry)
RETURNS geometry LANGUAGE plpgsql
AS $$
BEGIN
    BEGIN
        RETURN st_pointonsurface(arg);
    EXCEPTION WHEN OTHERS THEN
        RETURN null;
    end;
END $$;