Dringend, Upgrade-Build fehlgeschlagen UniqueViolation

Ich habe versucht, Discourse zu aktualisieren, und erhielt folgende Meldung:

I, [2021-01-21T18:39:25.045454 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2021-01-21 18:39:32.724 UTC [4051] discourse@discourse LOG:  duration: 336.116 ms  statement: UPDATE users
	SET locale = 'en_GB'
	WHERE locale = 'en'
	
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse ERROR:  duplicate key value violates unique constraint "index_users_on_username_lower"
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse DETAIL:  Key (username_lower)=(xyz123) already exists.
2021-01-21 18:39:33.373 UTC [4051] discourse@discourse STATEMENT:  UPDATE users
	SET locale = 'en'
	WHERE locale = 'en_US'
	
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Ich habe versucht, ./launcher enter app und su postgres -c 'psql discourse' auszuführen, und erhielt folgenden Fehler:

psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?

Hast du eine Idee, @merefield? Danke!

Hey.

Wenn ein Upgrade fehlschlägt, bleibt der Container gestoppt. (Versuche, dich über den Browser mit deiner Site zu verbinden, und du wirst sehen, dass dies der Fall ist.)

Möglicherweise hast du einfach nur den letzten funktionierenden Container nicht gestartet. (Vor dem Upgrade)

Starte ihn mit ./launcher start app, betrete dann den Container und versuche, in die DB-CLI zu springen.

Danke, ich habe den Container neu gestartet. Hast du noch Ideen? Ich habe ./launcher enter app ausprobiert. Gibt es sonst noch etwas, das ich versuchen kann?

ubuntu@:/var/discourse$ ./launcher start app
WARNING: Docker version 17.05.0-ce deprecated …
Nothing to do, your container has already started!

Hast du einen Fehler erhalten, als du den Container betreten hast?

Kein Fehler, aber als ich ./launcher logs app ausgeführt habe, erhielt ich Folgendes:

ok: run: redis: (pid 47) 918s
timeout: down: postgres: 1s, normalerweise aktiv, soll aktiv sein
ok: run: redis: (pid 47) 925s
timeout: down: postgres: 0s, normalerweise aktiv, soll aktiv sein
ok: run: redis: (pid 47) 933s
ok: run: postgres: (pid 1855) 0s
supervisor pid: 1847 unicorn pid: 1857
config/unicorn_launcher: Zeile 71: kill: (1857) - Kein solcher Prozess
config/unicorn_launcher: Zeile 15: kill: (1857) - Kein solcher Prozess
(1847) wird beendet
ok: run: redis: (pid 47) 938s
timeout: down: postgres: 0s, normalerweise aktiv, soll aktiv sein
ok: run: redis: (pid 47) 945s

Was ist das Ergebnis von ps -ef | grep postgres?

root 38 35 0 19:09 ? 00:00:00 runsv postgres
root 46 38 0 19:09 ? 00:00:00 svlogd /var/log/postgres
root 2573 2571 0 19:31 ? 00:00:00 sv start postgres
root 2575 2497 0 19:31 ? 00:00:00 grep postgres

Soll ich es innerhalb des Containers oder direkt auf dem Linux-System ausführen?

Inside. Sieht so aus, als würde es nicht laufen.

Sie müssen es vermutlich manuell neu starten, und zwar als postgres-Benutzer.

Kennen Sie den schnellen Befehl, um es neu zu starten?

Du könntest es versuchen:

su - postgres /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main – ersetze die 13 durch deine aktuelle Version.

Dies ist der Befehl, der bei einer fehlerfreien Installation im Prozess angezeigt wird.

Dafür gibt es jedoch keine Garantie, da ich es nicht getestet habe!

Nein, mach das bitte nicht, siehe weiter unten.

Danke. Ich habe Version 12, aber folgende Fehlermeldung erhalten:

su: ungültige Option – ‘D’
Versuchen Sie ‘su --help’ für weitere Informationen.

-D ist ein gültiger Schalter.

Stellen Sie sicher, dass Sie den Bindestrich nicht außerhalb des Code-Beispiels eingefügt haben?

Übrigens, ich frage mich, ob dein Upgrade-Prozess auf Version 13 fehlgeschlagen ist.

Falls ja, könntest du dir diesen Thread ansehen und gegebenenfalls dort posten: PostgreSQL 13 update

Ja, ich bin immer noch bei Version 12…

Entschuldigung, sieht so aus, als ob dies von einem übergeordneten Prozess eingekapselt und verwaltet wird.

Wenn ich meinen beende, startet er automatisch neu.

Versuche: sv start postgres

als root

Meinst du, dass man es in einem Docker-Container ausführen soll? Danke.

Ja, genau dort läuft der Dienst.

Noch besser ist folgendes: sv restart postgres

Überprüfen Sie dann:

tail /var/log/postgres/current

Ein gesunder Zustand sieht etwa so aus:

2021-01-21 20:21:10.284 UTC [575368] LOG: database system is ready to accept connections irgendwo in der Ausgabe.

Hier ist das Fehlerprotokoll -

root@ip–app:/var/www/discourse# cat /var/log/postgresql/postgresql-12-main.log
2021-01-21 18:12:04.965 UTC [623] FATAL: Datenbankdateien sind inkompatibel mit dem Server
2021-01-21 18:12:04.965 UTC [623] DETAIL: Das Datenverzeichnis wurde mit PostgreSQL-Version 13 initialisiert, die mit dieser Version 12.3 (Debian 12.3-1.pgdg100+1) nicht kompatibel ist.
pg_ctl: Server konnte nicht gestartet werden
Überprüfen Sie die Protokollierung.