Activer le « nettoyage des téléversements » semble effrayant avec le message d’avertissement. Lors de la conversion d’un forum existant en Discourse, ce paramètre sera désactivé. Tous les scripts d’importation n’enregistreront pas correctement tous les téléversements dans les publications, donc si vous l’activez, vous pourriez perdre de nombreuses pièces jointes.
Avec la requête suivante, vous pouvez vérifier si les téléversements sont correctement référencés par les publications :
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)
Cela ne devrait renvoyer aucune ligne si tout est correct. Si vous utilisez cette requête dans le plugin Data Explorer, elle liera également proprement les publications qui ont des pièces jointes non référencées.
Si la requête ci-dessus renvoie des résultats, vous pouvez corriger les références de téléversement manquantes avec la requête suivante :
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;
Vous aurez besoin d’un accès direct à la base de données pour effectuer la modification corrective.