Durante procesos de migración, restauración o carga masiva de información en PostgreSQL, es posible que las secuencias asociadas a columnas autoincrementales queden desincronizadas respecto a los datos almacenados en la tabla.
Cuando esto ocurre, los nuevos registros pueden intentar utilizar identificadores inferiores al último valor existente, provocando errores de clave duplicada o inconsistencias en la generación de IDs.
Validación de la secuencia
Para identificar la secuencia asociada a una columna:
SELECT pg_get_serial_sequence('clientes', 'id');
Para consultar el valor actual de la secuencia:
SELECT last_valueFROM clientes_id_seq;
Y para obtener el identificador más alto almacenado en la tabla:
SELECT MAX(id)FROM clientes;
Si el valor de la secuencia es inferior al resultado de MAX(id), la secuencia requiere sincronización.
Corrección
La forma recomendada de corregir la secuencia consiste en actualizar su valor al identificador máximo existente en la tabla:
SELECT setval('clientes_id_seq',(SELECT MAX(id) FROM clientes));
También puede utilizarse una versión genérica que identifica automáticamente la secuencia asociada:
SELECT setval(pg_get_serial_sequence('clientes', 'id'),COALESCE(MAX(id), 1))FROM clientes;
Una vez ejecutado este procedimiento, PostgreSQL continuará generando identificadores a partir del siguiente valor disponible, evitando conflictos con los registros ya existentes.
