Part 89: Preventing Infinite Loops in Recursion: CYCLE & Max Limits
If hierarchical data contains a circular reference (A manages B, B manages A), a recursive CTE will enter an infinite loop until disk or memory crashes.
1. Cycle Detection Syntax (SQL:2016 / PostgreSQL 14+)
WITH RECURSIVE NodeGraph AS (
SELECT id, next_node_id FROM nodes WHERE id = 1
UNION ALL
SELECT n.id, n.next_node_id
FROM nodes n
JOIN NodeGraph g ON n.id = g.next_node_id
)
CYCLE id SET is_cycle USING path;
Key Takeaways
- Use
CYCLEor depth-limiting clauses to safeguard against infinite recursive loops.
In Part 90, we explore Materialized vs Not Materialized CTEs (Optimization Fences)!

