> I said:
> > ... But I don't
> > understand why having other backends running concurrently
> would affect
> > this.
>
> Yes I do: this entire path of control is only invoked if ExecReplace
> discovers that the tuple it's trying to update is already updated by
> a concurrent transaction. Evidently no one's tried running concurrent
> UPDATEs where the updates use a nestloop+inner indexscan join plan,
> because this path is certain to fail in that case.
>
> Magnus, try swapping the code segments in ExecIndexReScan()
<snip>
Looks much better - at least it doesn't crash. Instead, I the messages
below. I don't know if this is because of the same thing, though - since it
runs into areas I never reached before. But these messages do *not* show up
if I run with fewer backends (or when I run with the old code - crash).
//Magnus
NOTICE: Buffer Leak: [3205] (freeNext=-3, freePrev=-3,
relname=order_items_order_idx, blockNum=13532, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [3214] (freeNext=-3, freePrev=-3, relname=order_items,
blockNum=39804, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [5110] (freeNext=-3, freePrev=-3,
relname=order_items_order_idx, blockNum=29437, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [5117] (freeNext=-3, freePrev=-3, relname=order_items,
blockNum=86602, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [13184] (freeNext=-3, freePrev=-3,
relname=order_items_order_idx, blockNum=2115, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [13191] (freeNext=-3, freePrev=-3,
relname=order_items, blockNum=6214, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [4248] (freeNext=-3, freePrev=-3,
relname=order_items_order_idx, blockNum=29583, flags=0x4, refcount=1 1)
NOTICE: Buffer Leak: [4443] (freeNext=-3, freePrev=-3, relname=order_items,
blockNum=87032, flags=0x4, refcount=1 1)