powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как избежать циклов в рекурсивных запросах
4 сообщений из 4, страница 1 из 1
Как избежать циклов в рекурсивных запросах
    #40047503
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

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

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

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

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

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

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


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


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

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


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