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