Para um banco de dados relacional como o PostgreSQL, pode ser amplamente considerado um pecado entre os desenvolvedores não para incluir uma chave primária em cada tabela. Portanto, é crucial que você faça o máximo para adicionar essa importante coluna de chave primária a todas as tabelas e, felizmente, o Postgres fornece dois métodos para realizar essa tarefa.
Usando o tipo de dados serial
De longe, a técnica mais simples e comum para adicionar uma chave primária no Postgres é usar o
SERIAL
ou BIGSERIAL
tipos de dados ao CREATING
uma nova mesa. Conforme indicado na documentação oficial, SERIAL
não é um tipo de dados verdadeiro, mas é simplesmente uma notação abreviada que diz ao Postgres para criar um identificador único e incrementado automaticamente para a coluna especificada. Abaixo, criaremos nossos
books
simples tabela com um SERIAL
apropriado tipo de dados para a chave primária. CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
primary_author VARCHAR(100) NULL
);
Simplesmente configurando nosso
id
coluna como SERIAL
com PRIMARY KEY
anexado, o Postgres lidará com todo o complicado trabalho de bastidores e incrementará automaticamente nosso id
coluna com um valor de chave primária exclusivo para cada INSERT
. Usando uma sequência personalizada
Em alguns casos raros, a natureza incremental padrão incorporada ao
SERIAL
e BIGSERIAL
tipos de dados podem não atender às suas necessidades. Nesses casos, você pode executar a mesma funcionalidade de chave primária incrementada automaticamente para sua coluna criando uma SEQUENCE
personalizada , semelhante ao método usado na versão mais antiga do Oracle. Talvez gostemos particularmente de números pares, mas também tenhamos um forte desgosto por qualquer coisa menor que 100, então queremos apenas que nossa chave primária seja incrementada por dois a partir de 100 para cada inserção. Isso pode ser feito com uma
SEQUENCE
personalizada igual a:CREATE SEQUENCE books_sequence
start 2
increment 2;
Agora, quando
INSERT
um novo registro em nossos books
tabela, precisamos avaliar o próximo valor de nossa sequência com nextval('books_sequence')
e use isso como nosso id
. INSERT INTO books
(id, title, primary_author)
VALUES
(nextval('books_sequence'), 'The Hobbit', 'Tolkien');
SEQUENCES
pode ser apimentado ainda mais se desejado, com opções como minvalue
e maxvalue
para indicar valores extremos, e até mesmo CYCLE
, que permite que a sequência faça um "loop" assim que atingir o maxvalue
, retornando ao start
valor e recomeçando a subida. Muito mais informações podem ser encontradas na documentação oficial.