PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:Problem mit der automatischen Inkrementierung der ID

Liquibases Anweisung autoIncrement="true" erzeugt serial Spalte für PostgreSQL. Für serial Spalte PostgreSQL erstellt eine Sequenz mit einem Namen wie tablename_colname_seq . Standardspaltenwerte werden aus dieser Sequenz zugewiesen.

Aber wenn Sie explizit Fügen Sie einen Wert in die serielle Spalte ein, er wirkt sich nicht auf den Sequenzgenerator aus und sein nächster Wert ändert sich nicht. Es kann also einen doppelten Wert generieren, was genau in Ihrem Fall der Fall ist.

Um dies zu verhindern, nachdem Sie explizite Werte eingefügt haben, müssen Sie den aktuellen Wert eines Sequenzgenerators entweder mit ALTER SEQUENCE ändern -Anweisung oder mit setval() Funktion, z. B.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Dies sollte das Problem beheben.