Échec de l'importation avec « could not create unique index »

Bon, nous avons réussi à sortir de cette situation et nous sommes de nouveau en ligne. Merci pour les indices, @Falco.

Pour aider d’autres personnes à résoudre leurs problèmes, voici un récapitulatif des actions que nous avons entreprises.

Nous avions plusieurs index corrompus, ce qui a provoqué l’échec de l’importation. Nous avons pu résoudre le problème en supprimant manuellement les doublons. Nous avions également 8 utilisateurs avec un username_lower en double (trop de « mike » et de « marco »). Nous avons renommé ces comptes en mettant à jour à la fois username et username_lower. À partir des données utilisateurs, nous avons constaté que la première corruption remontait à décembre 2019.

Au lieu de suivre le cycle « faire une sauvegarde » → « restaurer la sauvegarde » → « échec dû aux doublons » → « corriger », nous avons décidé de réindexer tous les index. Nous avons trouvé tous les index avec des contraintes d’unicité en exécutant la requête suivante :

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 --<< uniquement les index uniques
  and tnsp.nspname = 'public'

Une fois tous les index fonctionnels, nous avons pu effectuer une sauvegarde et l’importer correctement dans la nouvelle instance. Les migrations se sont déroulées comme prévu, nous avons échangé les instances et tout est de nouveau opérationnel :+1: À la résilience de Discourse :beers:

Encore merci, @Falco.

Bon week-end à tous :slight_smile: