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
Un brindisi alla resilienza di Discourse ![]()
Grazie ancora @Falco.
Buon fine settimana ![]()