Tendi.. é que no MySQL não ocorre esse problema. Ele primeiro executa a query para posteriormente reservar um id para essa query. E também faz automáticamente o que citei do sequenciamento por grupos, onde no próprio manual diz que internamente o MySQL faz um MAX(campo) +1, o que daria perfeitamente para criar uma procedure se for o caso, no postgresql.
Mas tudo bem, o que citei do 'buraco' da sequence foi apenas de curiosidade mesmo, de repente havia alguma maneira nativa do banco de dados que tivesse me escapado ao ler o manual. Mas nada que irá influenciar drásticamente no meu projeto. Infelizmente o problema que citei com meses/dias é outra situação, mas que foi bem representada dessa maneira, e também não terei problemas com transações concorrentes pois apenas 1 processo (garantido) executará a query que me dê um 'novo mês', sendo assim posso implementar uma procedure que faça o mesmo que o MySQL... MAX(campo) + 1. Obrigado à todos que responderam pois me ajudaram bastante na compreensão do que é uma sequence, quando usar etc. Abraços, Marcus Fernandez On 7/31/07, Pablo Sánchez <[EMAIL PROTECTED]> wrote: > > Segue > > Em 31/07/07, Marcus Fernandez<[EMAIL PROTECTED]> escreveu: > > Boa tarde, > > > > Sempre trabalhei com MySQL, porém tive Oracle na faculdade e gostei > muito. > > E, ao meu ver, o único banco livre semelhante ao Oracle, no momento, é o > > PostgreSQL. Devido à isso, decidi utiliza-lo no meu TCC e pretendo > continuar > > utilizando em outros projetos também. > > > > Estive estudando sobre sequence e não consegui obter informações a > respeito > > de uma dúvida e ao testar a sequence, me gerou outra: > > > > 1) Ao fazer um teste de INSERT em uma tabela2 possuindo referência a um > > campo da tabela1 e, tendo na tabela 2 um campo sequence e, este INSERT > > incluir um dado não existente na tabela um, houve um erro de > relacionamento, > > o que era esperado. No entanto ao fazer um INSERT correto, pude > verificar > > que a sequência de números foi pulada, ou seja, foi gerado um id para > uma > > query com erro. > > > > Sei que os dados devem ser verificados na aplicação para que não ocorra > erro > > algum nas queries, no entanto seria prudente que não fosse gerado um id > para > > uma query inválida, caso isso venha a ocorrer. > > O que acontece é que a transação reserva aquele número para aquela > query, que, no caso de dar erro, é desfeita, mas o sequenciador já foi > incrementado. Se outra transação em paralelo ocorrer com sucesso e eu > decrementar posteriormente, qual seria o problema? Eu acabaria por > reliberar uma sequencia que está sendo utilizada, o que me causaria > posteriormente um erro em relação à inserção, pois o campo deve, em > tese, ser unique. Como isso não causa nenhum dano nas aplicações e é > até mesmo perigoso fazê-lo, não há um decremento do sequenciador. Isso > ocorre com qualquer SGDB transacional. Tive as mesmas questões > aparecendo com bancos SQL Server e Oracle. > > > 2) Supondo que eu tenha um conjunto de dados dependente de outro, tal > como > > meses em um ano, como é possível gerar uma sequence para meses > respeitando o > > grupo ano? > > Ano | Mes (auto incrementável) > > 2007 | 01 > > 2007 | 02 > > 2007 | 03 > > ................ > > 2008 | 01 > > ? Viajei nessa. > _______________________________________________ > pgbr-geral mailing list > [email protected] > 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
