Hash index searches acquire predicate locks on the primary page of a bucket. It acquires a lock on both the old and new buckets for scans that happen concurrently with page splits. During a bucket split, a predicate lock is copied from the primary page of an old bucket to the primary page of a new bucket.
Author: Shubham Barai, Amit Kapila Reviewed by: Amit Kapila, Alexander Korotkov, Thomas Munro Discussion: https://www.postgresql.org/message-id/flat/CALxAEPvNsM2GTiXdRgaaZ1Pjd1bs+sxfFsf7Ytr+iq+5JJoYXA@mail.gmail.com
b508a56f2f Predicate locking in hash indexes.
src/backend/access/hash/hash.c | 2 +-
src/backend/access/hash/hashinsert.c | 3 +
src/backend/access/hash/hashpage.c | 6 +
src/backend/access/hash/hashsearch.c | 3 +
src/backend/storage/lmgr/README-SSI | 7 +
src/test/isolation/expected/predicate-hash.out | 659 +++++++++++++++++++++++++
src/test/isolation/isolation_schedule | 1 +
src/test/isolation/specs/predicate-hash.spec | 122 +++++
8 files changed, 802 insertions(+), 1 deletion(-)