From: Alvaro Herrera Date: Tue, 23 Feb 2021 20:30:21 +0000 (-0300) Subject: Reinstate HEAP_XMAX_LOCK_ONLY|HEAP_KEYS_UPDATED as allowed X-Git-Tag: REL9_6_22~45 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=0ccebe779dc0ed1c5f37370f2d5bc59779cf9073;p=postgresql.git 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 Reviewed-by: Mahendra Singh Thalor Reviewed-by: Dilip Kumar Discussion: https://postgr.es/m/20210124061758.GA11756@nol --- diff --git a/src/backend/access/heap/README.tuplock b/src/backend/access/heap/README.tuplock index 9674d0c0f07..dbd446a0d09 100644 --- a/src/backend/access/heap/README.tuplock +++ b/src/backend/access/heap/README.tuplock @@ -146,9 +146,10 @@ The following infomask bits are applicable: FOR UPDATE; this is implemented by the HEAP_KEYS_UPDATED bit. - HEAP_KEYS_UPDATED - This bit lives in t_infomask2. If set, indicates that the XMAX updated - this tuple and changed the key values, or it deleted the tuple. - It's set regardless of whether the XMAX is a TransactionId or a MultiXactId. + This bit lives in t_infomask2. If set, indicates that the operation(s) done + by the XMAX compromise the tuple key, such as a SELECT FOR UPDATE, an UPDATE + that modifies the columns of the key, or a DELETE. It's set regardless of + whether the XMAX is a TransactionId or a MultiXactId. We currently never set the HEAP_XMAX_COMMITTED when the HEAP_XMAX_IS_MULTI bit is set.