Datenbankzugriffsprobleme nach Upgrade v3.5.2 -> v3.6.0.beta2

  • v3.5.2 → v3.5.2
  • v3.6.0.beta2 → v3.6.0.beta2

Dieser Thread hat mich zu diesem Punkt gebracht: Upgrade failed. Database stopped. (multisite install)

Ich habe jetzt Probleme mit dem Datenbankzugriff:


2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse LOG:  provided user name (postgres) and authenticated user name (discourse) do not match 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse FATAL:  Peer authentication failed for user "postgres" 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse DETAIL:  Connection matched pg_hba.conf line 89: "local   all             postgres       
                        peer"
postgres=# \l
List of databases
Name     |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-------------±---------±---------±----------------±------------±------------±-----------±----------±-----------------------
b_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
c_discourse | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
discourse   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =Tc/postgres          +
|          |          |                 |             |             |            |           | postgres=CTc/postgres +
|          |          |                 |             |             |            |           | discourse=CTc/postgres
postgres    | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           |
template0   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
template1   | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c/postgres           +
|          |          |                 |             |             |            |           | postgres=CTc/postgres
(6 rows)


Die multisite.yaml hat sich zwischen diesen Versionen geändert.

Original:
secondsite:
adapter: postgresql
database: b_discourse
pool: 25
timeout: 5000
db_id: 2
host_names:
- ``forum.domain.com

Neu:
mlp:
adapter: postgresql
database: discourse_mlp
username: discourse_mlp
password: applejack
host: dbhost
pool: 5
timeout: 5000
host_names:
- discourse.nudderdomain.com
- discourse.nudderdomain.internal

Ich habe nie Passwörter oder Benutzer für Multisite festgelegt, da dies nicht erforderlich war oder in der ursprünglichen Vorlage aufgeführt war, als ich sie eingerichtet habe.

Anfänglich konnte ich kein Upgrade durchführen, da die Multisite aufgrund von Berechtigungen für die beiden in multisite.yml aufgeführten Sites fehlgeschlagen ist. Das Hinzufügen von Postgres als Benutzer zu multisite.yml hat für die Migration nicht funktioniert. Jetzt sehe ich, dass ich vielleicht hätte versuchen sollen, Discourse zu verwenden?

Wird die einfache Änderung des Besitzers zu Discourse es beheben? Muss ich Benutzer und Passwörter für die Multisite hinzufügen, damit sie mit der aktuellen übereinstimmen?

Was ist die beste LANGFRISTIGE LÖSUNG hier.

Dein Beitrag ist sehr schwer zu lesen, daher habe ich ihn nicht gelistet. Bitte behebe die Formatierung, dann kann ich ihn wieder listen.

2 „Gefällt mir“

Leider habe ich mir große Mühe gegeben, es so verständlich/kohärent wie möglich zu machen.

Ich weiß, was ich meine. :zwinker:

EDIT: OK, verstanden. Das andere Forum, das ich benutze, ist etwas anders. Ich benutze dreifache Anführungszeichen in der Zeile vor und nach dem Block. Jetzt sehe ich, was los ist. Dieses hier fügt der erste Satz von Anführungszeichen ein Fenster zum Einfügen ein. Ich konnte nicht verstehen, warum die dreifachen Anführungszeichen nicht funktionierten und < /> mir nicht das gaben, was ich wirklich wollte.

1 „Gefällt mir“

Sie können zum Markdown-Editor wechseln, wenn Sie viele Markdown-Dinge in Ihrem Beitrag tun müssen.

Ihre Probleme mit dem Datenbankpasswort sind seltsam. Haben Sie erwogen, auf einen neuen Server umzuziehen? Das könnte schneller und einfacher sein, als sich mit diesem Problem herumzuschlagen.

Haben Sie diese Anweisungen befolgt? (Scheint nicht so?)

Das ist eine ziemlich gute Vermutung, aber stellen Sie sicher, dass Sie Dinge wie im Multisite-Installations-Thema haben.

Wenn Ihre Websites jetzt funktionieren, dann ermutige ich Sie ebenfalls zu einer sauberen Multisite-Installation und sichern/stellen Sie die Datenbanken wieder her. Sie können all die anderen Dinge kopieren, wie in Verschieben Sie eine Discourse-Site mit rsync auf einen anderen VPS beschrieben.

Ich habe mich gefragt, warum ich meine Datenbanken b_discourse und c_discourse genannt habe. Jetzt weiß ich warum. :zwinker:

## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
  after_postgres:
     - exec: sudo -u postgres createdb b_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database b_discourse to discourse;
          cmd: sudo -u postgres psql b_discourse
          raise_on_fail: false

     - exec: sudo -u postgres createdb c_discourse || exit 0
     - exec:
          stdin: |
            grant all privileges on database c_discourse to discourse;
          cmd: sudo -u postgres psql c_discourse
          raise_on_fail: false

     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"alter schema public owner to discourse;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"create extension if not exists hstore;"'
     - exec: /bin/bash -c 'sudo -u postgres psql b_discourse <<<'"create extension if not exists pg_trgm;"'

Ich verstehe nicht ganz, wie Berechtigungen erteilt werden, daher habe ich mich über diese gewundert. (Screenshot von oben für zwei problematische Datenbanken):

Nun, gute Nachrichten schlechte Nachrichten. :frowning:
Jetzt wollen wir :frowning:

2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.555 UTC [4724] discourse@b_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse ERROR:  must be owner of extension vector
2025-11-07 18:05:41.752 UTC [4725] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO '0.8.0';

anstelle von

ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

Aber:

b_discourse=# ALTER EXTENSION vector UPDATE TO '0.8.0';
ERROR:  extension "vector" has no update path from version "0.7.4" to version "0.8.0"

Ich war vorsichtig, nur die Besitzer der Datenbanken zu ändern, aber ich schätze, das könnte als nächstes kommen.

Gibt es eine Möglichkeit, ./launcher als Benutzer postgres zu verbinden? Das würde hier all meine Upgrade-Probleme beheben.

b_discourse=# select e.extname, u.usename 
             from pg_extension e 
             join pg_user u on e.extowner = u.usesysid;
 extname  |  usename  
----------+-----------
 plpgsql  | postgres
 hstore   | postgres
 pg_trgm  | postgres
 unaccent | discourse
 vector   | postgres
(5 rows)

Es scheint ‘Probleme’ zu geben, nur um den Extension-Owner zu ändern. Der erste Verweis, den ich fand, war 2017 und 2022 immer noch nicht implementiert.

Ich habe apt verwendet, um die neue Erweiterung zu installieren und sie zum Laufen zu bringen. Mann, Mann, Mann. Jetzt muss ich noch richtige Backups machen und auf Postgres 15 aktualisieren. Aber nicht heute Nacht. :wink:

Meine Historie scheint gelöscht worden zu sein, sodass ich Ihnen nicht genau sagen kann, wie ich das gemacht habe, aber seien Sie vorsichtig. Es erfordert Postgres 13 und wird versuchen, dieses neu zu installieren.

PS: Es stellt sich heraus, dass ich automatische Backups aktiviert hatte, aber sie vergessen hatte. Nicht, dass ich wüsste, wo sie waren. Ich werde einen rsync-Prozess einrichten, um sie in das Verzeichnis zu legen, in dem ich auch meine anderen Server-Backups mache.

2 „Gefällt mir“