Fórum Como ajustar a sequencia via sql? #27050
10/03/2009
0
Ex. sequence
START 10, mas o campo da tabela com o maior código está com 15, logo precisaria que a sequence fosse ajustada para 15.
Agradeço antecipadamente, visto que há mais 400 tabelas a ajustar.
Emir Neto
Curtir tópico
+ 0Posts
25/03/2009
Jcvpalma
blz, :)
Cara, tem duas formas de fazer isso:
1. Criar um trigger before que manipula a sequence conforme insere o MAX value da tabela.
[url]http://www.postgresql.org/docs/8.3/static/sql-createtrigger.html[/url]
2. Ou você usar um tipo SERIAL, no lugar de uma sequence.
Dê uma olhada na documentação do PostgreSQL
[url]http://www.postgresql.org/docs/8.1/interactive/datatype.html#DATATYPE-SERIAL[/url]
Teste ae, qq coisa posta o resultado.
[]´s
:wink:
Gostei + 0
26/03/2009
Emir Neto
Gostei + 0
26/03/2009
Jcvpalma
blz
Agora entendi, na verdade está acontecendo o contrário da primeira explicação, você não quer controlar a sequence, você quer corrigir os IDs,
Bom, realmente você terá que criar uma função recursiva que vai fazer assim:
Pegar o Valor do ID atual
Incrementar +2 (8>10)
e atualizar o ID em questão
e passar para o proximo registro fazendo a mesma coisa.
Você manja de Cursores e tabela temporaria, seria a forma mais rápida de fazer, vou montar um exemplo e posto aqui.
:wink:
blz
Gostei + 0
26/03/2009
Emir Neto
Gostei + 0
26/03/2009
Jcvpalma
(Lembre-se Backup, sempre...!)
Você remove a sequence:
DROP sequence <NOME> cascade;
Corrige os IDs utilizando CURSOR ou qualquer outra forma que use.
Depois de tudo certo, Recria a sequence:
CREATE sequence <NOME> START <max value da tabela> INCREMENT BY 1
Altera a coluna para receber o sequence:
ALTER TABLE <NOME> ALTER COLUMN <nome> INTEGER NOT NULL DEFAULT nextval(´<nomeSequence>´);
Seguindo esse fluxo você tem mais controle das ações. O que pode estar te limitando é não ter que remover a sequence.
[]´s
8)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)