Jak dobrze zauważyłeś, nie widzisz wierszy zmodyfikowanych w CTE w głównym SELECT . Ten jest udokumentowany
:
Powinieneś więc użyć RETURNING .
Myślę, że najprostszym sposobem byłoby nie użycie funkcji, ale wykonanie json_build_object w głównym zapytaniu i niech działa na CTE parents i children .