Como ajustar a sequencia via sql?
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.
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
Curtidas 0
Respostas
Jcvpalma
10/03/2009
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:
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
Emir Neto
10/03/2009
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.
GOSTEI 0
Jcvpalma
10/03/2009
: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
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
Emir Neto
10/03/2009
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.
GOSTEI 0
Jcvpalma
10/03/2009
Que nada, o fluxo é esse:
(Lembre-se Backup, sempre...!)
Você remove a sequence:
Corrige os IDs utilizando CURSOR ou qualquer outra forma que use.
Depois de tudo certo, Recria a sequence:
Altera a coluna para receber o sequence:
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)
(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