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

Responder a