Evite o top-posting.

Em 07-05-2013 15:29, [email protected] escreveu:
Trabalho com o seguinte cenário:  determinada quantidade de selos é
encomendada; quando os selos chegam, toda a sequência é gravada em uma
tabela no banco de dados.
Quando preciso de um selo, utilizo a função no início da montagem para
bloquear o selo (estado: 1-disponível 3-utilizado) até que o usuário
consiga terminar gravando.
Se o usuário desistir, é só dar o RollBack na transação que o selo
estará disponível novamente.
Se outro usuário precisar utilizar um selo do mesmo tipo, a função
retornará com o próximo número disponível.

Utilize SELECT... FOR UPDATE
Ele foi feito pra isso.

Uma outra transação concorrente vai conseguir "ler", fazer um SELECT simples na mesma linha, mas não vai conseguir fazer outro SELECT... FOR UPDATE.

Simples assim. Quando um SELECT... FOR UPDATE falhar, você tenta pegar outra linha.

[]s


__________________________________
Flavio Henrique A. Gurgel
Líder de Projetos Especiais
Consultoria, Projetos & Treinamentos 4LINUX
Tel1: +55-11.2125-4747 ou 2125-4748
www.4linux.com.br
email: [email protected]
______________________________
FREE SOFTWARE SOLUTIONS
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a