Campo Incremental no 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!


