Восстановление завершается ошибкой: "hotlinked_media_status" уже существует

Продолжение обсуждения из Обновление завершается ошибкой дублирования ключа («index post hotlinked media on post id and url md5»):

Теперь я пытаюсь восстановить данные с одного продакшн-сайта на тестовый, но получаю:

ERROR:  type "hotlinked_media_status" already exists
EXCEPTION: psql failed: ERROR:  type "hotlinked_media_status" already exists

@david, не упустили ли вы какой-то случай, когда вы ранее исправляли это (кажется, тогда ошибка возникала при миграциях, а сейчас — при восстановлении)?

Как вы восстанавливаете сайт? Через интерфейс? через CLI Discourse? напрямую через psql?

Из командной строки восстановление последней резервной копии (сегодня я разобрался с этим трюком sed, но результат был бы тем же, даже если бы я просто скопировал и вставил).

$(discourse restore |sed -n '3p')

Резервная копия находится в S3 и была восстановлена из немного более старой версии:

Discourse 3.4.0.beta1-dev - https://github.com/discourse/discourse версия a3d61ba1c43931eb688f9b2b85c207b5bab02b8c

до

Discourse 3.4.0.beta2-dev - https://github.com/discourse/discourse версия f405c021ebd36d5f11499159bd2b54098356a8f9"

Сможете ли вы воспроизвести проблему на любой другой установке?

Довольно удивительно, что эта проблема возникает спустя более чем два года и без каких-либо других сообщений :thinking:

Возможно, нет? Я успешно восстановил ту же резервную копию на своём dev-сервере.

Есть ли у вас какие-либо идеи, что я мог сделать, чтобы вызвать это, или что я могу сделать, чтобы исправить это? Я удалил базу данных и затем смог восстановить. Удаление базы данных стало реальным решением, но я не заслуживаю решения проблемы, которую (похоже, создал) сам.

Одно очень ценное наблюдение, которое я только что сделал: hotlinked_media_status — это просто первое действие в файле восстановления. Если вручную удалить его из существующей базы данных, восстановление не удастся на следующем операторе (CREATE TABLE public.admin_notices).

Таким образом, проблема не в определении этого конкретного типа. Это лишь симптом более серьёзной проблемы. Я подозреваю, что BackupRestore.move_tables_between_schemas(MAIN_SCHEMA, BACKUP_SCHEMA) не выполняет свою задачу.