sql >> Databáze >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:Problém s automatickým přírůstkem ID

Instrukce Liquibase autoIncrement="true" generuje serial sloupec pro PostgreSQL. Pro serial sloupec PostgreSQL vytvoří sekvenci s názvem jako tablename_colname_seq . Z této sekvence budou přiřazeny výchozí hodnoty sloupců.

Ale když explicitně vložte hodnotu do sériového sloupce, neovlivní to generátor sekvence a její další hodnota se nezmění. Může tedy vygenerovat duplicitní hodnotu, což je přesně váš případ.

Abyste tomu zabránili po vložení explicitních hodnot, musíte změnit aktuální hodnotu generátoru sekvencí buď pomocí ALTER SEQUENCE nebo pomocí setval() funkce, např.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

Tím by se měl problém vyřešit.



  1. Jak funguje TIMESTAMPDIFF() v MariaDB

  2. Optimalizační prahy – seskupování a agregace dat, část 3

  3. pořadí řádků při vkládání více řádků v MySQL

  4. laravel výmluvný vztah z tvůrce dotazů