Вашето мислене е грешно за SQL. Не мислете от гледна точка на цикли, условия и променливи; вместо това помислете как да опишете данните, които искате. Сложната част е, че искате заявката да препраща към собствените си резултати и това е, което рекурсивни CTE са за:
Търсите нещо подобно:
with recursive path as (
select id, parent from T where id = 4
union all
select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path
Това ще ви даде следното:
id | parent
----+--------
4 | 2
2 | 1
1 |
и след това можете да го съберете обратно в пътека, която би била по-списъчно свързана (или каквото и да е подходящо на вашия клиентски език) извън базата данни. Не е необходимо да включвате parent
разбира се, но включването му ще ви помогне да коригирате "указателите".