Выбор ответа Middle Подзапросы и CTE обновлено
Когда останавливается рекурсивный CTE
Вопрос
Когда завершается выполнение WITH RECURSIVE?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Когда рекурсивная часть не вернула новых строк. Якорь выполняется один раз.
Варианты ответа
- После фиксированного числа шагов, по умолчанию 100
- Когда якорная часть вернула пустой результат на очередном шаге
- Когда рекурсивная часть не вернула новых строкправильный ответ
- Когда суммарный результат превысил work_mem
Разбор
Якорь выполняется один раз. Затем рекурсивная часть повторяется над строками предыдущей итерации, пока не вернёт пустоту. Встроенного лимита шагов в PostgreSQL нет (ограничение в 100 есть у MAXRECURSION в SQL Server), поэтому при цикле в данных с UNION ALL запрос будет крутиться бесконечно. work_mem влияет на то, когда данные уходят на диск, а не на остановку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Подзапросы и CTE»
- Полный путь категории в дереве
- Клиенты, у которых все заказы оплачены
- Дни без продаж по регионам
- Цепочка руководителей вверх по дереву
- Дороже любой книги: ALL против MAX
- Категория с максимальной выручкой
- Два последних заказа каждого клиента через LATERAL
- Дороже среднего по своей категории