Un autoincremental en PostgreSQL, también conocido como secuencia, es un objeto especial que genera una secuencia de números comenzando desde el valor 1 a partir del último número que se ha generado. Este autoincremental o secuencia se suele utilizar como la clave primaria de las tablas.
Sintaxis
Para establecer un incremental como clave primaria al crear una tabla usa esta sintaxis:
CREATE TABLE nombre_tabla (
columna1 SERIAL PRIMARY KEY,
columna2 tipo_dato
);
Si la tabla ya la tienes creada, puedes usar esta sintaxis para crear una columna de tipo incremental y que sea la clave primaria:
ALTER TABLE nombre_tabla
ADD COLUMN nombreColumna SERIAL PRIMARY KEY;
¿Cómo funciona?
Cuando se crea un campo de tipo serial PostgreSQL realiza las siguientes acciones:
- Crea una secuencia
- Agrega la restricción NOT NULL a la columna ya que siempre va tener valor numérico y le indica que por defecto el valor es el siguiente valor de la secuencia.
- Se asocia la secuencia a la columna, de este modo, si se borra la columna o la tabla se borrara la secuencia.
Estos tres pasos se realizan automáticamente cuando creas una columna de tipo serial, su sintaxis equivalente es la siguiente:
CREATE SEQUENCE nombre_tabla_id;
CREATE TABLE nombre_tabla (
id integer NOT NULL DEFAULT nextval('nombre_tabla_id')
);
ALTER SEQUENCE nombre_tabla_id
OWNED BY nombre_tabla.id;
Lenguaje del código: PHP (php)
Tipos de serial
PostgreSQL nos proporciona tres tipos de objetos serial que funcionan de igual manera diferenciándose en el tamaño que soportan:
Nombre | Tamaño | Rango |
---|---|---|
SMALLSERIAL | 2 bytes | 1 a 32,767 |
SERIAL | 4 bytes | 1 a 2,147,483,647 |
BIGSERIAL | 8 bytes | 1 a 9,223,372,036,854,775,807 |
Importante
La operación de generar secuencias no es segura para las transacciones. Esto quiere decir que si se utiliza dos veces al mismo tiempo, por ejemplo dos clientes a la vez, se obtendrán resultados diferentes y si uno de ellos realiza un rollback es posible que se generen números no consecutivos.
Ejemplo
En el siguiente ejemplo se crea la tabla llamada recursos y se inserta un registro asignándole el valor 1 al campo ID. Cada vez que se realice un insert en el tabla el número se irá incrementando.
CREATE TABLE recursos (
id SERIAL PRIMARY KEY,
nombre VARCHAR
);
INSERT INTO recursos(nombre)
VALUES('Metal');
select * from recursos;
Lenguaje del código: JavaScript (javascript)