Infelizmente, isso não ajudou, e eu ainda recebo essa mensagem ao restaurar:
[2021-07-03 16:53:41] ERROR: não foi possível criar o índice único "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: A chave (path, incoming_domain_id)=(/search, 4502) está duplicada.
[2021-07-03 16:53:41] EXCEPTION: psql falhou: DETAIL: A chave (path, incoming_domain_id)=(/search, 4502) está duplicada.
Não está claro para mim como corrigir isso.
Encontrei mais algumas duplicatas com IncomingReferer.where("path LIKE '%/m/search%'"), então também usei o destroy nesses registros. Minha instância agora parece não estar funcionando de forma alguma – até mesmo no servidor antigo, então vou tentar recriá-la.
[2021-07-03 17:28:53] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
[2021-07-03 17:28:53] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
ao tentar restaurar um novo backup.
Mas meu console mostra que eu limpei as instâncias no servidor em execução (que está de volta no ar após a reconstrução):
Basicamente, você deve tentar recriar o índice e continuar excluindo itens até conseguir reindexá-lo. Parece que você está fazendo o correto; só precisa continuar assim para todas as entradas duplicadas.
Se tiver um orçamento, pode postar no Marketplace.
Não é legal no Reino Unido expor nosso banco de dados a terceiros para corrigir esses problemas, e mesmo que fosse, não tenho interesse em fazê-lo, pois quero proteger a privacidade dos usuários.
Como mantenedor de software de código aberto, a ideia de levar isso ao Marketplace é decepcionante, especialmente quando parece haver um reconhecimento tácito de que os problemas foram introduzidos por uma atualização do Postgres que o Discourse incluiu em seu container Docker. Usamos o Discourse no container Docker porque entendemos as dependências fortemente acopladas e preferimos delegar o gerenciamento de versões e dependências à expertise da equipe do Discourse.
Parece ser aceito que se trata de uma regressão no Postgres 12 e existem algumas mitigações possíveis. No entanto, os primeiros relatos surgiram há mais de um ano, e tenho certeza de que haverá mais usuários afetados no futuro caso tentem restaurar um backup.
Preferiria patrocinar algum tempo de desenvolvimento para corrigir isso no Discourse upstream, para que outros também possam se beneficiar. Enquanto isso, nosso fórum não está funcional e precisarei consultar alguém com conhecimento de DBA em Postgres.
Desculpe não ter conseguido te dar instruções suficientes para resolver seu problema sozinho, mas foi assim que você fez parecer. Achei que pudesse ser um alívio, e não uma decepção, saber que existem outras formas de colocar seu fórum online novamente.
De jeito nenhum. Você não me deve nada — mas eu esperava que você tivesse uma solução rápida, dada sua história de postagens, e assumi que eu tivesse perdido algo óbvio, já que suas postagens pareciam ser uma resposta definitiva e o tópico estava fechado.
Infelizmente, isso ainda é um problema para nós, e não podemos migrar os servidores, o que é bastante preocupante.
Estaremos dispostos a pagar alguém para resolver isso, mas, após esse problema e o reconhecimento dele diversas vezes sem uma solução clara no fórum, estamos seriamente considerando migrar para um software de fórum diferente, como o Flarum. Pode não ser tão rico em recursos quanto o Discourse, mas é LAMP e eu (como alguém que não é desenvolvedor web) consigo entendê-lo.
Quando usamos o container Docker do Discourse, esperávamos que houvesse suporte. Se tivéssemos implantado tudo separadamente e usado nossa própria versão do Postgres, eu poderia entender a resposta. Mas até hoje, tudo o que fizemos foi usar o ambiente que vocês recomendaram e forneceram, e agora estamos bastante prejudicados em termos de migração para um novo servidor (temos um prazo iminente).
Neste momento, minha melhor aposta é um backup e restauração de volume Docker, porque os backups do Discourse não são utilizáveis. Isso também é preocupante: temos backups sendo feitos diariamente, mas não conseguimos restaurá-los em um novo ambiente do Discourse. Pergunto-me quantos outros encontrarão um problema assim em breve.