Выбор ответа Middle Подзапросы и CTE обновлено

Когда останавливается рекурсивный CTE

Вопрос

Когда завершается выполнение WITH RECURSIVE?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Когда рекурсивная часть не вернула новых строк. Якорь выполняется один раз.

Варианты ответа

  1. После фиксированного числа шагов, по умолчанию 100
  2. Когда якорная часть вернула пустой результат на очередном шаге
  3. Когда рекурсивная часть не вернула новых строкправильный ответ
  4. Когда суммарный результат превысил work_mem

Разбор

Якорь выполняется один раз. Затем рекурсивная часть повторяется над строками предыдущей итерации, пока не вернёт пустоту. Встроенного лимита шагов в PostgreSQL нет (ограничение в 100 есть у MAXRECURSION в SQL Server), поэтому при цикле в данных с UNION ALL запрос будет крутиться бесконечно. work_mem влияет на то, когда данные уходят на диск, а не на остановку.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.