Em Ter, 2013-05-07 às 08:33 -0300, izaque Maciel escreveu:
> É o seguinte, é um sistema onde será requisitado a todo momento uma
> sequência numérica, e tenho que garantir que dois usuários do sistema não
> peguem o mesmo registro, ele deve aguardar que o registro selecionado
> anteriormente seja utilizado ou desbloqueado pela seleção anterior, sendo
> que, se num select utilizei o registro 7, então o outro usuário que fizer
> um select só poderá pegar a 8, ou a 7 se ela já foi desbloqueada e não
> utilizada. Utilizarei para um sistema de controle de selo, então, nunca
> dois usuários podem utilizar o mesmo selo, um problema de concorrência.
> Como expliquei na primeira mensagem, no Firebird fazia com "With lock" e
> então o select de outro usuário aguardava o usuário utilizar o registro
> selecionado anteriormente ou devolver o registro selecionado. Como abaixo:
> 
> SELECT FIRST 1 * FROM DOCUMENT WHERE STATUS = 'N' AND PARENT_ID = 55
> FOR UPDATE WITH LOCK


O seu problema é por conta da visualização mesmo? Ou seria porque depois
da aplicação obter este registro ele sofre uma alteração e depois "volta
para o banco" na forma de um UPDATE? Se for algo neste sentido você pode
mudar o nível de isolamento [1] ou aplicar uma estratégia mais
performática.

O Postgres já foi assim no passado antes de implementar o MVCC, modelo
este que permite concorrência e performance, e que cuida de boa parte
dos problemas de bloqueio para você.

Não estou dizendo que você esteja errado na sua estratégia, só ainda não
estou conseguindo entender o problema por completo de forma que talvez o
que você precise seja algo que o Postgres possa fazer para você
facilmente de outra maneira, entretanto  dentro do escopo que temos do
seu problema não conseguimos ainda identificar que outra abordagem seria
esta.

Veja, o caso dos SELECT FOR SHARE funcionariam se todos os aplicativos
que conectam neste banco usassem-no, o que pode não ser a realidade do
seu ambiente.

Talvez precisamos de mais dados.


[1] http://www.postgresql.org/docs/9.2/static/transaction-iso.html

[]s
-- 
Dickson S. Guedes
mail/xmpp: [email protected] - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
http://www.rnp.br/keyserver/pks/lookup?search=0x8F3E3C06D428D10A

Attachment: signature.asc
Description: This is a digitally signed message part

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

Responder a