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.