清理上传并从S3中清除上传

启用“清理上传”功能,看到警告消息会让人感到不安。在将现有论坛迁移到 Discourse 时,此设置将保持禁用状态。并非所有导入脚本都能正确注册帖子中的所有上传内容,因此如果启用该设置,您可能会丢失大量附件。

您可以使用以下查询来检查上传内容是否已正确引用到帖子中:

select p.post_id, u.id as upload_id
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
where not exists(select * from upload_references r where r.upload_id = u.id)

如果一切正常,此查询不应返回任何行。如果您在 Data Explorer 插件 中使用此查询,它还将整齐地链接到包含未引用附件的帖子。

如果上述查询返回结果,您可以使用以下查询来修复缺失的上传引用:

insert into upload_references(upload_id, target_type, target_id, created_at, updated_at)
select u.id, 'Post', p.post_id, u.created_at, u.updated_at
from (select id post_id, (regexp_matches(cooked, 'data-download-href=[^\\s]+/default/([a-z0-9]+)', 'g'))[1] upload_sha from posts where raw like '%upload://%' order by created_at) as p
join uploads u on u.sha1 = p.upload_sha
on conflict do nothing;

您需要直接访问数据库才能进行更正。