Tiempo de lectura:1 Minutos, 40 Segundos

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 ultimo numero 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;

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

CREATE TABLE recursos (
	id SERIAL PRIMARY KEY,
	nombre VARCHAR
);

INSERT INTO recursos(nombre) 
VALUES('Metal');

select * from recursos;

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.

Perfiles en Redes Sociales