PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como definir uma chave primária de incremento automático no PostgreSQL


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.