Don, whether or not the query is executed, the rows have to be retrieved. If the rows are deleted, then the database must pull them from somewhere, as the rows identified at query "execution" haven't been retrieved at the
OPEN
. (Retrieval only happens at the
FETCH
.) The whole point of my original statement is that the database must either refuse the delete or invalidate the cursor if no versioning is supported. Oracle's implementation is a versioning one built around its use of rollback segments.
My final point here is that the behavior I've demonstrated is in fact only possible if a versioning database is used. I'm glad to hear that PG is doing versioning, albeit with a different (and possibly better) approach.