DjangoPostgreSQL

Server-side cursors with iterator() hold long transactions causing lock contention

warning
performanceUpdated Mar 15, 2026(via Exa)
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.