Придумать эффективный запрос



Есть таблица, описывающая некоторые задачи





create table tasks

(

id bigserial not null primary key,

parent_id bigint null,

status varchar(128) not null,

data jsonb not null

);




У задач иерархичная структура, которая задается с помощью id, parent_id. Задача должна начать выполняться только тогда, когда все дочерние задачи выполнены. Для простоты можно считать что status принимает значения PENDING и COMPLETED



У PENDING задач дочерние могут быть как PENDING, так и COMPLETED, у COMPLETED задач дочерние гарантированно COMPLETED



Хочется придумать эффективный способ (запрос + индексы, возможно с добавлением доп колонок) доставать задачи, которые нужно выполнить. То есть те, у которых все дочерние задачи выполнены



Ограничения:

- Всего задач около 100 млн

- В конкретный момент PENDING задач около 1млн

- В конкретных момент PENDING задач, у которых все дочерние COMPLETED около 100

- У одной задачи не более 10 дочерних