PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:problema di incremento automatico dell'ID

Istruzione di Liquibase autoIncrement="true" genera serial colonna per PostgreSQL. Per serial colonna PostgreSQL creerà una sequenza con un nome come tablename_colname_seq . I valori predefiniti delle colonne verranno assegnati da questa sequenza.

Ma quando esplicitamente inserisci un valore nella colonna seriale, non influisce sul generatore di sequenze e il suo valore successivo non cambierà. Quindi può generare un valore duplicato, che è esattamente il tuo caso.

Per evitare ciò dopo aver inserito valori espliciti è necessario modificare il valore corrente di un generatore di sequenze con ALTER SEQUENCE istruzione o con setval() funzione, es.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Questo dovrebbe risolvere il problema.