[... encaminhando para lista ...] Em Ter, 2013-05-07 às 11:41 -0300, izaque Maciel escreveu: Bem pessoal, me desculpe na demora do retorno de suas respostas. > Vou tentar expor o problema, que é de concorrência mesmo. Talvez nem seja necessário bloquear o registro ou a tabela. Vamos lá: > > > Estou implementando um sistema, onde a pessoa vai adquirir uma determinada remessa de selos, onde a contagem > inicia-se de 0 .. 999, por exemplo. > Isso ocorre para uma determinada categoria de selo, que vai de 1 até 150 e pode crescer, então > pra cada uma dessas categorias, quando adquiro essas remessas, sempre se inicia de 0. Logo a sequence não ajudaria aqui.
Você conseguiria exercitar em sua aplicação o uso de sequences e obter
este valor usando algo como: nexval('nome_sequence') - 1 ?
> O problema é que não sei como posso garantir, em questão de
performance e concorrência, que se dois usuários ou mais, ao mesmo tempo
requisitem o próximo número de uma determinada categoria, obtenham o
mesmo registro. Caso obtenham o mesmo registro, irá
> gerar uma violação de chave primária, onde guardo as numerações já
utilizadas, pois mesmo que eu faça a requisição e imediatamente
> atualizo aquele número como utilizado, não há como saber se outro
usuário também o requisitou, porque somente posso atualizá-lo após os
devidos Inserts e relacionamento com outras tabelas.
+1 para o uso de sequences.
> Em fim, tudo isso se resume que preciso que o segundo usuário aguarde
toda a requisição/atualização do primeiro usuário.
>
>
> 1º Usuário seleciona
>
>
> select ..
> inserts..
> update..
>
>
> 2º Usuário fica aguardando tudo isso acima terminar, para que o select
dele seja executado, depois do acima efetuado então a mesma coisa para
este:
>
>
> select ..
> inserts..
> update..
>
>
> Me desculpem por não ter explica melhor, me embaracei.
--
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
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
