Importazione fallita con `could not create unique index`

Bene, ce l’abbiamo fatta e siamo di nuovo online. Grazie per i suggerimenti @Falco.

Per aiutare altre persone con i loro problemi, ecco un riepilogo di ciò che abbiamo fatto.

Avevamo diversi indici corrotti che causavano il fallimento dell’importazione. Siamo riusciti a risolvere il problema eliminando manualmente i duplicati. Avevamo anche 8 utenti con un username_lower duplicato (troppi ‘mike’ e ‘marco’). Abbiamo rinominato questi utenti aggiornando sia username che username_lower. Dai dati degli utenti abbiamo notato che la prima corruzione è avvenuta nel dicembre 2019.

Invece di seguire il ciclo “crea backup” → “ripristina backup” → “errore su duplicato” → “correggi”, abbiamo deciso di reindicizzare tutti gli indici. Abbiamo trovato tutti gli indici con vincoli di unicità con la seguente query:

select idx.relname as index_name, 
       insp.nspname as index_schema,
       tbl.relname as table_name,
       tnsp.nspname as table_schema
from pg_index pgi
  join pg_class idx on idx.oid = pgi.indexrelid
  join pg_namespace insp on insp.oid = idx.relnamespace
  join pg_class tbl on tbl.oid = pgi.indrelid
  join pg_namespace tnsp on tnsp.oid = tbl.relnamespace
where pgi.indisunique --<< solo indici unici
  and tnsp.nspname = 'public'

Una volta che tutti gli indici funzionavano, siamo riusciti a creare un backup e importarlo correttamente nella nuova istanza. Le migrazioni sono state eseguite come previsto, abbiamo scambiato le istanze e siamo tornati operativi :+1: Un brindisi alla resilienza di Discourse :beers:

Grazie ancora @Falco.

Buon fine settimana :slight_smile: