mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +03:00
Reinstate HEAP_XMAX_LOCK_ONLY|HEAP_KEYS_UPDATED as allowed
Commit 866e24d47d
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
This commit is contained in:
@@ -49,12 +49,10 @@ RelationPutHeapTuple(Relation relation,
|
||||
|
||||
/*
|
||||
* Do not allow tuples with invalid combinations of hint bits to be placed
|
||||
* on a page. These combinations are detected as corruption by the
|
||||
* contrib/amcheck logic, so if you disable one or both of these
|
||||
* assertions, make corresponding changes there.
|
||||
* on a page. This combination is detected as corruption by the
|
||||
* contrib/amcheck logic, so if you disable this assertion, make
|
||||
* corresponding changes there.
|
||||
*/
|
||||
Assert(!((tuple->t_data->t_infomask & HEAP_XMAX_LOCK_ONLY) &&
|
||||
(tuple->t_data->t_infomask2 & HEAP_KEYS_UPDATED)));
|
||||
Assert(!((tuple->t_data->t_infomask & HEAP_XMAX_COMMITTED) &&
|
||||
(tuple->t_data->t_infomask & HEAP_XMAX_IS_MULTI)));
|
||||
|
||||
|
Reference in New Issue
Block a user