Autoincremental en PostgreSQL

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:

  1. Crea una secuencia
  2. 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.
  3. 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:

NombreTamañoRango
SMALLSERIAL2 bytes1 a 32,767
SERIAL4 bytes1 a 2,147,483,647
BIGSERIAL8 bytes1 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)
Autoincremental en PostgreSQL

Escribir un comentario