Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как избежать циклов в рекурсивных запросах / 4 сообщений из 4, страница 1 из 1
20.02.2021, 13:15
    #40047503
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать циклов в рекурсивных запросах
Всем привет.

Вопрос по CTE - рекурсивным. Если в БД присутствуют записи, приводящие к бесконечному циклу, как их избежать? В Oracle есть оператор nocycle (может, и костыль некий, но работает прекрасно), в Postgres есть что-то подобное?

В интернетах предлагают ограничиться уровнем вложенности типа deph < 10, но это не интересно. Есть что-то более правильное, когда мы охватим все записи, но при этом, если встретим повторную запись, то не пойдем в цикл повторно? По сути, аналог nocycle в Oracle.

Заранее спасибо.
...
Рейтинг: 0 / 0
20.02.2021, 13:31
    #40047508
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать циклов в рекурсивных запросах
Alexey Agafonov
Всем привет.

Вопрос по CTE - рекурсивным. Если в БД присутствуют записи, приводящие к бесконечному циклу, как их избежать? В Oracle есть оператор nocycle (может, и костыль некий, но работает прекрасно), в Postgres есть что-то подобное?

В интернетах предлагают ограничиться уровнем вложенности типа deph < 10, но это не интересно. Есть что-то более правильное, когда мы охватим все записи, но при этом, если встретим повторную запись, то не пойдем в цикл повторно? По сути, аналог nocycle в Oracle.

Заранее спасибо.


Нет такого нет.
Можно скостылить в виде массива накопителя уже увиденных данных если очень надо (но если у вас там десятки тысяч записей будут и больше обрабатываться это запретительно по памяти и скорости будет).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
20.02.2021, 15:28
    #40047530
Misha111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать циклов в рекурсивных запросах
Alexey Agafonov,

собирать значения в массив или строку и по ним фильтровать
...
Рейтинг: 0 / 0
21.02.2021, 11:58
    #40047640
ptr128
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как избежать циклов в рекурсивных запросах
Alexey Agafonov,

Можно самому считать глубину рекурсии в запросе и ограничиваться по ней

Код: plsql
1.
2.
3.
4.
5.
6.
WITH RECURSIVE t(n) AS (
    SELECT 1
  UNION ALL
    SELECT n+1 FROM t WHERE n < 10
)
SELECT n FROM t;



Альтернативное решение, как сказали выше, накопление в массиве хешей уже обработанных строк. Но это сильно медленней.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как избежать циклов в рекурсивных запросах / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]