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
