PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL obtém e libera LOCK dentro da função armazenada


No Postgres 11 ou posterior, considere um PROCEDURE que permite o controle de transações. Ver:

Com funções , não há nenhuma maneira . As funções no Postgres são atômicas (sempre dentro de uma transação) e os bloqueios são liberados no final de uma transação.

Você pode contornar isso com consultivo bloqueios . Mas esses não são a mesma coisa. Todas as transações concorrentes têm que jogar junto. O acesso simultâneo que não está ciente dos bloqueios de aviso estragará a festa.

Exemplo de código em dba.SE:

Ou você pode chegar a algum lugar com transações autônomas "enganando" com dblink:

Ou você reavalia seu problema e o divide em algumas transações separadas.