Pavel Denisov, async for вызывает anext асинхронного итератора, то есть асинхронно получает значение в переменную цикла (тыц). Для асинхронных операций в теле цикла он не подходит, надо обычный wait вызывать.
Xaip, похоже, многие особенности реализации, важные для понимания вопроса, остались за кадром. Вам стоит подробно описать логику работы всех элементов системы.
McMike: ltree примерно так и делает, в таблицу нужно будет добавить поле, которое хранить путь к корню. Правда, не в виде массива идентификаторов родителей, а в более эффективной форме.
заменить на
проблема сохраняется?