Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 28f4b61

Browse files
committed
Reinstate HEAP_XMAX_LOCK_ONLY|HEAP_KEYS_UPDATED as allowed
Commit 866e24d47db1 added an assert that HEAP_XMAX_LOCK_ONLY and HEAP_KEYS_UPDATED cannot appear together, on the faulty assumption that the latter necessarily referred to an update and not a tuple lock; but that's wrong, because SELECT FOR UPDATE can use precisely that combination, as evidenced by the amcheck test case added here. Remove the Assert(), and also patch amcheck's verify_heapam.c to not complain if the combination is found. Also, out of overabundance of caution, update (across all branches) README.tuplock to be more explicit about this. Author: Julien Rouhaud <rjuju123@gmail.com> Reviewed-by: Mahendra Singh Thalor <mahi6run@gmail.com> Reviewed-by: Dilip Kumar <dilipbalaut@gmail.com> Discussion: https://postgr.es/m/20210124061758.GA11756@nol
1 parent 186f616 commit 28f4b61

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/backend/access/heap/README.tuplock

+4-3
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,10 @@ The following infomask bits are applicable:
146146
FOR UPDATE; this is implemented by the HEAP_KEYS_UPDATED bit.
147147

148148
- HEAP_KEYS_UPDATED
149-
This bit lives in t_infomask2. If set, indicates that the XMAX updated
150-
this tuple and changed the key values, or it deleted the tuple.
151-
It's set regardless of whether the XMAX is a TransactionId or a MultiXactId.
149+
This bit lives in t_infomask2. If set, indicates that the operation(s) done
150+
by the XMAX compromise the tuple key, such as a SELECT FOR UPDATE, an UPDATE
151+
that modifies the columns of the key, or a DELETE. It's set regardless of
152+
whether the XMAX is a TransactionId or a MultiXactId.
152153

153154
We currently never set the HEAP_XMAX_COMMITTED when the HEAP_XMAX_IS_MULTI bit
154155
is set.

0 commit comments

Comments
 (0)