Aufräumen von Uploads und Löschen von Uploads aus S3

Das Aktivieren von „Uploads bereinigen“ klingt mit der Warnmeldung beängstigend. Beim Konvertieren eines bestehenden Forums in Discourse wird diese Einstellung deaktiviert. Nicht alle Import-Skripte registrieren alle Uploads in Beiträgen ordnungsgemäß. Wenn Sie diese Einstellung aktivieren, verlieren Sie möglicherweise viele Anhänge.

Mit der folgenden Abfrage können Sie überprüfen, ob Uploads ordnungsgemäß von den Beiträgen referenziert werden:

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)

Diese sollte keine Zeilen zurückgeben, wenn alles korrekt ist. Wenn Sie diese Abfrage im Data Explorer Plugin verwenden, werden auch die Beiträge mit nicht referenzierten Anhängen ordnungsgemäß verlinkt.

Wenn die obige Abfrage Ergebnisse zurückgibt, können Sie die fehlenden Upload-Referenzen mit der folgenden Abfrage beheben:

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;

Sie benötigen direkten Datenbankzugriff, um die korrigierende Änderung vorzunehmen.