Falha na atualização PG::UniqueViolation -- não foi possível criar o índice único "unique_post_links_ccnew"

Tenho uma instalação padrão que está falhando ao atualizar para 2.8.0.beta2 com o seguinte erro:

PG::UniqueViolation: ERROR:  não foi possível criar índice único "unique_post_links_ccnew"

Isso ocorre em:

I, [2021-06-25T18:35:47.756688 #1]  INFO -- : == 20210525112226 RemoveLengthConstrainFromTopicLinkUrl: migrando ============

Não parece ser um índice corrompido.

Isso ajuda?

[6] pry(main)> TopicLink.where(url: bad_url).pluck(:id, :topic_id, :post_id, :user_id)
=> [[15733, 14351, 63616, 911], [16131, 14505, 63986, 911], [27141, 14505, 63986, 1152]]

No final, apenas adicionei um badX às URLs duplicadas e funcionou. Não tenho certeza de quais problemas isso pode gerar no futuro…

Muitos bugs de corrupção de índice, supostamente “impossíveis”, em versões mais antigas do Postgres, em nossa experiência. Você ainda está vendo isso?

Acho que não o vejo desde a atualização para o pg12.

Fomos até o PG13, e acho que isso resolveu o problema (índices corrompidos) para nós, @sam?

@saj chegou ao fundo desta questão. Nós a resolvemos em nossa infraestrutura. A maioria dos auto-hospedeiros já a contornou.

O mecanismo que usamos no passado para atualizar o PG em nossa imagem de código aberto tinha alguns problemas de segurança inerentes devido à mudança da libc nos bastidores entre as versões do PG.

Acho que o problema agora desapareceu na maior parte do ecossistema, embora algumas atualizações antigas ainda possam enfrentá-lo. Será um pesadelo corrigir nosso script de atualização de código aberto existente e lidar com a enorme matriz de atualizações do PG.

Dito isso, pelo menos estamos muito cientes da origem do problema agora e estamos em melhor posição para abordá-lo daqui para frente.