>> Aí precisamos saber qual é a idéia desse lock. Por que você faz esse
>> lock. Qual a necessidade de sua aplicação fazer isso.
>
>
> O cenario é o seguinte: varios clientes enviam informações a serem
> processadas e inserem na tabela tb_processamento_tmp.
> Varios outros clientes consomem os dados dessa tabela. porém o mesmo dado
> não pode ser consumido por mais de um cliente.
> Por isso faço o seguinte:
> bloqueio a tb_processamento_tmp para os demais clientes,
> retorno um set de registros que não estão em processamento para o cliente
> que solicitou primeiro,
> marco esses registros retornados como "em processamento",
> libero a tabela para a proxima requisicao.

Tente fazer lock só nos registros que precisar.

> Mas isso esta errado. Pois ao dar um lock nessa tabela eu fecho a entrada de
> registros.
> O que eu queria bloquear era apenas a requisição para processamento.

Para bloquear registros específicos, use SELECT.... FOR UPDATE.
Os registros ficarão bloqueados para modificação até o COMMIT ou
ROLLBACK da transação.
A limpeza automática não é abortada neste caso, ela apenas pulará os
registros afetados e os tratará na próxima execução.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a