[Resolvido]Sequence Postgres

Boa noite pessoal,
estou com um problema em relação ao banco de dados postgres.
Tenho uma tabela categoria que possui 2 campos (id (primary key) SERIAL e categoria VARCHAR(30) )
como o id é SERIAL, o postgres já criou a sequencia tudo certinho.

o problema é o seguinte…
executo um insert, e um commit, e ele insere na base (id = 1)
executo outro insert, e realizo um rollback, (o id=2 foi inserido, mas foi excluído, por causa do rollback)
quando realizo outro insert, e commit(o id fica = 3)
ou seja, quando o rollback é executado, a sequencia não volta atras.

Seria possivel mudar esse esquema?

Obrigado a todos,

Isso é padrão do banco, não tem como mudar, oq vc pode mudar é quanto ela vai incrementar (de um em um, dois em dois).

Você pode usar isso para pegar o valor corrente da sequence:


SELECT currval('nome_da_sequencia');

mas eu não aconselho pq se tiver dois usuários tentando fazer insert ao mesmo tempo, vão os dois insert pro banco com o mesmo id.

Isso dos números não ficarem na sequencia no banco é normal quando se trabalha com sequence.

Espero ter ajudado!

flw!

[quote=duduribeiro]Boa noite pessoal,
estou com um problema em relação ao banco de dados postgres.
Tenho uma tabela categoria que possui 2 campos (id (primary key) SERIAL e categoria VARCHAR(30) )
como o id é SERIAL, o postgres já criou a sequencia tudo certinho.

o problema é o seguinte…
executo um insert, e um commit, e ele insere na base (id = 1)
executo outro insert, e realizo um rollback, (o id=2 foi inserido, mas foi excluído, por causa do rollback)
quando realizo outro insert, e commit(o id fica = 3)
ou seja, quando o rollback é executado, a sequencia não volta atras.

Seria possivel mudar esse esquema?

Obrigado a todos,[/quote]

Hmmm,e qual seria o problema nisso? :smiley:

Isso realmente não influencia em nada. É bobagem se preocupar com isso.
O que acontece no banco é que quando usa SEQUENCE ele cria um cache para agilizar criações de múltiplos objetos na mesma transação.
Quando a transação é abortada, todos os valores do cache serão perdidos.

Conforme a documentação do postgreSql

[quote]cache
The optional clause CACHE cache specifies how many sequence numbers are to be preallocated and stored in memory for faster access. The minimum value is 1 (only one value can be generated at a time, i.e., no cache), and this is also the default.[/quote]

O que pode fazer é usar a opção NO_CACHE quando criar a SEQUENCE, mas isso vai deixar as transações mais lentas.

vlw pessoal…
vou deixar assim mesmo então rsrs

[]'s