> > >> I assume this is not possible in 7.1? > > > > > >Just looked in heapam.c - I can fix it in two hours. > > >The question is - should we do this now? > > >Comments? > > > > It's a bug; how confident are you of the fix? 95% -:) > I doubt if it's a bug of SELECT. Well what > 'concurrent UPDATE then SELECT FOR UPDATE + > SELECT' return ? I'm going to add additional check to heapgettup and heap_fetch: HeapTupleSatisfies(T) is TRUE: IF XactIsoLevel is READ_COMMITTED and snapshot != SnapshotDirty and !(T->t_data->t_infomask & HEAP_XMAX_INVALID) and T->t_data->t_infomask & HEAP_XMAX_COMMITTED and T->t_self != T->t_data->t_ctid { FOR ( ; ; ) { fetch tuple->t_data->t_ctid tuple IF t_infomask & (HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE) break; -- and return T IF t_infomask & HEAP_XMAX_COMMITTED { IF t_self != ctid -- updated continue; break; -- deleted, return T } -- uncommitted update/delete IF t_xmax != CurrentTransactionID break; -- and return T -- changed by current TX! IF changed *BEFORE* this query began { -- DELETE + SELECT: nothing to return -- UPDATE + SELECT: newer tuple version -- will be/was returned by query return NULL; } continue; } } Vadim ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/users-lounge/docs/faq.html

Reply via email to