- Spegnimento
- 26 agosto 2026 alle ore 01:55 UTC
- Autore
- Kamo
- Impegno
- f0f5063
LEAD CONTACT POINTs e LEAD COMMUNICATIONS acquisiscono il responsabile del documento (assoc type, assoc object id) coppia in modo da un account, un paziente o un commercio record può proprie comunicazioni senza prendere in prestito una pista. Quattro passi, e l'ordine è tutto il punto. Backfill primo: ogni riga esistente è un piombo, quindi assoc type = 'LEAD' e assoc object id = lead uid::text. Esecuzione dopo il vincolo swap costruirebbe il nuovo indice unico su nulls, non forzando nulla. Quindi scambiare il vincolo unico sulla coppia proprietario. (org id, lead uid, canale, source id) è ciò che rende ingestione idempotent — una chiamata RingCentral è visto due volte, una volta dal webhook e una volta dalla scansione di riconciliazione — e con lead uid null per un paziente, Postgres tratta ogni uno di questi NULLs come distinto, quindi il secondo avvistamento inserisce un duplicato. Il nuovo vincolo è aggiunto PRIMA il vecchio è caduto, quindi un fallimento tra lascia il tavolo protetto da uno piuttosto che da nessuno. Solo allora rilassare lead uid non è NULL. Hibernate's ddl-auto: aggiornamento aggiunge colonne ma mai rilassa un vincolo, quindi questo non può essere lasciato al mappatura — e facendolo prima che lo swap si apre esattamente la finestra duplicata sopra. Quindi verificare, leggendo pg constraint e information schema indietro. The chiavi primarie cliniche sono state corrette in Java e sbagliato nel DDL emesso, e solo la lettura pg constraint ha mostrato. Una riga sinistra senza proprietario tipo non comparirebbe mai su alcuna linea temporale, in modo che il caso registri un errore piuttosto che a rapporto di successo. Idempotent in tutto, e un tavolo mancante è saltato piuttosto che mancare l'avvio — un'eccezione qui prenderebbe ogni secondo corridore con esso. 176 test verdi.