Comme vous l'avez bien remarqué, vous ne pouvez pas voir les lignes modifiées dans le CTE dans le SELECT principal . Ce est documenté
:
Vous devez donc utiliser RETURNING .
Je suppose que le moyen le plus simple serait de ne pas utiliser une fonction, mais d'effectuer json_build_object dans la requête principale et la faire fonctionner sur les CTE parents et children .