PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa :Problem z automatycznym przyrostem identyfikatora

Instrukcja Liquibase autoIncrement="true" generuje serial kolumna dla PostgreSQL. Dla serial kolumna PostgreSQL utworzy sekwencję o nazwie takiej jak tablename_colname_seq . Domyślne wartości kolumn zostaną przypisane z tej sekwencji.

Ale kiedy wyraźnie wstawić wartość do kolumny szeregowej, nie ma to wpływu na generator sekwencji, a jej następna wartość nie ulegnie zmianie. Dzięki temu może wygenerować zduplikowaną wartość, co jest dokładnie w Twoim przypadku.

Aby temu zapobiec po wstawieniu jawnych wartości, musisz zmienić bieżącą wartość generatora sekwencji za pomocą ALTER SEQUENCE oświadczenie lub za pomocą setval() funkcja, np.:

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

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

To powinno rozwiązać problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MADlib apt zainstalować, jak to zrobić?

  2. Jak połączyć dwie tabele, z których jedna nie ma klucza podstawowego i nie ma tej samej długości znaków?

  3. Jak przechowywać DateTimeOffset w PostreSQL?

  4. Numer listy zduplikowanych wartości

  5. Przełączanie awaryjne replikacji PostgreSQL 101