Ok, eu corrigi. Fiz o seguinte:
Entrar no container
./launcher enter app
Conectar ao banco de dados
su postgres -c 'psql discourse'
Tentar encontrar duplicatas
discourse=# select * from incoming_referers where path LIKE '%/search/' ORDER BY incoming_domain_id;
id | path | incoming_domain_id
------±-----------±-------------------
3339 | /search/ | 33
6257 | /search/ | 91
1567 | /search/ | 298
1777 | /search/ | 341
3010 | /search/ | 418
6247 | /search/ | 418
4293 | /search/ | 644
2899 | /search/ | 653
3447 | /search/ | 793
3696 | /search/ | 852
4395 | /a/search/ | 1050
6968 | /search/ | 1305
5634 | /search/ | 1387
5834 | /search/ | 1437
6519 | /search/ | 1637
7127 | /search/ | 1787
7280 | /search/ | 1827
(17 linhas)
Excluir duplicata
`DELETE FROM incoming_referers WHERE path LIKE '%/search/' AND id IN (6247);`
Em seguida, reconstruir
discourse=# REINDEX SCHEMA CONCURRENTLY public;
WARNING: cannot reindex invalid index “public.incoming_referers_pkey_ccnew” concurrently, skipping
WARNING: cannot reindex invalid index “public.index_incoming_referers_on_path_and_incoming_domain_id_ccnew” concurrently, skipping
WARNING: cannot reindex invalid index “pg_toast.pg_toast_20732_index_ccnew” concurrently, skipping
REINDEX
Depois, fiz outro backup, copiei para o novo servidor e a importação foi bem-sucedida :smiley:
Seria bom se o processo de backup pudesse identificar duplicatas para evitar problemas. Tive a sorte de ter acesso ao servidor original, que ainda estava em execução. Se estivesse restaurando um backup frio, isso provavelmente seria um problema maior.
Muito obrigado pela sua ajuda.