Il tuo pensiero è sbagliato per SQL. Non pensare in termini di cicli, condizioni e variabili; invece, pensa a come descrivere i dati che desideri. La parte difficile è che vuoi che la query faccia riferimento ai propri risultati e questo è ciò che CTE ricorsive sono per:
Stai cercando qualcosa del genere:
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
Questo ti darà questo:
id | parent
----+--------
4 | 2
2 | 1
1 |
e quindi puoi rimetterlo insieme in un percorso che sarebbe più linkato (o qualunque cosa sia appropriato nella lingua del tuo client) al di fuori del database. Non è necessario includere parent
ovviamente, ma includerlo ti aiuterà a correggere i "puntatori".