Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luciane_gomes

Auto-Increment no Postgresql

Recommended Posts

Galera, eu criei a seguinte tabelinha:

 

create table produtos (

id_produto integer not null,

descricao char(60),

preco decimal (15,2),

primary key (id_produto)

);

 

só que eu gostaria q a minha chave primária de auto-incrementasse. Alguém sabe como eu faço isto no postgresql? Eu sei q no SQLServer eh assim:

 

create table produtos (

id_produto integer not null identity (1,1),

descricao char(60),

preco decimal (15,2),

primary key (id_produto)

);

 

como ficaria no post?

 

Desde já agradeço a atenção. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que criar uma sequence, da seguinte forma:CREATE SEQUENCE nome_da_sequence;create table produtos (id_produto integer DEFAULT nextval('nome_da_sequence') NOT NULL,,descricao char(60),preco decimal (15,2),primary key (id_produto));isso funciona ai qd você for fazer o insert nao insere nessa coluna.flw..t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi, provavelmente a esta altura você já deve ter conseguido, mas caso não tenho aí vai 2 formas de fazer isso:1) Tipos seriaisOs tipos de dado serial e bigserial não são tipos verdadeiros, mas meramente uma notação conveniente para definir colunas identificadoras únicas (semelhante à propriedade AUTO_INCREMENTO existente em alguns outros bancos de dados). Na implementação corrente especificarCREATE TABLE produtos( id SERIAL);Isso fará com que uma sequence seja criada automaticamente com o seguinte nome: produtos_id_seqVocê pode ver a estrutura da sequence digitando no banco o comando: \d produtos_id_seq2) Você pode fazer como foi citado acima:CREATE SEQUENCE produtos_seq;CREATE TABLE produtos( id integer DEFAULT nextval('produtos_seq') NOT NULL);OBS: Não esqueça de dar permissões para a sequence.Espero ter ajudado,Qualquer coisa é só falar...Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz isso, mas estou com um problema.

 

Tenho vários registros aleatorios na tabela... o SERIAL inseri o próximo número depois do START dele. Mas se esse número já existir, ao invez de procurar o proximo livre, ele dá um ERRO de SQL. Como faço para ele pular AUTOMATICAMENTE para o proximo???

 

PS: UMA RESPOSTA DO TIPO "você TEM QUE VERIFICAR VAI CÓDIGO ANTES" eu dispenso.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria melhor voce postar o código do insert.

 

Veja esse exemplo e aplique em seu projeto:

 

pessoa (tabela)

id (PK)

nome

endereco

 

id seria o campo serial, então no insert eu não preciso controlar o número a ser gravado o SGDB cuida disso pra mim.

 

INSERT INTO pessoa (nome, endereco)
VALUES ('kandrade', '303 norte .....');

 

Isso não irá gerar erro de sql, pois sempre id será diferente.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.