From: | Will Mortensen <will(at)extrahop(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Marco Slot <marco(dot)slot(at)gmail(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org, marco(at)citusdata(dot)com, Yvonne Chen <yvonne(at)extrahop(dot)com>, Jacob Speidel <jacob(at)extrahop(dot)com> |
Subject: | Re: Exposing the lock manager's WaitForLockers() to SQL |
Date: | 2023-09-04 06:16:52 |
Message-ID: | CAMpnoC738G5Yyf9=rb9nGBKbAOjYx_oex6zijOJW_0SQ6_BWRg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I realized that for our use case, we'd ideally wait for holders of
RowExclusiveLock only, and not e.g. VACUUM holding
ShareUpdateExclusiveLock. Waiting for lockers in a specific mode seems
possible by generalizing/duplicating WaitForLockersMultiple() and
GetLockConflicts(), but I'd love to have a sanity check before
attempting that. Also, I imagine those semantics might be too
different to make sense as part of the LOCK command.
Alternatively, I had originally been trying to use the pg_locks view,
which obviously provides flexibility in identifying existing lock
holders. But I couldn't find a way to wait for the locks to be
released / transactions to finish, and I was a little concerned about
the performance impact of selecting from it frequently when we only
care about a subset of the locks, although I didn't try to assess that
in our particular application.
In any case, I'm looking forward to hearing more feedback from
reviewers and potential users. :-)
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Kapila | 2023-09-04 06:21:14 | Re: pg_upgrade and logical replication |
Previous Message | Amit Kapila | 2023-09-04 05:48:24 | Re: Impact of checkpointer during pg_upgrade |