Wir haben ein kritisches und unerwartetes Problem in unserem von Postgresql unterstützt. Vor ein paar Tagen wurde der folgende Fehler in mehreren Entitätsvorgängen aufgetaucht: < /p>
Code: Select all
ERROR: duplicate key value violates unique constraint "lifecycle_event_pkey"
Detail: Key (id)=(2914) already exists.
org.springframework.dao.DataIntegrityViolationException:
could not execute statement; SQL [n/a]; constraint [lifecycle_event_pkey];
nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
< /code>
Dies erschien zunächst in einer Transaktionsdienstmethode, um eine Asset-Tracking-Aktion zu verarbeiten. Es verwendet Springdaten JPA mit @Transactional
< /ul>
- Dies: < /p>
Code: Select all
@MappedSuperclass @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Root { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // Additional audit fields... }
- Die gleiche Root wird in mehreren Modulen/Diensten in der Produktion verwendet. oder Massenimporte wurden in betroffenen Tabellen ausgeführt.war kontinuierlich). />
Code: Select all
MAX(id)
Code: Select all
SELECT setval('lifecycle_event_id_seq', (SELECT MAX(id) FROM lifecycle_event));
Verdacht auf < /th>
Status < /th>
Noten < /th>
< /thead>
< /tr>
Hibernate -Misskonfiguration < /td>
Verwenden von Standardidentität < /code>; no @GenericGenerator, no custom ID logic
Gaps in the table
IDs were continuous
Allocation size drift (
Code: Select all
SEQUENCE
Nicht anwendbar - mit Identität
gemeinsamer Sequenzkonflikt verwendet.
Code: Select all
pg_get_serial_sequence< /code> bestätigt) < /td>
< /tr>
< /tbody>
< /table> < /div>
🧠 aktuelle aktuelle Hypothes < /h3>
Possibility
Likelihood
Notes
PostgreSQL sequence cache loss after crash/restart
⚠️ Possible
CACHE
< /tr>
Rollback während der Transaktion < /td>
insbesondere plausibel unter @transactional < /td>; Die Sequenz wird möglicherweise nicht voranschreiten, wenn NextVal () nicht erreicht wurde. />
Another app using different ID strategy
All apps use the same base class and IDENTITY strategy
Angesichts der manuellen Einfügungen, Migrationen oder ID-Lücken: < /p>
Was kann nach der automatischen Sequenz von PostgreSQL (automatisch generierte Sequenz (Sequenz) verursachen (
Code: Select all
IDENTITY
Code: Select all
@GeneratedValue(strategy = GenerationType.IDENTITY)
- a @mappedsuperClass verwendet von mehreren Entitäten
- service methods using saveAndFlush()
Code: Select all
@Transactional
[*]PostgreSQL restarts or crashes and loses sequence cache state?
An exception unterbricht eine Transaktion vor Der Sequenzwert ist erweitert? />
Danke!