On 7/31/07, Marcus Fernandez <[EMAIL PROTECTED]> wrote:
>
>
>
> 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.


Se eu entendi o que estas dizendo, voce estava esperando que o incremento da
sequencia fosse abortado quando houve erro.

Seria interessante, mas sequencias do PostgreSQL nao trabalham assim, a meu
ver por que seria complicacao demais para beneficio de menos.

Sequencias sao atomicas. Uma vez incrementadas, a sequencia nao volta atras,
a nao ser que voce mesmo "resete" a sequencia.

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
>

Sequencias nao foram desenhadas com esse tipo de aplicacao em mente. Elas
foram desenhadas para serem numeros incrementados atomicamente. So' isso.
Quaisquer outro significado que quiseres atarrachar numa sequence, tens que
fazer no teu codigo, atraves do cliente ou funcoes em procedimentos
armazenados numa das linguagens suportadas no PostgreSQL.

As funcoes de manipulacoes de data do PostgreSQL fazem aritimetica com
datas, a proposito.

-Roberto
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a