public inbox for [email protected]  
help / color / mirror / Atom feed
From: Nico Heller <[email protected]>
To: Greg Sabino Mullane <[email protected]>
Cc: [email protected]
Subject: Re: Guarantee order of batched pg_advisory_xact_lock
Date: Wed, 18 Feb 2026 21:19:36 +0000
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAKAnmmJoX=KJyH2g8tWtbSoqJp7nnyeBChaLgF6bbGv1zGLzwg@mail.gmail.com>
References: <[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>
	<CAKAnmmJoX=KJyH2g8tWtbSoqJp7nnyeBChaLgF6bbGv1zGLzwg@mail.gmail.com>


On 2/17/26 15:55, Greg Sabino Mullane wrote:
> On Mon, Feb 16, 2026 at 12:45 PM Nico Heller <[email protected]> 
> wrote:
>
>     Does anyone have any idea what the root cause of my issue is? I
>     appreciate any insight.
>     As I said, hash collisions can be rules out, sadly.
>
>
> Well, you could set log_statement to 'all' for a bit to see *exactly* 
> what each of the deadlocking processes are doing. Alternatively, 
> perhaps you can write a hashextendedkey() function that outputs 
> arguments and results to a log and/or a table.
I will give that a shot, thank you
>
>     keysToLock is a text[] parameter which is pre-sorted in our
>     application
>
>
> Would not hurt to triple-check this part as well. Could show us the 
> app code? Maybe put in some sort of global assert in the app to verify 
> that things are indeed sorted as you think they are.
I am 100% sure this is the case, as the code base isn't huge and we have 
central component which is *always* used to acquire advisory locks.
It looks as follows, in pseudo Kotlin code:

class LockingRepository(val sqlClient: SqlClient) {

     @Transactional(propagation = MANDATORY) // enforces a transaction 
is already active, using pg_advisory_xact_lock is senseless otherwise
     fun acquireLocks(keys: List<String>) = 
sqlClient.query(<QUERY_HERE>).param(:keys, sort(keys)).execute()

     private fun sort(keys: List<String>) = keys.sort() // as I said, 
it's sorted in some arbitrary way

}
>
> Cheers,
> Greg
>
> --
> Crunchy Data - https://www.crunchydata.com
> Enterprise Postgres Software Products & Tech Support
>

view thread (6+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Guarantee order of batched pg_advisory_xact_lock
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox