Server-side cursors with iterator() hold long transactions causing lock contention
warningperformanceUpdated Mar 15, 2026(via Exa)
Technologies:
How to detect:
On PostgreSQL, .iterator() with chunk_size uses server-side cursors that require open transaction for entire lifetime. Long-running iterations (minutes) hold transactions open, causing lock contention and increased deadlock risk on high-write tables.
Recommended action:
Be aware of transaction duration when using .iterator() on high-write tables. Keep iteration duration short or process in smaller batches. Consider processing during low-activity windows. Monitor for lock wait events and deadlocks during large iterator-based operations.