sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL obtiene y libera LOCK dentro de la función almacenada

En Postgres 11 o posterior, considere un PROCEDURE que permite el control de transacciones. Ver:

Con funciones , no hay de ninguna manera . Las funciones en Postgres son atómicas (siempre dentro de una transacción) y los bloqueos se liberan al final de una transacción.

Es posible que pueda solucionar esto con advisor cerraduras . Pero esos no son lo mismo. Todas las transacciones que compiten tienen que seguir el juego. El acceso simultáneo que no tenga en cuenta los bloqueos de advertencia estropeará la fiesta.

Ejemplo de código en dba.SE:

O puede llegar a algún lugar con transacciones autónomas "tramposas" con dblink:

O vuelve a evaluar su problema y lo divide en un par de transacciones separadas.