Теперь я пытаюсь восстановить данные с одного продакшн-сайта на тестовый, но получаю:
ERROR: type "hotlinked_media_status" already exists
EXCEPTION: psql failed: ERROR: type "hotlinked_media_status" already exists
@david, не упустили ли вы какой-то случай, когда вы ранее исправляли это (кажется, тогда ошибка возникала при миграциях, а сейчас — при восстановлении)?
Из командной строки восстановление последней резервной копии (сегодня я разобрался с этим трюком 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"
Возможно, нет? Я успешно восстановил ту же резервную копию на своём dev-сервере.
Есть ли у вас какие-либо идеи, что я мог сделать, чтобы вызвать это, или что я могу сделать, чтобы исправить это? Я удалил базу данных и затем смог восстановить. Удаление базы данных стало реальным решением, но я не заслуживаю решения проблемы, которую (похоже, создал) сам.
Одно очень ценное наблюдение, которое я только что сделал: hotlinked_media_status — это просто первое действие в файле восстановления. Если вручную удалить его из существующей базы данных, восстановление не удастся на следующем операторе (CREATE TABLE public.admin_notices).
Таким образом, проблема не в определении этого конкретного типа. Это лишь симптом более серьёзной проблемы. Я подозреваю, что BackupRestore.move_tables_between_schemas(MAIN_SCHEMA, BACKUP_SCHEMA) не выполняет свою задачу.