sql >> Databasteknik >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:Problem med automatisk inkrementering av ID

Liquibases instruktion autoIncrement="true" genererar serial kolumn för PostgreSQL. För serial kolumn PostgreSQL kommer att skapa en sekvens med ett namn som tablename_colname_seq . Standardkolumnvärden kommer att tilldelas från denna sekvens.

Men när du uttryckligen infoga ett värde i seriell kolumn, det påverkar inte sekvensgeneratorn och dess nästa värde kommer inte att ändras. Så det kan generera ett duplikatvärde, vilket är exakt ditt fall.

För att förhindra detta efter att du har infogat explicita värden måste du ändra det aktuella värdet för en sekvensgenerator antingen med ALTER SEQUENCE eller med setval() funktion, t.ex.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Detta bör lösa problemet.



  1. UTF-8-strängar i en MySQL-databas blev trassliga efter konfigurationsändring

  2. hur minimerar jag min fråga?

  3. Vilken typ av schema kan jag använda för att hantera manuella datumbaserade datainmatningar?

  4. Hur man återställer en databas från C#