Wie führt man SQL-Abfragen aus, wenn der Container nicht startet? (Neuerstellung fehlgeschlagen)

Hallo.

Ich habe versucht, Updates auszuführen und neu zu erstellen, aber ich bin auf diesen schönen Fehler gestoßen:

I, [2023-01-18T08:05:48.701709 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1]  INFO -- :
I, [2023-01-18T08:05:52.431807 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL:  Key (name)=(vuejs) is duplicated.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT:  REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

PG::UniqueViolation: ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL:  Key (name)=(vuejs) is duplicated.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'

Es gibt andere Themen im Forum mit ähnlichen Problemen (1, 2, 3), aber wenn ich versuche, in den Container einzutreten, erhalte ich Folgendes:

/var/discourse# ./launcher enter app
x86_64 arch detected.
Error: No such container: app

Daher kann ich Indizes nicht manuell löschen.

Gibt es andere Vorschläge, welchen Ansatz ich als Nächstes verfolgen sollte?

2 „Gefällt mir“

Hallo Ionut,

Vielen Dank für die Fehlerberichterstattung. Ich werde mir das ansehen, aber ich glaube, es gibt ein Problem mit einem Index in Ihrer Datenbank und eine kürzliche Migration versucht, dies zu beheben, aber einige Probleme können nicht ohne menschliches Eingreifen behoben werden.

Ich glaube, der Commit, der die fehlgeschlagene Migration eingeführt hat, ist dieser:

Sie können versuchen, Ihre Discourse-Instanz auf die vorherige Version zu fixieren, die dem Commit 690e2f15ab9549486aaa6750e1093c1336bf17f2 entspricht. Bearbeiten Sie Ihre app.yml-Datei und setzen Sie den version-Schlüssel unter params. Stellen Sie sicher, dass Sie diesen Schlüssel auch auskommentieren!

Dann sollte alles starten und Sie sollten den doppelten vuejs-Tag entfernen können, aber das könnte einige unerwünschte Auswirkungen haben, wenn der doppelte Tag in Gebrauch ist. Wir werden versuchen, eine bessere Lösung zu finden, aber das sollte bis dahin funktionieren.

2 „Gefällt mir“

Nach dem Hochfahren konnte ich mit dem Data Explorer Plugin alle doppelten Tags finden:

SELECT name, count(*)
    FROM tags
    GROUP BY name
     HAVING count(*) > 1

Aus irgendeinem Grund gab es etwa zehn doppelte Tags. Ich frage mich, warum und wie diese überhaupt dort erschienen sind…

Ich habe es geschafft, diese Dinger auszulöschen, die Versionssperre aus der yml-Datei entfernt, neu kompiliert, die Dinge sehen jetzt gut aus.

Danke!

:+1:

5 „Gefällt mir“

Wir haben das schon früher gesehen, es ist ein Albtraumproblem, aber wir haben es auf Upgrade-Probleme eingegrenzt.

Die Indexstruktur in PG hängt vom Installationszeitpunkt ab, und Upgrades können manchmal zu einem Albtraum führen.

Wenn der Reindex nicht früh genug durchgeführt wird, kann es zu Problemen kommen. Einige unserer früheren PG-Docker-Upgrades haben dies nicht durchgeführt… und einige alte Installationen haben leider eine kleine Zeitbombe.

Dies ist heutzutage im Ökosystem größtenteils gelöst, aber einige Probleme bleiben bestehen.

2 „Gefällt mir“

Vielleicht hilft das bei der weiteren Identifizierung der Ursache, hier sind also einige weitere Details zum System:

Die Installation ist tatsächlich uralt, seit 2014, aber das System wird mindestens einmal im Monat aktualisiert (obwohl normalerweise alle zwei Wochen). Daher wurde nie eine Hauptversion übersprungen.

Es gibt keine Versionssperre, sodass wir im Grunde auf der neuesten Version im main-Branch laufen (YOLO!).

Obwohl wir vor einiger Zeit ein paar wenige inoffizielle ausprobiert haben, sind alle installierten Plugins offiziell und das schon seit… 5 Jahren oder länger.

1 „Gefällt mir“

Habe das gleiche Problem, ich bin dir bis zu diesem Satz gefolgt.

Wie entfernst du die Duplikate tatsächlich? Einfach eine delete SQL-Anweisung im Data Explorer ausführen? Was ist mit den Fremdtabelleneinträgen, die auf dieses Tag verweisen?

Update 1

OK, ich sehe, dass du keine update-Anweisungen ausführen kannst.

Ich habe jetzt die GUI benutzt und das Tag einfach umbenannt.

Bearbeiten Sie den Tag (indem Sie zu /tag/foo gehen) und benennen Sie ihn um oder entfernen Sie ihn.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.