Use TransactionXmin instead of RecentGlobalXmin in heap_abort_speculative().
authorAndres Freund <andres@anarazel.de>
Mon, 6 Apr 2020 00:47:30 +0000 (17:47 -0700)
committerAndres Freund <andres@anarazel.de>
Mon, 6 Apr 2020 00:47:30 +0000 (17:47 -0700)
commitf946069e6827e729857b9f2db06bf27a1c0563ee
treed471b3f3d83d1863864d50a01ab739a4db6023fe
parent549a3e23c3d618103487161b19dbbf8fd2206a5c
Use TransactionXmin instead of RecentGlobalXmin in heap_abort_speculative().

There's a very low risk that RecentGlobalXmin could be far enough in
the past to be older than relfrozenxid, or even wrapped
around. Luckily the consequences of that having happened wouldn't be
too bad - the page wouldn't be pruned for a while.

Avoid that risk by using TransactionXmin instead. As that's announced
via MyPgXact->xmin, it is protected against wrapping around (see code
comments for details around relfrozenxid).

Author: Andres Freund
Discussion: https://postgr.es/m/20200328213023.s4eyijhdosuc4vcj@alap3.anarazel.de
Backpatch: 9.5-
src/backend/access/heap/heapam.c