David Johnston wrote > Your original examples only create the cursor and do not actually use it. > You should be comparing how long it takes both examples to fetch the first > 10 pages of records to get a meaningful comparison. It won't matter if > the DECLARE only takes 3ms in the non-hold case if retrieving the first > page of records take 2s. Certainly - *close all; begin; declare mycursor cursor for select * from z order by name; fetch 10 from mycursor; commit; * - takes 3 ms all. Each *fetch 10 from mycursor* takes 1-2 ms. So this is perfectly optimized in transaction. And I wonder why isn't it optimized for a whole session. -- View this message in context: http://postgresql.1045698.n5.nabble.com/How-to-create-a-cursor-that-is-independent-of-transactions-and-doesn-t-calculated-when-created-tp5762401p5762592.html Sent from the PostgreSQL - general mailing list archive at Nabble.com. -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general