On Wed, Dec 14, 2011 at 6:58 AM, Greg Stark <st...@mit.edu> wrote: > On Mon, Nov 21, 2011 at 6:43 PM, Robert Haas <robertmh...@gmail.com> wrote: >> In buffer fill mode, we scan the index and add matching tuples and >> their CTIDs to the buffer. When the buffer is full or the index AM >> reports that there are no more tuples in the scan, we switch to buffer >> drain mode. > > Instead you could do the two phases concurrently the way tuplesort > implements the tapesort from Knuth. You keep a heap of ctids with an > epoch. You fill the heap then you return the first one. Whenever you > return one you read the next one and add it to the heap. If it falls > before the last returned value you insert it with the next epoch but > if it falls afterwards you can insert it into the heap in its correct > position.
Yeah, that's pretty much what I was imagining, although my explanation of it was slightly muddled. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers