Fallo de actualización PG::UniqueViolation -- no se pudo crear el índice único "unique_post_links_ccnew"

Tengo una instalación estándar que no logra actualizar a 2.8.0.beta2 con este error:

PG::UniqueViolation: ERROR:  no se pudo crear el índice único "unique_post_links_ccnew"

Proviene de

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

No parece ser un índice corrupto.

¿Esto ayuda?

[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]]

Al final, simplemente añadí un badX a las URLs duplicadas y funcionó. No tengo muy claro qué problemas podría generar esto en el futuro…

En nuestra experiencia, muchos de los supuestos errores de corrupción de índices “imposibles” en versiones anteriores de Postgres. ¿Sigues viendo esto?

Creo que no lo he visto desde que actualicé a pg12.

Llegamos hasta PG13, y creo que eso lo resolvió en su mayoría (índices corruptos) para nosotros, ¿verdad @sam?

@saj ha resuelto este problema. Lo hemos solucionado en nuestra infraestructura. La mayoría de los autoalojadores ya lo han solucionado.

El mecanismo que utilizábamos en el pasado para actualizar PG en nuestra imagen de código abierto tenía algunos problemas de seguridad inherentes debido a que libc cambiaba internamente entre las versiones de PG.

Creo que el problema ha desaparecido en su mayor parte en el ecosistema en general, aunque algunas actualizaciones antiguas aún pueden enfrentarlo. Será una pesadilla arreglar nuestro script de actualización de código abierto existente y lidiar con la enorme matriz de actualizaciones de PG.

Dicho esto, al menos ahora somos muy conscientes de la fuente del problema y estamos mejor posicionados para abordarlo en el futuro.