Olá Flávio, era isso que ia perguntar pro Marcelo agora, se mesmo antes do
update do registro encontrado, se outra transação concorrente iria
conseguir ler o mesmo registro. Por favor, me explique melhor sobre o
SELECT .. FOR UPDATE.

Quando você diz "Quando um SELECT... FOR UPDATE falhar, você tenta pegar
outra linha", eu tenho que programar isso dentro de uma *function* ou o
banco fará isso *automaticamente*? Há uma maneira de checar por exemplo na
cláusula Where, que não traga a linha que já está com SELECT FOR UPDATE?


Em 7 de maio de 2013 15:33, Flavio Henrique Araque Gurgel <
[email protected]> escreveu:

> 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].**org.br<[email protected]>
> https://listas.postgresql.org.**br/cgi-bin/mailman/listinfo/**pgbr-geral<https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a