Есть ли способ создать агрегатную функцию PostgreSQL, которая может вызывать другие агрегатные функции, обрабатывать исключения и возвращать одно значение?
Этот запрос принимает набор геометрий, объединяет их вместе, проверяет,постоянная геометрия полностью в объединенном результате и возвращает true false. Проблема в том, что частое слияние вызывает исключение по разным причинам, поэтому мне нужно сделать запасной вариант, то есть функцию iferror()
в стиле Excel, которая будет выполнять другую операцию, такую как st_union()
вместо st_collect()
. Если это также не помогает, в идеале я должен выполнить итерацию по всем геометриям индивидуально, чтобы увидеть, соответствует ли какая-либо из них моему тесту.
SELECT ST_WITHIN(
ST_GeomFromText('POLYGON((0 4096,0 0,4096 0,4096 4096,0 4096))', 3857),
ST_COLLECT(geomtry)
) AS IsEmpty
FROM (select geomtry from ...) AS src;
Псевдокод:
FUNCTION test_is_empty(geometries: SET<geometry>)
TRY:
RETURN ST_WITHIN(
ST_GeomFromText('POLYGON((0 4096,0 0,4096 0,4096 4096,0 4096))', 3857),
ST_COLLECT(geometries));
EXCEPT:
TRY:
RETURN ST_WITHIN(
ST_GeomFromText('POLYGON((0 4096,0 0,4096 0,4096 4096,0 4096))', 3857),
ST_UNION(geometries));
EXCEPT:
TRY:
RETURN SELECT MAX(ST_WITHIN(
ST_GeomFromText('POLYGON((0 4096,0 0,4096 0,4096 4096,0 4096))', 3857),
individual_value))
FROM geometries;
EXCEPT:
RETURN FALSE;
END