Как преобразовать ошибку в null в запросе postgres (postgis)? - PullRequest
0 голосов
/ 14 ноября 2018

У меня следующий запрос postgis:

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

После ~ 2,5 м результатов появляется запись о сбое функции.

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 голосов
/ 14 ноября 2018

Эта функция будет «пробовать / ловить» функцию, возвращая 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 $$;
...