Thread: AccessExclusiveLock with pg_locks.locktype of tuple

AccessExclusiveLock with pg_locks.locktype of tuple

From
Erik Jones
Date:
Greetings,

I've seen locks with mode of AccessExclusiveLock and locktype of tuple a few times now but have never been able to reproduce one nor had a chance to dig into them and now have a couple questions on them:

* When is this kind of heavy lock on a row/tuple taken out?  I've done some code spelunking but have yet to find anything.
* An AccessExcluciveLock on a tuple should only block all other access to the given tuple, yes?  It won't block access at the table level?  I ask since the manual only discusses AccessExclusiveLocks in the context of table level locking.

The only thing I've found so far on them is this old pgsql-general thread wherein Tom Lane essentially just says, "Yeah, it can happen and is an implementation detail that can change from version to version."  That was on 9.4.x and the my most recent confirmed sighting was on a server running 11.3.

--

Re: AccessExclusiveLock with pg_locks.locktype of tuple

From
Tom Lane
Date:
Erik Jones <mage2k@gmail.com> writes:
> I've seen locks with mode of AccessExclusiveLock and locktype of tuple a
> few times now but have never been able to reproduce one nor had a chance to
> dig into them and now have a couple questions on them:
> * When is this kind of heavy lock on a row/tuple taken out?  I've done some
> code spelunking but have yet to find anything.

It's a transient state while waiting to acquire a "normal" tuple lock,
that is one recorded in the tuple header.  The explanation can be found
in src/backend/access/heap/README.tuplock, and the relevant code is
mostly in heap_lock_tuple().

            regards, tom lane