On Fri, Apr 17, 2015 at 1:30 AM, Andres Freund <and...@anarazel.de> wrote: >> However, like my second approach, there would be a "speculative >> affirmation" WAL record. > > I think there should be one, but it's not required for the approach. The > 'pending speculative insertion' can just be completed whenever there's a > insert/update/delete that's not a super deletion. > > I.e. in the REORDER_BUFFER_CHANGE_INSERT/... case ReorderBufferCommit() > just add something like: > > if (pending_insertion != NULL) > { > if (new_record_is_super_deletion) > ReorderBufferReturnTupleBuf(pending_insertion); > else > rb->apply_change(rb, txn, relation, pending_insertion); > } > ... > > You'll have to be careful to store the pending_insertion *after* > ReorderBufferToastReplace(), but that should not be a problem.
Okay. It seems like what you're saying is that I should be prepared to have to deal with a REORDER_BUFFER_CHANGE_INTERNAL_SNAPSHOT change (or multiple such changes) from within ReorderBufferCommit() between a speculative insertion and a super deletion, but that I can safely assume that once some other insert/update/delete is encountered (or once all changes have been drained from the reorder buffer), I can then apply the speculative insertion as a regular insertion. Is that what you're saying, in a nutshell? IOW, when you said this: """ I earlier thought that'd not be ok because there could be a new catalog snapshot inbetween, but I was mistaken: The locking on the source transaction prevents problems. """ What you meant was that you'd decided that this pattern is not broken, *provided* that the implementation simply account for the fact that a REORDER_BUFFER_CHANGE_INTERNAL_SNAPSHOT change could come before some other (non-REORDER_BUFFER_CHANGE_INTERNAL_DELETE, A.K.A. non-superdelete) change came? And that we might need to be more "patient" about deciding that a speculative insertion succeeded (more "patient" than considering only one single non-superdelete change, that can be anything else)? -- Peter Geoghegan -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers