La actualización falla por error de clave duplicada ("índice de medios hotlinked en publicación por ID y hash MD5 de URL")

Falló una reconstrucción automática, parece que hay variaciones en este problema:

2022-05-03 15:30:54.370 UTC [1262] discourse@discourse LOG:  duration: 1707.909 ms  statement: INSERT INTO post_hotlinked_media (post_id, url, status, upload_id, created_at, updated_at)
        SELECT
          post_id,
          obj.key AS url,
          'downloaded',
          obj.value::bigint AS upload_id,
          pcf.created_at,
          pcf.updated_at
        FROM post_custom_fields pcf
        JOIN json_each_text(pcf.value::json) obj ON true
        JOIN uploads ON obj.value::bigint = uploads.id
        WHERE name='downloaded_images'

ERROR: duplicate key value violates unique constraint "index_post_hotlinked_media_on_post_id_and_url_md5"

Había reconstruido hace menos de un mes sin errores, así que lo que sea que introdujo esto parece haber sido reciente.

4 Me gusta

¿parece tener algo que ver con esta confirmación reciente?

@david

2 Me gusta

Sí, eso es todo. Tengo una solución en proceso, debería fusionarse en los próximos minutos. Gracias por informar @axfelix

9 Me gusta

¡Gracias, eso fue rápido!

¿Necesito hacer algo especial para descargar esto? Todavía obtengo Causado por: ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: la clave duplicada viola la restricción única «index_post_hotlinked_media_on_post_id_and_url_md5» al ejecutar una reconstrucción del lanzador, incluso después de hacer un Docker prune.

La corrección acaba de pasar las pruebas hace unos segundos. Si reconstruyes ahora, debería funcionar mucho mejor. Avísanos cómo va.

5 Me gusta

Encontramos un lugar más que podría causar este error. Así que si la primera solución no ayudó, esta debería hacerlo :crossed_fingers:

(ahora activo en tests-passed)

4 Me gusta

En mi instancia de desarrollo, migra la base de datos correctamente, pero si restauro una copia de seguridad de 2022-04-27-153103-v20220407195246.tar.gz, falla:

                                                                                [361/9020]
Migrating the database...                                                                               EXCEPTION: /home/pfaffman/src/discourse-repos/discourse/lib/discourse.rb:126:in `exec': Failed to migrat
e database.
Ignoring /home/pfaffman/src/discourse-repos/discourse/db/schema_cache.yml because it has expired. The cu
rrent schema version is 20220407195246, but the one in the schema cache file is 20220428094027.
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

seguido de más de eso con algunos de estos:

ActiveRecord::StatementInvalid: PG::DuplicateObject: ERROR:  type \"hotlinked_media_status\" already exist
1 me gusta

¡Solo para informar que la primera corrección funcionó para nosotros después de pasar las pruebas!

2 Me gusta

¡Genial, gracias por confirmar!

Abrí una PR con una corrección para esa:

4 Me gusta
¡Terminado!
[ÉXITO]
Restauración completada.

¡Gracias!

2 Me gusta