Entschuldige bitte, dass ich das Thema erneut aufgreife. Ich habe eine sehr seltsame Fehlermeldung erhalten:
discourse=# REINDEX SCHEMA CONCURRENTLY public;
ERROR: could not create unique index "index_tags_on_name_ccnew"
DETAIL: Key (name)=(chronicillness) is duplicated.
Ich gehe davon aus, dass sich das Problem mit der oben von @riking vorgeschlagenen Lösung beheben lässt, aber ich kann nicht herausfinden, wie ich die Syntax an meinen Fall anpassen soll.
Wenn Sie diesen Fehler sehen, haben Sie zwei Möglichkeiten:
Sie können das Problem umgehen … in diesem Fall enthält die Tabelle tags einen doppelten Eintrag mit dem Namen chronicillness.
Führen Sie eine Abfrage im Data Explorer durch, um die Zeilen zu suchen: select * from tags where name = 'chronicillness.
Löschen Sie den Duplikat-Eintrag:
./launcher enter app
rails c
Tag.find_by(id: ID_YOU_FOUND_IN_DATA_EXPLORER).destroy
Falls Sie eine Sicherungskopie Ihrer Datenbank haben und Details, die Sie mit Peter teilen möchten … teilen Sie diese entweder privat oder auf der PG-Mailingliste mit Peter.
Also ich habe ein von Discourse generiertes Backup von PostgreSQL 10. Ist das hilfreich? Kann ich einfach den PostgreSQL-Teil aus dem Archiv extrahieren und senden?
Ich bin mir nicht sicher… Was Peter wahrscheinlich braucht, ist, dass du deine Datenbank stoppst und den gesamten Inhalt des Ordners kopierst, der die Datenbank enthält.
Der beste Weg, das herauszufinden, ist, ihm eine E-Mail zu schreiben.
Die empfohlene Wiederherstellungsmethode in solchen Fällen besteht darin, den ungültigen Index zu löschen und REINDEX CONCURRENTLY erneut auszuführen. Der während der Verarbeitung erstellte parallele Index hat einen Namen, der mit dem Suffix ccnew endet, oder ccold, falls es sich um eine alte Indexdefinition handelt, die wir nicht löschen konnten. Ungültige Indizes können mit DROP INDEX gelöscht werden, einschließlich ungültiger Toast-Indizes.
Ich weiß nicht, wie man prüfen kann, ob diese Indizes gültig sind, aber wenn das Löschen eine Option ist, bin ich gerne bereit, sie zu löschen und neu zu indizieren.
EDIT: Funktioniert DROP INDEX wie hier vorgeschlagen?