ich versuche, ein Backup auf eine neue Discourse-Instanz wiederherzustellen, da ich gerade eine Servermigration durchführe. Leider erhalte ich diesen Fehler:
Das hat leider nicht geholfen, und ich erhalte beim Wiederherstellen weiterhin diese Meldung:
[2021-07-03 16:53:41] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 16:53:41] DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
[2021-07-03 16:53:41] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/search, 4502) is duplicated.
Mir ist nicht klar, wie ich das beheben kann.
Ich habe weitere Duplikate mit IncomingReferer.where("path LIKE '%/m/search%'") gefunden und diese ebenfalls mit destroy gelöscht. Meine Instanz scheint jetzt überhaupt nicht mehr zu funktionieren – sogar auf dem alten Server nicht –, also werde ich versuchen, sie neu aufzubauen.
[2021-07-03 17:28:53] ERROR: could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
[2021-07-03 17:28:53] DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
[2021-07-03 17:28:53] EXCEPTION: psql failed: DETAIL: Key (path, incoming_domain_id)=(/osmc/osmc, 2939) is duplicated.
beim Versuch, ein neues Backup wiederherzustellen.
Aber meine Konsole zeigt an, dass ich die Instanzen auf dem laufenden Server bereinigt habe (der nach dem Neuaufbau wieder online ist):
Im Grunde geht es darum, den Index neu aufzubauen und solange Dinge zu löschen, bis Sie ihn neu indizieren können. Es sieht so aus, als ob Sie bereits auf dem richtigen Weg sind; Sie müssen dies einfach für alle doppelten Einträge wiederholen.
Wenn Sie ein Budget haben, können Sie im Kanal Marketplace posten.
Es ist in Großbritannien nicht legal, unsere Datenbank Dritten zur Behebung dieser Probleme offenzulegen. Selbst wenn es erlaubt wäre, habe ich kein Interesse daran, da ich die Privatsphäre der Nutzer schützen möchte.
Als Maintainer eines Open-Source-Projekts finde ich den Vorschlag, dies an Marketplace zu verweisen, enttäuschend – besonders angesichts der stillschweigenden Anerkennung, dass die Probleme durch ein Postgres-Update verursacht wurden, das Discourse in seinem Docker-Container gebündelt hat. Wir nutzen Discourse im Docker-Container, weil wir die eng gekoppelten Abhängigkeiten verstehen und das Versions- und Abhängigkeitsmanagement an die Expertise des Discourse-Teams delegieren möchten.
Es scheint akzeptiert zu sein, dass es sich um eine Regression in Postgres 12 handelt, und es gibt einige mögliche Gegenmaßnahmen. Die ersten Berichte kamen jedoch bereits vor über einem Jahr herein, und ich bin sicher, dass es in Zukunft weitere betroffene Nutzer geben wird, die versuchen, ein Backup wiederherzustellen.
Ich würde es bevorzugen, Entwicklungszeit zu sponsern, um das Problem upstream in Discourse zu beheben, damit auch andere davon profitieren können. In der Zwischenzeit ist unser Forum nicht funktionsfähig, und ich werde mich an jemanden mit Postgres-DBA-Kenntnissen wenden müssen.
es tut mir leid, dass ich dir nicht genügend Anleitung geben konnte, damit du dein Problem selbst lösen kannst – so ist es aber rübergekommen. Ich dachte, es wäre eher eine Erleichterung als eine Enttäuschung zu hören, dass es andere Möglichkeiten gibt, dein Forum wieder online zu bringen.
Überhaupt nicht. Du schuldest mir nichts – aber ich hatte gehofft, dass du aufgrund deiner Beitragshistorie eine schnelle Lösung hast, und ich ging davon aus, dass ich etwas Offensichtliches übersehen habe, da deine Beiträge eine definitive Antwort zu sein schienen und das Thema geschlossen war.
Leider ist dies für uns immer noch ein Problem, und wir können die Server nicht migrieren, was eher besorgniserregend ist.
Wir sind gerne bereit, jemanden zu bezahlen, um dies zu lösen, aber nach diesem Problem und der wiederholten Anerkennung ohne klare Lösung im Forum erwägen wir ernsthaft, zu einer anderen Forumssoftware wie Flarum zu migrieren. Sie mag nicht so funktionsreich sein wie Discourse, aber sie basiert auf LAMP, und ich (als Nicht-Webentwickler) kann mich damit auseinandersetzen.
Als wir den Discourse-Docker-Container verwendeten, erwarteten wir Unterstützung. Wenn wir alles separat bereitgestellt und unsere eigene Version von Postgres verwendet hätten, könnte ich die Antwort nachvollziehen. Doch bis dato haben wir nur die Umgebung genutzt, die Sie empfohlen und selbst bereitgestellt haben, und jetzt sind wir hinsichtlich des Wechsels auf einen neuen Server ziemlich in der Klemme (wir haben ein unmittelbar bevorstehendes Deadline).
An diesem Punkt ist mein bester Versuch ein Backup und eine Wiederherstellung über ein Docker-Volume, da die Discourse-Backups nicht verwendbar sind. Das ist ebenfalls beunruhigend: Wir haben tägliche Backups, die erstellt werden, können aber nicht tatsächlich in eine neue Discourse-Umgebung wiederhergestellt werden. Ich frage mich, wie viele andere in naher Zukunft auf ein solches Problem stoßen werden.
Es gab tatsächlich einige Fehler in Postgres, die zu beschädigten Indizes führen konnten. Wir glauben, dass die meisten davon in Postgres 13.x behoben sind.