升级在重复键错误("在帖子ID和URL MD5上索引帖子热链媒体")时失败

自动重建失败,看起来是这个问题的一些变体:

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"

不到一个月前重建过,当时没有报错,所以引入这个问题的似乎是最近的。

4 个赞

似乎与此最近的提交有关?

@david

2 个赞

是的,就是这样。我有一个修复程序正在开发中,应该在几分钟内合并。感谢报告 @axfelix

9 个赞

太快了!

我需要做些什么特别的事情来获取这个吗?在运行启动器重建时,我仍然遇到 Caused by:\nActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_post_hotlinked_media_on_post_id_and_url_md5" 错误,即使在执行了 Docker 清理之后。

修复程序几秒钟前刚刚通过了测试。如果您现在重新构建,它应该会工作得更好。请告诉我们进展如何。

5 个赞

我们找到了另一个可能导致此错误的地方。因此,如果第一个修复程序无效,这个应该可以::crossed_fingers:

(现已在 tests-passed 中上线)

4 个赞

在我的开发实例上,数据库迁移成功了,但如果我从 2022-04-27-153103-v20220407195246.tar.gz 恢复备份,则会失败:

                                                                                [361/9020]
正在迁移数据库...                                                                               EXCEPTION: /home/pfaffman/src/discourse-repos/discourse/lib/discourse.rb:126:in `exec': 数据库迁移失败。
忽略 /home/pfaffman/src/discourse-repos/discourse/db/schema_cache.yml,因为它已过期。当前模式版本是 20220407195246,但模式缓存文件中的版本是 20220428094027。
rake aborted!
StandardError: 发生错误,此迁移及之后的所有迁移均已取消:

后面还有更多内容,其中包含:

ActiveRecord::StatementInvalid: PG::DuplicateObject: ERROR:  type \"hotlinked_media_status\" already exist
1 个赞

很高兴地通知您,第一个修复程序在通过测试后对我们有效!

2 个赞

太好了,感谢确认!

我为此问题打开了一个 PR:

4 个赞
完成!
[成功]
恢复完成。

谢谢!

2 个赞