Su pensamiento es incorrecto para SQL. No piense en términos de bucles, condiciones y variables; en su lugar, piense en cómo describir los datos que desea. La parte complicada es que desea que la consulta se refiera a sus propios resultados y eso es lo que CTEs recursivos son para:
Estás buscando algo como esto:
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
Eso te dará esto:
id | parent
----+--------
4 | 2
2 | 1
1 |
y luego puede volver a armarlo en una ruta que sería más enlazada (o lo que sea apropiado en el idioma de su cliente) fuera de la base de datos. No tienes que incluir parent
por supuesto, pero incluirlo te ayudará a corregir los "indicadores".