Я пытаюсь создать функцию, которая будет возвращать ближайшую ванную комнату - из-за некоторых ограничений она должна быть в функции, которая возвращает значения SETOF
.Мне удалось заставить функцию сделать это, но когда я запускаю ее со значением, оно никогда не возвращается.
При этом внутренний запрос сам по себе возвращает просто отлично ...
Вот функция, которую я создал:
CREATE OR REPLACE FUNCTION nearest_bathroom(tag integer, max_distance decimal = 0.1 )
RETURNS SETOF bathrooms AS $$
SELECT bathroom.*
FROM bathroom
WHERE bathroom.id IN
(
SELECT broom.id
FROM bathroom broom
INNER JOIN location l
ON _st_dwithin(broom.geom, l.geom, max_distance)
WHERE l.tag = tag
ORDER BY st_distance(broom.geom, l.geom)
LIMIT 1
)
$$ LANGUAGE sql STABLE;
Между тем, выполнение запроса вне функции (SELECT bathroom.*
и т. Д.) Со значением для tag
работает нормально и возвращает в миллисекундах.
Я должен добавить, что вижу ту же проблему при создании функции, которая RETURNS TABLE (etc, )
вместо SETOF
.