Você não precisa especificar as colunas no
WITH
papel. Se você deixar isso de fora, os nomes das colunas serão determinados pela primeira consulta no UNION
:WITH RECURSIVE recursetree AS (
SELECT * FROM tree WHERE parent_id = 0
UNION
SELECT t.*
FROM tree t
JOIN recursetree rt ON rt.id = t.parent_id
)
SELECT *
FROM recursetree;