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

Liquibase + Postgresql + Spring Jpa:Problem med automatisk id-forøgelse

Liquibase's instruktion autoIncrement="true" genererer serial kolonne til PostgreSQL. Til serial kolonne PostgreSQL vil oprette en sekvens med et navn som tablename_colname_seq . Standard kolonneværdier vil blive tildelt fra denne sekvens.

Men når du eksplicit indsæt en værdi i seriel kolonne, det påvirker ikke sekvensgeneratoren, og dens næste værdi ændres ikke. Så det kan generere en duplikatværdi, hvilket er præcis din sag.

For at forhindre dette, efter at du har indsat eksplicitte værdier, skal du ændre den aktuelle værdi af en sekvensgenerator enten med ALTER SEQUENCE sætning eller med setval() funktion, f.eks.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Dette burde løse problemet.



  1. UDSKIFT rækker i mysql database tabel med pandas DataFrame

  2. Sådan fungerer Atan2d() i PostgreSQL

  3. Rekursiv MySQL-forespørgsel med relationel innoDB

  4. Brug af MySQL-klientapplikationer