having the iterator use a different connection insures that during iteration we can start and stop independent transactions.  The iterator needs the cursor to stay alive during the entire run of the iterator.  if an action is taken on the same connection with in the scope of the iterator, then any commits or rollbacks will break the cursor.  Further, even if we refrain from commiting or rollingback from within the scope of the cursor, that is too long to hold a single transaction open.  Making the iterator use its own connection insures that write transaction within the scope of the iterator are short and guaranteed to be properly closed