sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo definir una clave principal de incremento automático en PostgreSQL

Para una base de datos relacional como PostgreSQL, podría considerarse un pecado entre los desarrolladores no para incluir una clave primaria en cada tabla. Por lo tanto, es crucial que haga todo lo posible para agregar esa columna de clave principal tan importante a cada tabla y, afortunadamente, Postgres proporciona dos métodos para realizar esta tarea.

Uso del tipo de datos en serie

Con mucho, la técnica más simple y común para agregar una clave principal en Postgres es usar SERIAL o BIGSERIAL tipos de datos cuando CREATING una mesa nueva Como se indica en la documentación oficial, SERIAL no es un tipo de datos verdadero, sino que es simplemente una notación abreviada que le dice a Postgres que cree un identificador único incrementado automáticamente para la columna especificada.

A continuación crearemos nuestros books simples tabla con un SERIAL apropiado tipo de datos para la clave principal.

CREATE TABLE books (
  id              SERIAL PRIMARY KEY,
  title           VARCHAR(100) NOT NULL,
  primary_author  VARCHAR(100) NULL
);

Simplemente configurando nuestro id columna como SERIAL con PRIMARY KEY adjunto, Postgres se encargará de todo el complicado trabajo detrás de escena e incrementará automáticamente nuestro id columna con un valor de clave principal único para cada INSERT .

Usando una Secuencia Personalizada

En algunos casos raros, la naturaleza incremental estándar integrada en el SERIAL y BIGSERIAL los tipos de datos pueden no satisfacer sus necesidades. En estos casos, puede realizar la misma funcionalidad de clave principal incrementada automáticamente para su columna creando una SEQUENCE personalizada , similar al método utilizado en la versión anterior de Oracle.

Tal vez nos gusten especialmente los números pares, pero también nos desagrada cualquier cosa menor de 100, por lo que solo queremos que nuestra clave principal se incremente en dos, comenzando en 100 por cada inserción. Esto se puede lograr con una SEQUENCE personalizada así:

CREATE SEQUENCE books_sequence
  start 2
  increment 2;

Ahora, cuando INSERT un nuevo récord en nuestros books tabla, necesitamos evaluar el siguiente valor de nuestra secuencia con nextval('books_sequence') y usa eso como nuestro id .

INSERT INTO books
  (id, title, primary_author)
VALUES
  (nextval('books_sequence'), 'The Hobbit', 'Tolkien');

SEQUENCES se puede condimentar aún más si se desea, con opciones como minvalue y maxvalue por supuesto para indicar valores extremos, e incluso CYCLE , que permite que la secuencia "bucle" una vez que alcanza el maxvalue , volviendo al start valor y comenzar la escalada de nuevo. Se puede encontrar mucha más información en la documentación oficial.