Ich habe folgendes Problem. Ich betreibe seit über 10 Jahren ein Discourse-Forum, und da ich seit einiger Zeit keine Updates mehr installieren konnte, wollte ich einen neuen Server einrichten:
Alter Server läuft mit: 3.4.0.beta4-dev
Neuer Server: Neueste Version
Das Backup hat bereits eine Größe von 673,2 MB als .gz-Datei, ohne Uploads.
Leider wird die Wiederherstellung ständig abgebrochen. Die Logdatei enthält diesen Fehler:
[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...
Was kann ich tun, um dieses Problem zu beheben und die letzten 10 Jahre an Daten nicht zu verlieren?
Die Tabelle incoming_referers verfolgt die URL-Pfade, über die Besucher auf dein Forum gelangt sind. Sie verfügt über einen eindeutigen Index, was bedeutet, dass keine zwei Zeilen dieselbe Kombination aus Pfad und Domain haben dürfen.
Deine Datenbank enthält zwei Zeilen mit path='//' und incoming_domain_id=5. Wenn versucht wird, diesen eindeutigen Index während der Wiederherstellung neu aufzubauen, findet er das Duplikat und bricht die gesamte Wiederherstellungs-Transaktion ab.
Du musst also dieses Duplikat in incoming_referers finden und bereinigen und anschließend ein neues Backup erstellen, um es auf dem neuen Server wiederherzustellen.
Tut mir leid, dass ich Sie störe, aber ich scheine etwas falsch zu machen. Nach dem Ausführen des Befehls „discourse=# select * from incoming_referers where path LIKE ‘%/search/’ ORDER BY incoming_domain_id;“ erhalte ich einen Syntaxfehler.
Okay, ich habe jetzt auch „apt install postgresql-client-common“ installiert. Allerdings erhalte ich immer noch die Fehlermeldung „Error: You must install at least one postgresql-client- package.“
Es tut mir wirklich, wirklich leid, dass ich mich so dumm angestellt habe.
Ich habe Rails jetzt installiert, und es scheint geklappt zu haben. Ich habe es auch mit „rails c“ ausgeführt. Das scheint auch zu funktionieren, aber wenn ich den Befehl eingebe, sieht das so aus:
„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: Befehl nicht gefunden
root@community:/var/discourse# FROM incoming_referers
FROM: Befehl nicht gefunden
root@community:/var/discourse# WHERE path = ‘//’
WHERE: Befehl nicht gefunden
root@community:/var/discourse# AND incoming_domain_id = 5
AND: Befehl nicht gefunden
root@community:/var/discourse# SQL“
Mach dir keine Sorgen, vielleicht sind meine Anweisungen einfach nicht so gut
Ich bin verwirrt, wenn du sagst, dass du Rails gerade erst installiert hast und keinen Zugriff auf deine Datenbank hast. Vielleicht ist alles anders, weil es sich um eine ältere Version handelt, aber ich glaube, ich bin jetzt auch überfragt.
Wie auch immer, sobald du in Rails bist, sollte die Eingabeaufforderung anders aussehen. Aus deiner Ausgabe geht hervor, dass du noch nicht in der Rails-Konsole bist.
Ich glaube nicht einmal, dass du dich im eigentlichen Container befindest. Hast du ./launcher enter app ausgeführt?