Columna de identidad
¿Qué es una columna de identidad en PostgreSQL?
Una columna de identidad obtiene sus valores automáticamente de una secuencia implícita. Es la forma estándar de SQL de crear una clave autoincremental en PostgreSQL.
Una columna de identidad se declara con GENERATED ALWAYS AS IDENTITY o GENERATED BY DEFAULT AS IDENTITY. PostgreSQL le asocia una secuencia implícita y rellena la columna a partir de esa secuencia cada vez que una inserción no proporciona un valor.
Con GENERATED ALWAYS, se rechaza un valor explícito en un INSERT a menos que la sentencia indique OVERRIDING SYSTEM VALUE; con BY DEFAULT, el valor explícito tiene prioridad. Las columnas de identidad siguen el estándar SQL, mientras que serial es una abreviatura más antigua y específica de PostgreSQL. Como con cualquier secuencia, los números usados por una transacción revertida no se reutilizan, así que es normal que haya huecos.
Ejemplo
El ejemplo inserta dos filas sin id, devuelve los valores generados y muestra el nombre de la secuencia que respalda la columna.
CREATE TABLE tickets (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
subject text NOT NULL
);
INSERT INTO tickets (subject) VALUES ('first'), ('second') RETURNING id;
SELECT pg_get_serial_sequence('tickets', 'id');SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.
Fuentes
Documentación oficial de PostgreSQL (en inglés).