Re: updateable cursors & visibility - Mailing list pgsql-hackers

From Hiroshi Inoue
Subject Re: updateable cursors & visibility
Date
Msg-id 003901c2f895$5ac28bf0$0e283ddb@PbgX
Whole thread Raw
In response to Re: updateable cursors & visibility  (Hannu Krosing <hannu@tm.ee>)
List pgsql-hackers
> -----Original Message-----
> From: Hannu Krosing [mailto:hannu@tm.ee] 
> 
> Hiroshi Inoue kirjutas E, 31.03.2003 kell 19:08:
> > > -----Original Message-----
> > > From: Hannu Krosing [mailto:hannu@tm.ee] 
> > > 
> > > Hiroshi Inoue kirjutas E, 31.03.2003 kell 03:40:
> > > 
> > > > 2) dynamic
> > > >    It can detect any changes made to the membership, order,
> > > >    and values of the result set after the cursor is opened.
> > > 
> > > What would it mean in practice, i.e. if you are on the first 
> > > row in the
> > > cursor and then update tha ORDER BY field so that your 
> row becomes the
> > > last one, will the next FETCH move the cursor past end ?
> > 
> > No. The row next to the old first row would be FETCHed.
> 
> In what way would the _changes_made_to_the_order_ be reflected then ?

Once a rowset is fetched, the membership or order in the rowset is
fixed until the rowset is invalidated by another fetch operation and
the fetch operation is executed for the rowset.

> > > what happens, if the row you are on is removed from the 
> keyset, either
> > > by current or any other backend ?
> > 
> > The dynamic cursor doesn't see the row any longer.
> 
> It seems to be doable with MVCC - "just" ;) check for visibility of
> underlying tuples at each fetch. At least it does not seem any harder
> for MVCC than for other CC methods.

MVCC has no particular advantage at this point anyway. 
> > > > 3) keyset-driven
> > > >    It always detects changes to the values of rows.
> > > 
> > > What about _new_ rows, 
> > 
> > It never detects new rows. 
> 
> Then I must have misunderstood the "can detect any changes made to the
> membership, order, and values" part. I assumed that "any changes" wold
> also include rows that magically become part of the query by either
> changes in values or being inserted.

It's a spec of dynamic cursors not of keyset-driven ones.
> > > or rows that no more belong to the "keyset" ?
> > 
> > They are the same as deleted ones. 
> 
> So they are no more visible to cursor ?

Yes.
regards,
Hiroshi Inoue



pgsql-hackers by date:

Previous
From: mlw
Date:
Subject: contrib and licensing
Next
From: "Merlin Moncure"
Date:
Subject: Re: Dangling backends on win32 7.2.1 port (peerdirect).