Очистка загрузок и удаление файлов из 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;

Для внесения корректирующих изменений потребуется прямой доступ к базе данных.