Upgrade fehlgeschlagen. Datenbank gestoppt. (Multisite-Installation)

Ich habe mich angemeldet. Seit 11 Monaten kein Update. Habe versucht, den Docker Manager zu aktualisieren. Es schien nie abzuschließen. Am nächsten Tag war die Admin-Seite so ziemlich kaputt. Ich habe versucht, ./launcher rebuild app auszuführen. Ich bekomme Folgendes:

2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse ERROR:  must be owner of extension vector
2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

Aber die Datenbank ist gestoppt, daher funktionieren die von mir gefundenen Korrekturen nicht.

2025-10-31 00:27:40.021 UTC [662] FATAL:  database files are incompatible with server
2025-10-31 00:27:40.021 UTC [662] DETAIL:  The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 13.16 (Debian 13.16-1.pgdg120+1).

Aber

root@main-app:/var/lib/postgresql# pg_config --version
PostgreSQL 16.4 (Debian 16.4-1.pgdg120+1)

EDIT: Es sieht so aus, als wäre die DB immer noch im 13er-Format?

root@main-app:/var/lib/postgresql# ls
13  take-database-backup

Wenn Sie das Thema PostgreSQL 15 Update – Ankündigungen noch nicht gesehen haben, könnten Sie dort beginnen. Es werden eine Reihe von Problemen und Empfehlungen besprochen.

2 „Gefällt mir“

Danke. Zu viel, um es wirklich zu verstehen, aber nichts scheint mein Problem zu sein. :pensive_face: Die Datenbank scheint während des Wiederaufbauprozesses zu laufen, was das Seltsame ist. Zumindest soweit ich das in den Dingen erkennen kann, die vorbeiscrollen.

Das wird nach 11 Monaten meistens nie funktionieren.

Du musst definitiv das PostgreSQL 15 Upgrade durchführen, und das ist Teil des Problems. Es ist möglich, dass du auf PostgreSQL 13 wechseln und die Dinge wieder zum Laufen bringen kannst, bevor du das Upgrade durchführst.

1 „Gefällt mir“

Ist dies eine Standardinstallation?

Nicht, wenn Multisite immer noch als nicht unterstützt gilt.

Das Problem scheint zu sein, dass bei der Installation keine Benutzer/Passwörter mit den einzelnen Datenbanken verbunden waren. Das scheint sich zu ändern. Dort liegt das Problem. Ich habe versucht, ein wenig damit zu experimentieren, indem ich einen Benutzer und dann einen Benutzer mit einem leeren Passwort hinzugefügt habe, aber das hat nicht geholfen.

Meine Konfiguration im Vergleich zur neuen Beispielkonfiguration:


secondsite:
adapter: postgresql
database: b_discourse

pool: 25
timeout: 5000
db_id: 2
host_names:

mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000

host_names:

Bedeutet dies, dass die Datenbank tatsächlich während des Installationsvorgangs gestartet wird?

2025-10-31 15:14:30.984 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0
-14+deb12u1) 12.2.0, 64-bit
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv4 address “0.0.0.0”, port 5432
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv6 address “::”, port 5432
2025-10-31 15:14:31.055 UTC [45] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432”
2025-10-31 15:14:31.135 UTC [56] LOG:  database system was shut down at 2025-10-31 02:08:49 UTC
2025-10-31 15:14:31.199 UTC [45] LOG:  database system is ready to accept connections
I, [2025-10-31T15:14:35.760150 #1]  INFO – :
I, [2025-10-31T15:14:35.760557 #1]  INFO – : > /usr/local/bin/create_db
2025-10-31 15:14:35.912 UTC [63] postgres@postgres ERROR:  database “discourse” already exists
2025-10-31 15:14:35.912 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse ERROR:  role “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role “discourse” already exists
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
I, [2025-10-31T15:14:37.265035 #1]  INFO – : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-10-31T15:14:37.265325 #1]  INFO – : > echo postgres installed!
I, [2025-10-31T15:14:37.270967 #1]  INFO – : postgres installed!

I, [2025-10-31T15:14:37.271578 #1]  INFO – : > sudo -u postgres createdb b_discourse || exit 0
2025-10-31 15:14:37.380 UTC [104] postgres@postgres ERROR:  database “b_discourse” already exists
2025-10-31 15:14:37.380 UTC [104] postgres@postgres STATEMENT:  CREATE DATABASE b_discourse;
createdb: error: database creation failed: ERROR:  database “b_discourse” already exists
I, [2025-10-31T15:14:37.385149 #1]  INFO – :
I, [2025-10-31T15:14:37.385968 #1]  INFO – : > sudo -u postgres psql b_discourse
I, [2025-10-31T15:14:37.390476 #1]  INFO – : grant all privileges on database b_discourse to discourse;

I, [2025-10-31T15:14:37.515870 #1]  INFO – : > sudo -u postgres createdb c_discourse || exit 0
2025-10-31 15:14:37.625 UTC [111] postgres@postgres ERROR:  database “c_discourse” already exists
2025-10-31 15:14:37.625 UTC [111] postgres@postgres STATEMENT:  CREATE DATABASE c_discourse;
createdb: error: database creation failed: ERROR:  database “c_discourse” already exists
I, [2025-10-31T15:14:37.629387 #1]  INFO – :
I, [2025-10-31T15:14:37.630145 #1]  INFO – : > sudo -u postgres psql c_discourse
I, [2025-10-31T15:14:37.634672 #1]  INFO – : grant all privileges on database c_discourse to discourse;

I, [2025-10-31T15:14:37.758171 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “alter schema public owner to discourse;”’
I, [2025-10-31T15:14:37.876557 #1]  INFO – : ALTER SCHEMA

I, [2025-10-31T15:14:37.877104 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “create extension if not exists hstore;”’
NOTICE:  extension “hstore” already exists, skipping
I, [2025-10-31T15:14:37.997465 #1]  INFO – : CREATE EXTENSION

I, [2025-10-31T15:14:37.998029 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “create extension if not exists pg_trgm;”’
NOTICE:  extension “pg_trgm” already exists, skipping
I, [2025-10-31T15:14:38.117879 #1]  INFO – : CREATE EXTENSION

2025-10-31 15:14:30.984 UTC [45] LOG:  starting PostgreSQL 15.14 (Debian 15.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0
-14+deb12u1) 12.2.0, 64-bit
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv4 address “0.0.0.0”, port 5432
2025-10-31 15:14:30.984 UTC [45] LOG:  listening on IPv6 address “::”, port 5432
2025-10-31 15:14:31.055 UTC [45] LOG:  listening on Unix socket “/var/run/postgresql/.s.PGSQL.5432”
2025-10-31 15:14:31.135 UTC [56] LOG:  database system was shut down at 2025-10-31 02:08:49 UTC
2025-10-31 15:14:31.199 UTC [45] LOG:  database system is ready to accept connections
I, [2025-10-31T15:14:35.760150 #1]  INFO – :
I, [2025-10-31T15:14:35.760557 #1]  INFO – : > /usr/local/bin/create_db
2025-10-31 15:14:35.912 UTC [63] postgres@postgres ERROR:  database “discourse” already exists
2025-10-31 15:14:35.912 UTC [63] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse ERROR:  role “discourse” already exists
2025-10-31 15:14:36.060 UTC [66] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role “discourse” already exists
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
NOTICE:  extension “hstore” already exists, skipping
NOTICE:  extension “pg_trgm” already exists, skipping
NOTICE:  extension “vector” already exists, skipping
NOTICE:  version “0.8.1” of extension “vector” is already installed
I, [2025-10-31T15:14:37.265035 #1]  INFO – : GRANT
ALTER SCHEMA
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
ALTER EXTENSION
UPDATE 0

I, [2025-10-31T15:14:37.265325 #1]  INFO – : > echo postgres installed!
I, [2025-10-31T15:14:37.270967 #1]  INFO – : postgres installed!

I, [2025-10-31T15:14:37.271578 #1]  INFO – : > sudo -u postgres createdb b_discourse || exit 0
2025-10-31 15:14:37.380 UTC [104] postgres@postgres ERROR:  database “b_discourse” already exists
2025-10-31 15:14:37.380 UTC [104] postgres@postgres STATEMENT:  CREATE DATABASE b_discourse;
createdb: error: database creation failed: ERROR:  database “b_discourse” already exists
I, [2025-10-31T15:14:37.385149 #1]  INFO – :
I, [2025-10-31T15:14:37.385968 #1]  INFO – : > sudo -u postgres psql b_discourse
I, [2025-10-31T15:14:37.390476 #1]  INFO – : grant all privileges on database b_discourse to discourse;

I, [2025-10-31T15:14:37.515870 #1]  INFO – : > sudo -u postgres createdb c_discourse || exit 0
2025-10-31 15:14:37.625 UTC [111] postgres@postgres ERROR:  database “c_discourse” already exists
2025-10-31 15:14:37.625 UTC [111] postgres@postgres STATEMENT:  CREATE DATABASE c_discourse;
createdb: error: database creation failed: ERROR:  database “c_discourse” already exists
I, [2025-10-31T15:14:37.629387 #1]  INFO – :
I, [2025-10-31T15:14:37.630145 #1]  INFO – : > sudo -u postgres psql c_discourse
I, [2025-10-31T15:14:37.634672 #1]  INFO – : grant all privileges on database c_discourse to discourse;

I, [2025-10-31T15:14:37.758171 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “alter schema public owner to discourse;”’
I, [2025-10-31T15:14:37.876557 #1]  INFO – : ALTER SCHEMA

I, [2025-10-31T15:14:37.877104 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “create extension if not exists hstore;”’
NOTICE:  extension “hstore” already exists, skipping
I, [2025-10-31T15:14:37.997465 #1]  INFO – : CREATE EXTENSION

I, [2025-10-31T15:14:37.998029 #1]  INFO – : > /bin/bash -c ‘sudo -u postgres psql b_discourse <<< “create extension if not exists pg_trgm;”’
NOTICE:  extension “pg_trgm” already exists, skipping
I, [2025-10-31T15:14:38.117879 #1]  INFO – : CREATE EXTENSION

Die Pgvector-Erweiterung ist entweder veraltet oder auf einer Ihrer Datenbanken nicht eingerichtet. Ich bin vor einigen Monaten bei einigen Installationen auf dieses Problem gestoßen. Es ist sehr einfach zu beheben, Sie müssen sie nur aktualisieren.

Betreten Sie den DB-Container, psql als Discourse (oder was auch immer Ihr DB-Besitzer ist) und wählen Sie dann jede Datenbank aus und führen Sie aus

ALTER EXTENSION vector UPDATE;

1 „Gefällt mir“

Es scheint, dass der Extension-Besitzer für die Datenbank c_discourse nicht der Benutzer discourse ist. Sie müssen überprüfen, wer der Besitzer ist, z. B.:

discourse_development=# select extname, extowner, usename, extversion from pg_extension JOIN pg_user on pg_extension.extowner = pg_user.usesysid;
 extname  | extowner | usename  | extversion
----------+----------+----------+------------
 vector   |    16385 | michael  | 0.8.0
 unaccent |       10 | postgres | 1.1
 pg_trgm  |       10 | postgres | 1.6
 hstore   |       10 | postgres | 1.8
 plpgsql  |       10 | postgres | 1.0

und führen Sie den Befehl zur Extension-Aktualisierung als dieser Benutzer oder ein Datenbank-Superuser aus.

2 „Gefällt mir“

Kann mir jemand helfen, die Datenbank zu starten, um das zu tun? Das ist wirklich der Knackpunkt.

EDIT: Die einzigen PostgreSQL-Dateien, die ich finde, sind von /13. Ich befinde mich also in einer Art Schwebezustand. Es scheint, dass das Datenbankprogramm aktualisiert wurde, die Datenbankdateien jedoch nicht. Ich habe einige Suchen durchgeführt, aber nichts, womit ich mich wohlfühle, außer zu versuchen, die Dateien herauszukopieren und damit zu spielen.

2025-10-31 00:27:40.021 UTC [662] FATAL: Datenbankdateien sind inkompatibel mit dem Server
2025-10-31 00:27:40.021 UTC [662] DETAIL: Das Datenverzeichnis wurde von PostgreSQL Version 15 initialisiert, die nicht mit dieser Version 13.16 (Debian 13.16-1.pgdg120+1) kompatibel ist.

Sie sollten in der Lage sein, die app.yml zu bearbeiten und die PostgreSQL 13-Vorlage zu verwenden und neu zu erstellen, wie im Thema PostgreSQL 15-Update beschrieben.

Dann können Sie neu erstellen. Dann können Sie den Container starten. Dann können Sie den Container betreten. Dann können Sie die pgvectkr-Sachen machen.

Nun, das hat 15 deinstalliert und 13 installiert, aber seltsamerweise denselben Fehler. Es brach viel näher am Anfang des Prozesses ab. :frowning:

2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

Das ist der Punkt des Fehlschlags:
2025-11-01 15:30:26.522 UTC [2547] FATAL: database files are incompatible with server
2025-11-01 15:30:26.522 UTC [2547] DETAIL: The data directory was initialized by PostgreSQL version 15, which is not compatible with this versio
n 13.22 (Debian 13.22-1.pgdg12+1).

Ich habe die 13-Vorlage ausprobiert. Das Problem ist, dass die Datenbank bereits von 15 geändert wurde, aber die Migration der 2 hinzugefügten Multi-Sites wurde irgendwie mit einem Benutzer hinzugefügt, der vom Installer nicht erkannt zu werden scheint. Wie oben erwähnt, gab es keine Anforderung für eine Benutzer-/Passwortkombination, als ich diese ursprünglich hinzufügte, daher weiß ich nicht genau, wie sie in die Datenbank aufgenommen wurden.

Gibt es einen Wert, den ich zu den Benutzer-/Passwortoptionen hinzufügen kann, der diese zufriedenstellen würde? Denken Sie daran, dass ich sie nicht hinzugefügt habe. Was hat das ursprüngliche Skript sie also unter welchem Namen hinzugefügt, wenn nicht unter postgres, was der Standardbenutzer zu sein scheint, wie die Ausgabe zeigt.

Wäre es möglich, die beiden hinzugefügten Sites einfach auszukommentieren, um die Datenbank hochzufahren und DANN vielleicht die aktuell verwendete Importmethode zu verwenden?

Wenn Sie sich den pg 15-Thread ansehen, erfahren Sie, wie Sie das Sicherungsverzeichnis umbenennen, das noch die pg 13-Dateien enthält.

Das ist ein langer Thread, also lassen Sie mich sicherstellen, dass ich das Richtige betrachte.

  1. Verwenden Sie die Vorlage 13
  2. mv /shared/postgres_data nach etwas wie /shared/postgres_data.bak
  3. mv /shared/postgres_data_old nach /shared/postgres_data

Und das wird die Datenbank mit der alten zum Laufen bringen?

root@main-app:/shared/postgres_data_old# cat PG_VERSION
13
root@main-app:/shared/postgres_data# cat PG_VERSION
15

Dann kümmere dich um das

Datenbank war schon immer meine Schwachstelle. :frowning: Es scheint, dass dies anders strukturiert ist als ich dachte, nämlich dass all diese Dinge unter /var/lib/posgresql unter einem dieser seltsamen, undurchsichtigen Verzeichnisse liegen.

Ich weiß die ganze Hilfe zu schätzen. Es gibt ein paar Foren, in denen ich mit dem Kopf schüttle über einige der Benutzer. :wink:

Wenn Sie eine Version von Discourse erstellen, die gebündelte Plugins enthält, schlägt der Build mit der fehlenden pgvector-Erweiterung fehl, unabhängig von Ihrer PostgreSQL-Version. Wenn Sie eine ältere Version von PostgreSQL verwenden, werden Sie noch mehr Probleme haben, als Sie ursprünglich hatten.

Ich hoffe, Sie haben vor dieser Upgrade-Reise ein Backup gemacht.

Ich würde vorschlagen, eine neue Discourse-Instanz woanders einzurichten und Ihr Backup wiederherzustellen. Das ist der einzig zuverlässige Weg, um aus dieser Situation herauszukommen.

Sie können es auch von Hand machen, aber es wird viel mehr Arbeit bedeuten und keine Ergebnisse garantieren.

Wurde gestern Abend eine neue Version bereitgestellt? Ich glaube, ich habe einige Git-Pulls gesehen. Jedenfalls hat die Verwendung der 13er-Vorlage und das Verschieben von Daten funktioniert. Irgendwie. :zwinker:
Die Datenbank schien einwandfrei migriert zu sein. Ich kann den „Grant-Fehler“ auf den Seiten und Seiten der Ausgabe nicht finden. Das heißt nicht, dass er nicht da ist. Ich muss vielleicht discourse_doctor ausführen, damit ich eine gespeicherte Ausgabe habe, nach Fehlern suchen kann. Die Datenbank ist hochgefahren und läuft. Ich habe jetzt einen Seitenfehler anstelle von „Bad Gateway“ in meinem Browser. Ich werde den Rest der Ausgabe hier zur Vollständigkeit einfügen, aber wenn ich nicht denselben Grant-Fehler finde, den ich zuvor erwähnt habe, werde ich einen neuen Thread starten.

Vielen Dank an alle, die bisher geholfen haben. Zumindest kann ich jetzt auf die Datenbank zugreifen. Ein großes Dankeschön an alle, die mir geholfen haben, so weit zu kommen.

SEHR GESCHÄTZT!


== 20240611170904 UpgradePgvector070: migrating ===============================

I, [2025-11-02T15:17:02.281908 #1] INFO -- : Terminating async processes
I, [2025-11-02T15:17:02.282204 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U p
ostgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 2547
I, [2025-11-02T15:17:02.282450 #1] INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 2644
2025-11-02 15:17:02.289 UTC [2547] LOG: received fast shutdown request
2644:signal-handler (1762096622) Received SIGTERM scheduling shutdown...
2644:M 02 Nov 2025 15:17:02.299 # User requested shutdown...
2644:M 02 Nov 2025 15:17:02.299 * Saving the final RDB snapshot before exiting.
2025-11-02 15:17:02.384 UTC [2547] LOG: aborting any active transactions
2025-11-02 15:17:02.391 UTC [2547] LOG: background worker \"logical replication launcher\" (PID 2562) exited with exit code 1
2025-11-02 15:17:02.452 UTC [2557] LOG: shutting down
2644:M 02 Nov 2025 15:17:02.549 * DB saved on disk
2644:M 02 Nov 2025 15:17:02.549 # Redis is now ready to exit, bye bye...
2025-11-02 15:17:06.304 UTC [2547] LOG: database system is shut down

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate failed with return #&lt;Process::Status: pid 4308
exit 1&gt;
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/exec_command.rb:131:in `spawn'
exec failed with the params \"cd /var/www/discourse &amp;&amp; sudo -E -u discourse bundle exec rake multisite:migrate\"
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

EDIT: Habe das in den Logs gefunden. Ich werde nichts unternehmen, bis ich Doctor ausgeführt und nach Fehlern gesucht habe.
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse LOG: provided user name (postgres) and authenticated user name (discourse) do not match
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse FATAL: Peer authentication failed for user \"postgres\"
2025-11-02 16:10:09.680 UTC [6244] postgres@c_discourse DETAIL: Connection matched pg_hba.conf line 89: \"local all postgres
peer\"

Um diesen Thread abzuschließen: Ich habe Doctor ausgeführt und den Alter-Fehler gefunden. Da die Datenbank lief, habe ich den Alter-Befehl für die an Multisite beteiligten Datenbanken ausgeführt, den Build erneut ausgeführt und sie sind jetzt migriert. Der Benutzerzugriff auf die Datenbank bleibt bestehen, aber dafür werde ich einen neuen Thread starten.

Nochmals vielen Dank an alle, die mich bis hierher gebracht haben.

Da ich sie als Root verschoben habe, musste ich die Dateien chown und dann chmod. Ich habe diese nicht dokumentiert, aber die Fehlerausgabe gibt sie an.

Link zum aktuellen Problem.

Ein Beitrag wurde in ein bestehendes Thema verschoben: Datenbankzugriffsprobleme nach Upgrade v3.5.2 -\u003e v3.6.0.beta2