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.

Marcelo Melim
From: izaque Maciel 
Sent: Tuesday, May 07, 2013 2:29 PM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral] Select with lock.

Bom Dickson, você me perguntou anteriormente sobre:

Uma questão importante... essa sua numeração de selos pode haver falhas??? Se 
não tiver problemas que vc tenha numerações desse tipo: 1, 2, 4, 7, 9, 10, 11, 
15... então vc pode usar sequences [1]

A sequense garante um nº único.
Mas infelizmente não dá pra usar a sequense, seria algo como isso, mas não é um 
"incremento", o nº de selo se repete todas as
vezes que adquiro uma nova remessa de uma determinada categoria, a cada remessa 
inicia de zero. Não é algo como "eu" gere o próximo número, mas sim eu cadastro 
esta numeração na base de dados.

É algo mais ou menos como o Marcelo me enviou em anexo, uma function que busca 
o selo e já o atualiza para situação 3, que deve ser como utilizado.
Assim como o Marcelo utiliza, eu imaginei em fazer antes de postar na lista. 
Mas a minha dúvida é que se eu utilizar a function, e passar todos os meus 
parâmetros para que ela faça todos os inserts e atualizações necessárias, mesmo 
assim, não vai haver o problema de concorrência? O meu problema é somente que 2 
ou mais usuários de sessões diferentes não utilizem um mesmo número, porque ai,
o primeiro que conseguir utilizar o nº (Inserts, updates) tudo certo, mas o 
segundo obterá um erro de violação de chaves únicas/primárias no momento dos 
inserts e updates.



2013/5/7 Dickson S. Guedes <lis...@guedesoft.net>

  Em Ter, 2013-05-07 às 13:39 -0300, eu escrevi:

  > Você conseguiria exercitar em sua aplicação o uso de sequences e obter
  > este valor usando algo como: nexval('nome_sequence') - 1  ?



  Oops o correto seria : nextval




--------------------------------------------------------------------------------
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a