Если вы хотите вернуть результат только на одно очко одновременно, тогда ответ Лоренца Альбе идеален.Но если вы хотите вернуть результаты для более чем одной точки одновременно, я предполагаю, что вы сохранили здания в некотором поле типа геометрии / географии, а не в виде текста.
select t2.*, a.*
from target t2,
lateral (select o.*
from osm_buildings o, target t
where t2.id=t.id
order by st_distance(o.geom::geography, t.geom::geography) limit 1) a
Также, если ваш набор данных большой и вы принимаетечто из некоторых точек теперь есть близкий полигон в некотором допустимом диапазоне (например, 1 км), вы можете добавить st_dwithin (o.geom, t.geom, your_max_distance) в предложения where в боковом подзапросе.Если вы хотите вернуть более одного «ближайшего полигона», просто увеличьте лимит.