Попробовали ли вы выполнить чистую установку без восстановления, но с подключением к вашей существующей базе данных бэкенда?
Я полагаю, это может означать потенциальную потерю любых настроек, выполненных в интерфейсе, которые не были сохранены в базе данных? Однако я не уверен, что ещё резервируется и восстанавливается.
Возможно, вам стоит рассмотреть возможность перехода от Bitnami к стандартной установке. Ваши проблемы не вызваны «ошибками в миграции базы данных», они специфичны для Bitnami.
Разрешает ли Kubernetes ручную установку? Если да, то вы можете выполнить стандартную установку таким способом. (Я никогда не пробовал, поэтому не знаю, как работает Kubernetes)
Я вас прекрасно понимаю насчёт преимуществ стандартной установки и независимого, неофициального характера Helm-чарта Bitnami. Я не имел в виду, что вина лежит на самом Discourse. Мой выбор в пользу Bitnami по-прежнему зависит от расчёта, сравнивающего стоимость устранения проблем с чартом Bitnami и стоимость разработки собственного эквивалентного Helm-чарта на основе официально поддерживаемой установки, а затем устранения проблем с ним.
Я рассматривал этот вариант, но стараюсь избегать изменений в настройках чарта по умолчанию, чтобы оставаться «на основном пути». Тем не менее, я попытался обновить только сервер Discourse до версии 3.2.0, переопределив тег образа в Deployment, сохранив при этом существующую базу данных, чтобы проверить, завершится ли миграция успешно; она всё равно не удалась.
Я пытался вручную удалить и восстановить базу данных через kubectl exec в контейнер postgres, используя файл дампа SQL, сгенерированный самим Discourse, но это завершается ошибкой, связанной с таблицей sidebar_sections. В последний раз я создал новую виртуальную машину и следовал методу стандартной установки для установки Discourse версии 3.3.0. При попытке восстановить резервную копию возникла та же ошибка.
Мой вывод заключается в том, что, хотя архив резервной копии для продакшена был создан самим Discourse, структура базы данных моего продакшен-экземпляра версии 3.0.6 каким-то образом отличается от ожидаемой Discourse, что вызывает ошибки при миграциях. Если это так, я пессимистично оцениваю свои варианты. Единственная идея, которая у меня есть на данный момент, — начать вручную редактировать файл дампа SQL в архиве резервной копии, удаляя таблицы, вызывающие ошибки DuplicateTable на этапе миграции базы данных в процессе восстановления.
Надеюсь, это поможет кому-то не тратить столько же времени, сколько я потратил в этой ситуации. Ниже описан процесс, который позволил мне обновиться с Discourse v3.0.6 до v3.2.0 при использовании Helm-чарта Bitnami (с версии v11 до v12). Хотя, судя по комментариям выше, дополнительные предупреждения излишни, проблема вызвана ошибкой в Helm-чарте Bitnami и их кастомных образах; на официальные релизы Discourse это не влияет.
Ниже приведены инструкции по выполнению обновления. «Продакшн-сайт» — это релиз Helm-чарта сайта Discourse, который обновляется, а «миграционный сайт» — временный релиз чарта, развёрнутый параллельно в пространстве имён discourse-dev.
Продакшн-сайт
Переведите продакшн-форум в режим только для чтения в панели администратора резервных копий /admin/backups.
cat > /tmp/db_init.sql << EOF
DROP DATABASE bitnami_application;
CREATE DATABASE bitnami_application;
GRANT ALL PRIVILEGES ON DATABASE bitnami_application TO bn_discourse;
CREATE EXTENSION hstore;
CREATE EXTENSION pg_trgm;
ALTER database bitnami_application owner to bn_discourse ;
EOF
Скопируйте файл в под базы данных и выполните его: