PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:problema de incremento automático de ID


Instrução da Liquibase autoIncrement="true" gera serial coluna para PostgreSQL. Para serial coluna PostgreSQL irá criar uma sequência com um nome como tablename_colname_seq . Os valores de coluna padrão serão atribuídos a partir desta sequência.

Mas quando você explicitamente insira um valor na coluna serial, isso não afeta o gerador de sequência e seu próximo valor não será alterado. Assim pode gerar um valor duplicado, que é exatamente o seu caso.

Para evitar isso depois de inserir valores explícitos, você precisa alterar o valor atual de um gerador de sequência com ALTER SEQUENCE instrução ou com setval() função, por exemplo:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Isso deve corrigir o problema.