Consider that I have a table of points, each point has 2 coordinates. For example:
Source | Destination
1 | 2
2 |
with recursive
points(src, dst) as (values(1,2),(3,7),(2,3),(5,7),(9,12)),
result as (
select src, dst, array[src,dst] as point, 1 as n
from points p1
where not exists(select * from points p2 where p2.dst = p1.src)
union all
select result.src, points.dst, array[points.src, points.dst], n+1
from result join points on (result.dst = points.src)
)
select array_agg(point order by n) from result group by src;