У меня возникла следующая проблема. Я веду форум Discourse уже более 10 лет, и поскольку некоторое время не мог устанавливать обновления, я решил настроить новый сервер:
Старый сервер работает на версии: 3.4.0.beta4-dev
Новый сервер: Последняя версия
Размер резервной копии уже составляет 673,2 МБ в формате .gz, без учёта вложений.
К сожалению, процесс восстановления постоянно прерывается. В файле журнала содержится следующая ошибка:
[2026-06-16 07:54:52] ERROR: could not create unique index «index_incoming_referers_on_path_and_incoming_domain_id»
[2026-06-16 07:54:52] DETAIL: Key (path, incoming_domain_id)=(//, 5) is duplicated.
[2026-06-16 07:54:52] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(//, 5) is duplicated.
[2026-06-16 07:54:52] /var/www/discourse/lib/backup_restore/database_restorer.rb:93:in 'BackupRestore::DatabaseRestorer#restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in 'BackupRestore::DatabaseRestorer#restore'
/var/www/discourse/lib/backup_restore/restorer.rb:61:in 'BackupRestore::Restorer#run'
/var/www/discourse/script/spawn_backup_restore.rb:20:in 'Object#restore'
/var/www/discourse/script/spawn_backup_restore.rb:33:in 'block in '
/var/www/discourse/script/spawn_backup_restore.rb:4:in 'Kernel#fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in ''
[2026-06-16 07:54:52] Trying to rollback...
Что я могу сделать, чтобы исправить эту проблему и не потерять данные за последние 10 лет?
Таблица incoming_referers отслеживает пути URL, по которым посетители попали на ваш форум. У неё есть уникальный индекс, что означает отсутствие двух строк с одинаковой комбинацией пути и домена.
В вашей базе данных есть две строки с path='//' и incoming_domain_id=5. Когда система пытается восстановить этот уникальный индекс во время восстановления резервной копии, она обнаруживает дубликат и прерывает всю транзакцию восстановления.
Так что вам нужно найти и удалить этот дубликат в таблице incoming_referers, а затем создать новую резервную копию для восстановления на новом сервере.
Извините, что беспокою, но, кажется, я делаю что-то не так — после выполнения команды «discourse=# select * from incoming_referers where path LIKE ‘%/search/’ ORDER BY incoming_domain_id;» возникает ошибка синтаксиса.
Хорошо, я также установил «apt install postgresql-client-common». Однако ошибка «Error: You must install at least one postgresql-client- package.» всё ещё сохраняется.
Я установил Rails, и, кажется, всё получилось. Я также запустил его через «rails c». Это тоже сработало, но при вводе команды получилось вот так:
“root@community:/var/discourse# ActiveRecord::Base.connection.execute(<<~SQL)
-bash: syntax error near unexpected token `<<’
root@community:/var/discourse# SELECT id, path, incoming_domain_id
SELECT: команда не найдена
root@community:/var/discourse# FROM incoming_referers
FROM: команда не найдена
root@community:/var/discourse# WHERE path = ‘//’
WHERE: команда не найдена
root@community:/var/discourse# AND incoming_domain_id = 5
AND: команда не найдена
root@community:/var/discourse# SQL”
Не переживайте, возможно, мои инструкции просто не очень хорошие
Я немного запутался, когда вы сказали, что только что установили Rails и не можете получить доступ к своей базе данных. Может быть, всё иначе из-за старой версии, но, кажется, я тоже уже не знаю, что делать.
В любом случае, когда вы окажетесь в Rails, приглашение командной строки должно измениться. Судя по вашему выводу, вы пока не вошли в консоль Rails.
Даже не уверен, что вы находитесь в самом контейнере. Вы уже выполнили ./launcher enter app?