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.