Échec de la mise à niveau. La base de données s'est arrêtée. (installation multisite)

Je me suis connecté. Pas de mise à jour depuis 11 mois. J’ai commencé par essayer de mettre à niveau le Docker Manager. Cela ne semblait jamais se terminer. Le lendemain, la page d’administration était pratiquement cassée. J’ai essayé de faire le ./launcher rebuild app. J’obtiens le

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’;

Mais la base de données est arrêtée, donc les corrections que j’ai vues ne fonctionnent pas.

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).

Mais

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

EDIT : Il semble que la base de données soit toujours au format 13 ?

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

Si vous n’avez pas vu le sujet Mise à jour PostgreSQL 15 - Annonces, vous pourriez commencer par là. Il aborde un certain nombre de problèmes et de recommandations.

2 « J'aime »

Merci. Trop de choses pour vraiment tout assimiler, mais rien ne semble être mon problème. :frowning: La base de données semble fonctionner pendant le processus de reconstruction, ce qui est étrange. Du moins, d’après ce que je peux voir dans ce qui défile.

Cela ne fonctionnera presque jamais après 11 mois.

Vous devez absolument effectuer la mise à niveau de postgres 15, et c’est en partie ce qui ne va pas. Il est possible que cela puisse passer à postgres 13 et relancer les choses avant de procéder à la mise à niveau.

1 « J'aime »

S’agit-il d’une installation standard ?

Pas si le multisite est toujours considéré comme non pris en charge.

Le problème semble être que lorsque je l’ai installé, il n’y avait pas d’utilisateur/mot de passe connecté aux bases de données individuelles. Cela semble changer. C’est là que réside le problème. J’ai essayé de le modifier un peu en ajoutant un utilisateur, puis un utilisateur avec un mot de passe vide, mais cela n’a pas aidé.

Ma configuration par rapport à la nouvelle configuration d’exemple :


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:

Cela signifie-t-il que la base de données démarre réellement pendant le processus d’installation ?

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

L’extension Pgvector est obsolète ou n’est pas configurée sur l’une de vos bases de données. J’ai rencontré ce problème sur quelques installations il y a quelques mois. C’est très simple à résoudre, il suffit de la mettre à jour.

Entrez dans le conteneur de la base de données, connectez-vous en tant que discourse (ou quel que soit le propriétaire de votre base de données) avec psql, puis choisissez chaque base de données et exécutez

ALTER EXTENSION vector UPDATE;

1 « J'aime »

Il semble que le propriétaire de l’extension pour la base de données c_discourse ne soit pas l’utilisateur discourse. Vous devrez vérifier qui en est le propriétaire, par exemple :

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

et exécutez la commande de mise à jour de l’extension en tant que cet utilisateur ou un superutilisateur de la base de données.

2 « J'aime »

Une aide pour savoir comment démarrer la base de données pour faire cela ? C’est vraiment le point bloquant.

EDIT : Les seuls fichiers postgres que je trouve sont du /13. Je suis donc un peu dans l’impasse. Il semble que le programme de base de données ait été mis à niveau, mais pas les fichiers de base de données. J’ai fait quelques recherches, mais rien qui me mette à l’aise, à part essayer de copier les fichiers et de jouer avec.

2025-10-31 00:27:40.021 UTC [662] FATAL: les fichiers de base de données sont incompatibles avec le serveur
2025-10-31 00:27:40.021 UTC [662] DETAIL: Le répertoire de données a été initialisé par la version 15 de PostgreSQL, ce qui n'est pas compatible avec cette version 13.16 (Debian 13.16-1.pgdg120+1).

Vous devriez pouvoir modifier le fichier app.yml et utiliser le modèle postgres 13, puis reconstruire, comme décrit dans le sujet Mise à jour PostgreSQL 15.

Ensuite, vous pourrez reconstruire. Ensuite, vous pourrez démarrer le conteneur. Ensuite, vous pourrez entrer dans le conteneur. Ensuite, vous pourrez faire les trucs de pgvectkr.

Eh bien, cela a purgé 15 et installé 13, mais étrangement, la même erreur. Cela a avorté beaucoup plus près du début du processus. :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).

C’est le point de défaillance :
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).

J’ai essayé le modèle 13. Le problème est que la base de données a déjà été modifiée par la version 15, mais la migration des 2 sites multi-sites ajoutés a été effectuée avec un utilisateur qui semble non reconnu par l’installateur. Comme je l’ai dit plus haut, il n’y avait aucune exigence de combinaison utilisateur/mot de passe lorsque je les ai ajoutés initialement, donc je ne sais pas exactement comment ils ont été ajoutés à la base de données.

Y a-t-il une valeur que je peux ajouter aux options utilisateur/mot de passe qui les satisferait ? N’oubliez pas que je ne les ai pas ajoutés, alors qu’est-ce que le script initial a mis dedans si ce n’est pas postgres, qui semble être l’utilisateur par défaut indiqué par la sortie que je vois.

Serait-il possible de simplement commenter les deux sites ajoutés pour faire fonctionner la base de données, PUIS peut-être utiliser la méthode d’importation qui est utilisée maintenant ?

Si vous regardez le sujet pg 15, il vous expliquera comment renommer le répertoire de sauvegarde qui contient toujours les fichiers pg 13.

C’est un long fil, alors laissez-moi m’assurer que je regarde la bonne chose.

  1. Utilisez le modèle 13
  2. mv /shared/postgres_data vers quelque chose comme /shared/postgres_data.bak
  3. mv /shared/postgres_data_old vers /shared/postgres_data

Et cela fera fonctionner la base de données avec l’ancienne ?

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

Ensuite, occupez-vous de

La base de données a toujours été mon point faible. :frowning: Il semble que ce soit structuré différemment de ce que je pensais, à savoir que tout ce matériel se trouvait dans /var/lib/posgresql sous l’un de ces répertoires étranges et opaque numérotés.

J’apprécie toute l’aide. Il y a quelques forums où je suis celui qui secoue la tête devant certains utilisateurs. :wink:

Si vous créez une version de Discourse qui inclut des plugins groupés, la compilation échouera avec l’extension pgvector manquante, quelle que soit la version de PostgreSQL sur laquelle vous vous trouvez. Si vous utilisez une ancienne version de PostgreSQL, vous aurez encore plus de problèmes qu’au départ.

J’espère que vous avez effectué une sauvegarde avant ce parcours de mise à niveau.

Je suggérerais de configurer une nouvelle instance Discourse ailleurs et d’y restaurer votre sauvegarde. C’est la seule façon fiable de sortir de cette situation.

Vous pouvez également le faire manuellement, mais cela demandera beaucoup plus de travail et ne garantira pas les résultats.

Une nouvelle version a-t-elle été déployée hier soir ? Je crois avoir vu des commandes git pull. Quoi qu’il en soit, l’utilisation du modèle 13 et le déplacement des données ont fonctionné. En quelque sorte. :wink:
La base de données a semblé migrer correctement. Je ne trouve pas l’« erreur d’octroi » dans les pages et les pages de sortie. Cela ne veut pas dire qu’elle n’y est pas. Je devrai peut-être exécuter discourse_doctor afin d’avoir une sortie sauvegardée que je pourrai rechercher pour les erreurs. La base de données est opérationnelle. J’ai maintenant une erreur de page au lieu d’une passerelle défectueuse dans mon navigateur. Je vais mettre la fin de la sortie ici pour plus de complétude, mais si je ne trouve pas la même erreur d’octroi mentionnée précédemment, je créerai un nouveau fil de discussion.

Merci à tous ceux qui ont aidé jusqu’à présent. Au minimum, je peux maintenant accéder à la base de données. Un grand merci à tous ceux qui m’ont aidé à en arriver là.

FORTEMENT APPRÉCIÉ !


== 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 : J’ai trouvé ceci dans les journaux. Je ne vais rien faire avant d’avoir exécuté doctor et recherché les erreurs.
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"

Pour clore ce fil de discussion, j’ai exécuté doctor et trouvé l’erreur alter. Comme la base de données fonctionnait, j’ai exécuté la commande alter sur les bases de données impliquées dans le multisite, j’ai relancé la construction et elles sont maintenant migrées. L’accès utilisateur à la base de données persiste, mais j’ouvrirai un autre fil pour cela.

Encore une fois, merci à tous de m’avoir amené jusqu’ici.

Comme je les ai déplacés en tant que root, j’ai dû chown puis chmod les fichiers. Je ne les ai pas documentés, mais la sortie d’erreur le donne.

Lien vers le problème actuel.

Une publication a été fusionnée dans un sujet existant : Problèmes d’accès à la base de données après la mise à niveau v3.5.2 -\u003e v3.6.0.beta2