You can increase the timeout for the transaction where streaming happens:
Repo.transaction(fn -> ... end, timeout: some_huge_number)
You need to remember that LIMIT
+ OFFSET
pagination is prone to race conditions - it may happen that you’ll miss some rows or see rows that you shouldn’t. Database-level cursor gives a consistent view of data.