Fórum Como ajustar a sequencia via sql? #27050

10/03/2009

0

Preciso ajustar o campo START em todas as sequences de acordo com a tabela.

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

Emir Neto

Responder

Posts

25/03/2009

Jcvpalma

Olá, emircalife,
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:


Responder

Gostei + 0

26/03/2009

Emir Neto

Preciso ajustar o sequence já existente no banco, vito que por exemplo o último sequencial deveria se 10 e no banco está como 8 entende? Precisaria de uma rotina para alterar de 8 para 10 via comandos sql.


Responder

Gostei + 0

26/03/2009

Jcvpalma

:D

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


Responder

Gostei + 0

26/03/2009

Emir Neto

Na verdade o problema é um pouco mais complicado, pois o script deve utilizar um select max no campo ID, acrescentar 1 e ajustar o sequence.


Responder

Gostei + 0

26/03/2009

Jcvpalma

Que nada, o fluxo é esse:

(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)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar