On Wed, Nov 9, 2011 at 9:48 PM, simon <si...@2ndquadrant.com> wrote: > On Wed, Nov 9, 2011 at 9:12 PM, Robert Haas <robertmh...@gmail.com> wrote: > >> Well, I'm not sure of the details of how page-at-a-time mode works for >> seq scans, but I am absolutely 100% sure that you can reproduce this >> problem using a cursor over a sequential scan. Just do this: >> >> create table test (a text); >> insert into test values ('aaa'), ('bbb'); >> delete from test where a = 'aaa'; >> begin; >> declare x cursor for select * from test; >> fetch next from x; > > That's a bug.
No, I'm wrong. It's not a bug at all. heapgetpage() gets a page and a pin, but holds the pin until it reads the next page. Wow! That is both annoying and very dumb. It should hold the pin long enough to copy the data and then release the pin. It looks inefficient from a memory access viewpoint and from a pin longevity viewpoint. If we copied out relevant data it would be more cache efficient without affecting visibility. Looking at a patch. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers