Campo Incremental no PostgreSQL

Posted on julho 17, 2010. Filed under: PostgreSQL |

Neste artigo vamos demonstar como trabalhar com campos “sequences” ou “incremental” no PostgreSQL. Os sequences no PostgreSQL são equivalentes aos campos auto_increment do MySQL. Programadores acostumados somente com MySQL podem encontrar dificuldades quando precisam trabalhar com tabelas do Postgres usando campos incrementais. Este artigo tem a finalidade de ajudar esses novos programadores que estão iniciando no postgres.

Criando um Sequence no Postgres:

CREATE SEQUENCE usuario_id_seq;

Obtendo o próximo valor do Sequence:

SELECT NEXTVAL('usuario_id_seq');
nextval
---------
1
(1 row)

Você pode usar o sequence para ajudar a criar um campo incremental na sua tabela.
No exemplo abaixo, o campo usuario_id vai receber como padrão o próximo valor da sequence no momento de cada inserção:

CREATE TABLE usuario (
usuario_id INTEGER DEFAULT NEXTVAL('usuario_id_seq'),
nome VARCHAR(255),
sobrenome VARCHAR(255),
email VARCHAR(100)
);

Inserindo um registro na tabela usuario:

INSERT INTO usuario (nome, sobrenome, email) VALUES('Douglas', 'Pasqua', 'douglas.pasqua@gmail.com');

Veja que não especificamos o campo usuario_id. Dessa forma, o campo usuario_id irá receber o valor padrão, que é “NEXTVAL(‘usuario_id_seq’)”

SELECT usuario_id FROM usuario;
usuario_id
------------
2
(1 row)

Vamos demonstrar como criar um sequence em um tabela já existente no banco de dados. Vamos utilizar como exemplo a seguinte tabela chamada ‘produto’:

CREATE TABLE produto (
nome VARCHAR(255),
marca VARCHAR(100),
modelo VARCHAR(100)
);

Inserindo algumas linhas na tabela para ajudar nos próximos exemplos:

INSERT INTO produto (nome, marca, modelo) VALUES ('carro', 'Ford', 'Fiesta');
INSERT INTO produto (nome, marca, modelo) VALUES ('computador', 'Dell', 'Inspirion');
INSERT INTO produto (nome, marca, modelo) VALUES ('celular', 'Motorola', 'V5');

A tabela ‘produto’, já existente, não exista um campo incremental, portanto vamos criá-lo. Primeiro criamos o sequence:

CREATE SEQUENCE produto_id_seq;

Depois criamos o campo na tabela produto que receberá o valor incremental do sequence anterior:

ALTER TABLE produto ADD produto_id INT UNIQUE;

Depois especifique que o campo produto_id receberá o valor da sequence como padrão:

ALTER TABLE produto ALTER COLUMN produto_id SET DEFAULT NEXTVAL('produto_id_seq');

Pronto. Tudo certo ? Bom, ainda não. Já temos nosso campo incremental na tabela produto. Porém os registros já existentes antes da alteração não serão populados pela sequence automaticamente. Por padrão o valor da coluna para esses registros serão “null”. Verificando:

SELECT * FROM produto;
nome | marca | modelo | produto_id
------------+----------+-----------+------------
carro | Ford | Fiesta |
computador| Dell | Inspirion |
celular | Motorola | V5 |
(3 rows)

Para corrigir isto, execute o UPDATE:

UPDATE produto SET produto_id = NEXTVAL('produto_id_seq');

Verificando novamente os dados na tabela:

nome | marca | modelo | produto_id
------------+----------+-----------+------------
carro | Ford | Fiesta | 1
computador | Dell | Inspirion | 2
celular | Motorola | V5 | 3
(3 rows)

Legal né. Você já esta apto a trabalhar com campos incrementais no postgresql. Para finalizar, vamos demonstrar um exemplo de como excluir a sequence utilizada em um campo incremental:

Primeiro faremos o ALTER TABLE:

ALTER TABLE produto ALTER COLUMN produto_id SET DEFAULT NULL;

Depois excluímos o sequence:

DROP SEQUENCE produto_id_seq;

Ok, é isto ae!

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Uma resposta to “Campo Incremental no PostgreSQL”

RSS Feed for Pasqua Tecnologia Comments RSS Feed


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: