sql >> Base de Datos >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:problema de incremento automático de identificación

Instrucción de Liquibase autoIncrement="true" genera serial columna para PostgreSQL. Para serial columna PostgreSQL creará una secuencia con un nombre como tablename_colname_seq . Los valores de columna predeterminados se asignarán a partir de esta secuencia.

Pero cuando explícitamente inserte un valor en la columna serial, no afecta el generador de secuencias y su próximo valor no cambiará. Entonces puede generar un valor duplicado, que es exactamente su caso.

Para evitar esto después de insertar valores explícitos, debe cambiar el valor actual de un generador de secuencias con ALTER SEQUENCE sentencia o con setval() función, por ejemplo:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));

Esto debería solucionar el problema.