PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL ottiene e rilascia LOCK all'interno della funzione memorizzata

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:

Oppure rivaluta il tuo problema e lo suddividi in un paio di transazioni separate.