Auto-incremento no PostgreSQL com SERIAL

Coluna de Auto-incremento no PostgreSQL com SERIAL 

No PostgreSQL existe um tipo especial de objeto de banco de dados chamado de Sequência, que permite gerar, como o nome diz, uma sequência de números inteiros. Usamos esse objeto, normalmente, para gerar valores em um campo de chave primária de forma automatizada. Assim, podemos criar um campo de auto-incremento no PostgreSQL.

Para tal, usamos a palavra-chave SERIAL (que é um pseudo-tipo) ao criarmos uma tabela, para identificar a coluna que receberá os valores sequenciais.

Ao usarmos a palavra-chave SERIAL, o PostgreSQL irá criar um objeto de sequência e configurar o próximo valor numérico gerado como valor padrão da coluna em si. Além disso, a restrição NOT NULL é adicionada automaticamente à coluna, pois ela sempre terá um valor associado.

Além do pseudo-tipo SERIAL, o PostgreSQL também possui outros pseudo-tipos para geração de sequências, como o SMALLSERIAL e BIGSERIAL. A tabela a seguir mostra as características de cada um desses pseudo-tipos:

Nome do Pseudo-Tipo Tamanho Faixa de Valores
SMALLSERIAL 2 bytes de 1 a 32.767
SERIAL 4 bytes de 1 a 2.147.483.647
BIGSERIAL 8 bytes de 1 a 9.223.372.036.854.775.807

Exemplo

Vejamos um exemplo de emprego de sequência de auto-incremento.

CREATE TABLE Funcionarios (
 IdFunc SERIAL PRIMARY KEY,
 NomeFunc VARCHAR(60),
 DescrCargo TEXT
);

A coluna IdFunc é a coluna que receberá dados numéricos sequenciais, por conta do emprego da palavra SERIAL.

Testando

Para testar o auto-incremento vamos inserir alguns registros na tabela de funcionários criada anteriormente. Note que não devemos inserir dados na coluna IdFunc, pois seus valores serão gerados automaticamente para cada registro inserido.

INSERT INTO Funcionarios (NomeFunc, DescrCargo)
VALUES
('Fábio','CEO da Bóson Treinamentos em Tecnologia'),
('Sandra','Diretora da Okinawa Foods'),
('Ana','Relações Públicas do jornal Diário do Naturalista);

Para ver o resultado, basta realizar uma consulta simples aos dados da tabela:

SELECT * FROM Funcionarios;

Resultado:

como usar tipo SERIAL no postgresql

Note os valores sequenciais na coluna idFunc, criados automaticamente.

Se acrescentarmos a cláusula RETURNING ao inserir linhas na tabela, será retornado o valor gerado na coluna de auto incremento, como no exemplo a seguir:

INSERT INTO Funcionarios (NomeFunc, DescrCargo)
VALUES
('Monica','Pesquisadora de Novas Tecnologias na Bóson Treinamentos')
RETURNING IdFunc;

Resultado:

Cláusula RETURNING no PostgreSQL

Note que ao inserir o novo registro é exibido na saída de dados o valor da coluna de auto-incremento que foi gerado – no caso, o número 4. Se realizarmos uma nova consulta à tabela veremos esse valor associado ao novo registro:

SELECT * FROM Funcionarios;

Consulta com SERIAL no PostgreSQL

É isso aí! Mostramos nesta lição como criar uma coluna de auto-incremento em PostgreSQL usando SERIAL. Falaremos mais sobre outros tipos de sequências em ma próxima lição.

Até mais!

Anterior: Como criar tabelas no PostgreSQL com CREATE TABLE

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Auto-incremento no PostgreSQL com SERIAL

  1. BATISTA C. MANUEL // 15/12/2021 em 10:53 // Responder

    Caríssimo Fábio boa tarde, gosto a forma como aborda as aulas relativo ao PostgresSQL/Postgis e gostaria de fazer um Curso completo. Quais os procedimentos para frequentá-lo?!!!
    Pretendo habilitar me em SGBD para a posterior fazer o Mestrado. Sou Engenheiro Geógrafo!!! Amo a Magia de Consulta Espacial dos dados geográficos e outros!!!!

  2. Boa tarde, temos um BD com varias colunas e tres anos 2019,2020 e 2021, e estamos atualizando 2022 todo dia, ocorre que todo dia dropamos toda a base para aducionar o novo dia, gostariamos de deixar permanente os tres anos ja fechados e atualizar somente o ano em curso

Escreva um comentário

Seu e-mail não será divulgado


*