Simon Riggs <simon@2ndquadrant.com> writes:
> So do you see a problem scenario like this?
> A, B and C separate backends:
> A1 Reads page, some row versions are *not* marked LP_DELETE but will be
> later when A2 happens
> B1 VACUUM removes dead rows, just happens to be all of them
> B2 Recycles page into FSM
> C1 Inserts new data into old page
> A2 Attempts to update old page to notify about dead rows (UGH!)
Can't happen; a page cannot be recycled until all concurrent
transactions are gone. In any case, the LP_DELETE marking code will
certainly take care to check that the entries it's trying to mark
are still the same ones it meant to mark.
regards, tom lane