Ótima descoberta! Encontrei todos os índices com “ccnew” no nome usando esta consulta.
psql
\connect discourse
select tablename,indexname,indexdef from pg_indexes where indexname LIKE '%ccnew%';
incoming_referer.csv (7.2 KB)
Acontece que eu tinha nada menos que 30 deles, todos na tabela incoming_referers. Então, verifiquei se todos os índices ccnew eram realmente duplicatas usando a coluna indexdef nesta consulta.
select indexname,indexdef from pg_indexes where tablename = 'incoming_referers';
ccnew.csv (6.6 KB)
Em seguida, excluí todos com sucesso.
DROP INDEX incoming_referers_pkey_ccnew;
DROP INDEX incoming_referers_pkey_ccnew_ccnew;
DROP INDEX incoming_referers_pkey_ccnew1;
...e assim por diante para todos os 30
Naquela altura, reindexei todo o esquema novamente, mas ele não conseguiu reconstruir dois dos mesmos índices ccnew de incoming_referers e também encontrou três índices pg_toast. Excluí-os e reindexei todo o esquema mais uma vez; novamente, mais erros. Encontrei vários outros índices ccnew no esquema discourse, reindexei pela terceira vez…
Não consigo concluir uma reindexação completa sem erros; ele continua criando e, em seguida, falhando ao reconstruir novos índices ccnew a cada vez. Após 4 reconstruções completas, excluí os índices ccnew e desisti. Acho que poderia tentar reconstruir de forma não concorrente, mas isso causaria várias interrupções no serviço.
De qualquer forma, minha suposição é que a maioria dos usuários que atualizaram do PG10 para o PG12 e tentaram reindexar depois disso possui esses índices ccnew extras, e todos eles devem ser excluídos. Eles apenas ocupam espaço e multiplicam a escrita em disco (I/O) sem qualquer benefício.