Bonne trouvaille ! J’ai trouvé tous les index contenant « ccnew » dans leur nom grâce à cette requête.
psql
\connect discourse
select tablename,indexname,indexdef from pg_indexes where indexname LIKE '%ccnew%';
incoming_referer.csv (7,2 Ko)
Il s’avère que j’en avais pas moins de 30, tous sur la table incoming_referers. J’ai donc vérifié que tous les index ccnew étaient en fait des doublons via la colonne indexdef dans cette requête.
select indexname,indexdef from pg_indexes where tablename = 'incoming_referers';
ccnew.csv (6,6 Ko)
Ensuite, je les ai tous supprimés avec succès.
DROP INDEX incoming_referers_pkey_ccnew;
DROP INDEX incoming_referers_pkey_ccnew_ccnew;
DROP INDEX incoming_referers_pkey_ccnew1;
...et ainsi de suite pour les 30
À ce stade, j’ai relancé une réindexation complète du schéma, mais elle n’a de nouveau pas pu reconstruire deux des mêmes index ccnew sur incoming_referers, et a également détecté trois index pg_toast. Je les ai supprimés, puis j’ai relancé une réindexation complète du schéma, mais là encore des erreurs sont survenues. J’ai trouvé encore plus d’index ccnew dans le schéma discourse, j’ai réindexé une troisième fois…
Je n’arrive pas à obtenir une réindexation complète sans erreur : à chaque fois, de nouveaux index ccnew sont créés puis échouent à être reconstruits. Après 4 réindexations complètes, j’ai supprimé les index ccnew et abandonné. Je pourrais essayer de reconstruire sans l’option CONCURRENTLY, mais cela entraînerait un temps d’arrêt important.
En tout cas, je suppose que la plupart des utilisateurs passant de PG10 à PG12 qui ont tenté une réindexation par la suite se retrouvent avec ces index ccnew supplémentaires, qu’ils devraient tous supprimer. Ils ne font qu’occuper de l’espace et multiplier les écritures disque I/O sans aucun avantage.