On 2018-03-08 14:25:59 -0500, Tom Lane wrote:
> Andres Freund <and...@anarazel.de> writes:
> > On March 8, 2018 10:46:53 AM PST, Tom Lane <t...@sss.pgh.pa.us> wrote:
> >> Breaking fundamental invariants like
> >> "ctid points to this tuple or its update successor" is going to cause
> >> trouble.  There's a lot of code that knows that; more than knows the
> >> details of what's in xmax, I believe.
> 
> > I don't think this is that big a problem. All code already needs to handle 
> > the case where ctid points to an aborted update tuple. Which might long 
> > have been replaced by as an independent role. That's why we have all this 
> > updated.xmax == new.xmin checks. Which will, without any changes, catch the 
> > proposed scheme, no?
> 
> No.  In those situations, the conclusion is that the current tuple is
> live, which is exactly the wrong conclusion for a cross-partition
> update.

I don't see the problem you're seeing here. Visibility decisions and
ctid chaining aren't really done in the same way. And in the cases we do
want different behaviour for updates that cross partition boundaries,
the patch adds the error messages. What I was trying to say is not that
we don't need to touch any of those paths, but that there's code to
handle bogus ctid values already. That really wasn't the case for
multixacts (in fact, they broke this check in multiple places).


> Or at least it might be the wrong conclusion ... I wonder how this patch
> works if the updating transaction aborted.

If the updated transaction aborted, HTSU will return
HeapTupleMayBeUpdated and we can just go ahead and allow an update?

Greetings,

Andres Freund

Reply via email to