Marc Munro <marc@bloodnok.com> writes:
> Yes in this case, T1 must abort because the record it was going to
> update has disappeared from underneath it. I don't see how this is
> significantly different from the same race for the record if the table
> had no RI constraints. The only difference that I can see, is that T1
> now has some locks that it must relinquish as the transaction aborts.
No, the difference is there would have been no error at all before;
if the record were deleted before T1 got to it then it wouldn't have
attempted to update it. I really don't think you can make it work
to perform updates or deletes on a record you have not yet locked.
regards, tom lane