Hey Nick, Thanks! Yep that’s an alternative (together with a uniqueness constraint and retry mechanism)
I guess what I’m trying to get my head around is whether and why this would be better than using advisory locks… Cheers Perryn On Thu, 14 Apr 2022 at 10:32 pm, Nick Cleaton <n...@cleaton.net> wrote: > On Thu, 14 Apr 2022 at 10:47, Steve Baldwin <steve.bald...@gmail.com> > wrote: > >> Ok, so you want to allow _other_ updates to a customer while this process >> is happening? In that case, advisory locks will probably work. The only >> consideration is that the 'id' is a bigint. If your customer id maps to >> that, great. If not (for example we use UUID's), you will need some way to >> convert that id to a bigint. >> > > Alternatively, create a new table that records the start timestamp of the > most recent run of your code block for each customer, and update that as > the first action in your transaction. Then row locks on that table will > protect you from concurrent runs. >