In Postgres 11 o successivo, considera una PROCEDURE
che consente il controllo delle transazioni. Vedi:
Con funzioni , non c'è modo . Le funzioni in Postgres sono atomiche (sempre all'interno di una transazione) e i blocchi vengono rilasciati al termine di una transazione.
Potresti essere in grado di aggirare questo problema con advisory serrature . Ma quelli non sono la stessa cosa. Tutte le transazioni concorrenti devono giocare insieme. L'accesso simultaneo che non è a conoscenza dei blocchi di avviso rovinerà la festa.
Esempio di codice su dba.SE:
Oppure potresti arrivare da qualche parte con transazioni autonome "cheating" con dblink:
- Come faccio a eseguire aggiornamenti non bloccanti di grandi dimensioni in PostgreSQL?
- Postgres supporta transazioni annidate o autonome?
Oppure rivaluta il tuo problema e lo suddividi in un paio di transazioni separate.