Fallo de actualización. Base de datos detenida. (instalación multisitio)

Me he conectado. No he actualizado en 11 meses. Empecé intentando actualizar el Docker Manager. Nunca pareció completarse. Al día siguiente, la página de administración estaba prácticamente rota. Intenté ejecutar ./launcher rebuild app. Obtengo el siguiente error:

2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse ERROR:  debe ser propietario de la extensión vector
2025-10-30 20:04:52.144 UTC [1892] discourse@c_discourse STATEMENT:  ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

Pero la base de datos está detenida, por lo que las soluciones que vi no funcionan.

2025-10-31 00:27:40.021 UTC [662] FATAL:  los archivos de la base de datos son incompatibles con el servidor
2025-10-31 00:27:40.021 UTC [662] DETAIL:  El directorio de datos fue inicializado por la versión 15 de PostgreSQL, la cual no es compatible con esta versión 13.16 (Debian 13.16-1.pgdg120+1).

Pero

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

EDITAR: Parece que la base de datos todavía está en formato 13.

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

Si aún no has visto el tema Actualización de PostgreSQL 15 - Anuncios, puedes empezar por ahí. En él se discuten varios problemas y recomendaciones.

2 Me gusta

Gracias. Es demasiado para entenderlo todo, pero nada parece ser mi problema. :frowning: La base de datos parece ejecutarse durante el proceso de reconstrucción, que es la parte extraña. Al menos por lo que puedo ver en lo que se desplaza.

Eso la mayoría de las veces no va a funcionar después de 11 meses.

Definitivamente necesitas hacer la actualización de postgres 15, y eso es parte de lo que está mal. Es posible que puedas cambiar a postgres 13 y volver a poner las cosas en marcha antes de hacer la actualización.

1 me gusta

¿Es esta una instalación estándar?

No si multisite todavía se considera no compatible.

El problema parece ser que cuando lo instalé no había ningún usuario/contraseña conectado a las bases de datos individuales. Eso parece cambiar. Ahí es donde reside el problema. He intentado modificarlo un poco añadiendo un usuario y luego un usuario con una contraseña en blanco, pero eso no ayudó.

Mi configuración frente a la nueva configuración de ejemplo:


> secondsite:
> adapter: postgresql
> database: b_discourse
>
> pool: 25
> timeout: 5000
> db_id: 2
> host_names:
>
> * forum.xxx.com

> mlp:
> adapter: postgresql
> database: discourse_mlp
> username: discourse_mlp
> password: applejack
> host: dbhost
> pool: 5
> timeout: 5000
>
> host_names:
>
> * discourse.equestria.com
> * discourse.equestria.internal

¿Esto significa que la base de datos realmente se inicia durante el proceso de instalación?

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


La extensión Pgvector está desactualizada o no está configurada en una de tus bases de datos. Me he encontrado con esto en algunas instalaciones hace unos meses. Es muy sencillo de resolver, solo necesitas actualizarla.

Entra en el contenedor de la base de datos, ejecuta psql como discourse (o el propietario de tu base de datos) y luego elige cada base de datos y ejecuta

ALTER EXTENSION vector UPDATE;

1 me gusta

Parece que el propietario de la extensión para la base de datos c_discourse no es el usuario discourse. Deberás comprobar quién es el propietario, por ejemplo:

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

y ejecutar el comando de actualización de extensión como ese usuario o un superusuario de la base de datos.

2 Me gusta

¿Alguna ayuda sobre cómo iniciar la base de datos para hacer esto? Ese es realmente el punto clave.

EDITAR: Los únicos archivos de postgres que encuentro son de la versión /13. Así que estoy en un estado de limbo. Parece que el programa de la base de datos se actualizó pero los archivos de la base de datos no. He buscado, pero nada con lo que me sienta cómodo aparte de intentar copiar los archivos y jugar con ellos.

2025-10-31 00:27:40.021 UTC [662] FATAL: los archivos de la base de datos son incompatibles con el servidor
2025-10-31 00:27:40.021 UTC [662] DETAIL: El directorio de datos fue inicializado por la versión 15 de PostgreSQL, la cual no es compatible con esta versión 13.16 (Debian 13.16-1.pgdg120+1).

Deberías poder editar el archivo app.yml y usar la plantilla de postgres 13 y reconstruir, como se describe en el tema Actualización de PostgreSQL 15.

Luego puedes reconstruir. Luego puedes iniciar el contenedor. Luego puedes entrar en el contenedor. Luego puedes hacer las cosas de pgvectkr.

Bueno, eso purgó 15 e instaló 13, pero extrañamente, el mismo error. Se abortó mucho más cerca del inicio del proceso. :frowning:

2025-11-01 15:30:26.522 UTC [2547] FATAL: los archivos de la base de datos son incompatibles con el servidor
2025-11-01 15:30:26.522 UTC [2547] DETAIL: El directorio de datos fue inicializado por la versión 15 de PostgreSQL, la cual no es compatible con esta versión 13.22 (Debian 13.22-1.pgdg12+1).

Este es el punto de fallo:
2025-11-01 15:30:26.522 UTC [2547] FATAL: los archivos de la base de datos son incompatibles con el servidor
2025-11-01 15:30:26.522 UTC [2547] DETAIL: El directorio de datos fue inicializado por la versión 15 de PostgreSQL, la cual no es compatible con esta versión 13.22 (Debian 13.22-1.pgdg12+1).

Intenté con la plantilla 13. El problema es que la base de datos ya fue alterada por la 15, pero la migración de los 2 sitios multisitios añadidos se realizó de alguna manera con un usuario que parece no ser reconocido por el instalador. Como dije anteriormente, no hubo ningún requisito de combinación de usuario/contraseña cuando agregué estos inicialmente, así que no sé exactamente cómo se agregaron a la base de datos.

¿Hay algún valor que pueda agregar a las opciones de usuario/contraseña que las satisfaga? Recuerda que no los agregué yo, así que ¿qué puso el script inicial si no fue postgres, que parece ser el usuario predeterminado indicado por la salida que veo?

¿Sería posible simplemente comentar los dos sitios agregados para poner en marcha la base de datos y LUEGO tal vez usar el método de importación que se está utilizando ahora?

Si miras el tema de la pg 15, te dirá cómo renombrar el directorio de copia de seguridad que todavía tiene los archivos de la pg 13.

Ese es un hilo largo, así que déjame asegurarme de que estoy mirando lo correcto.

  1. Usa la plantilla 13
  2. mv /shared/postgres_data a algo como /shared/postgres_data.bak
  3. mv /shared/postgres_data_old a /shared/postgres_data

¿Y esto hará que la base de datos funcione con la antigua?

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

Luego me preocuparé por el

La base de datos siempre ha sido mi punto débil. :frowning: Parece que esto está estructurado de manera diferente a lo que pensaba, que era que todas estas cosas estaban en /var/lib/posgresql bajo uno de esos directorios extraños y opacamente numerados.

Agradezco toda la ayuda. Hay algunos foros en los que soy yo quien niega con la cabeza ante algunos de los usuarios. :wink:

Si estás creando una versión de Discourse que incluye plugins empaquetados, la compilación fallará con la extensión pgvector faltante, independientemente de la versión de PostgreSQL en la que te encuentres. Si estás en una versión anterior de PostgreSQL, tendrás aún más problemas de los que tenías al principio.

Espero que hayas hecho una copia de seguridad antes de este viaje de actualización.

Sugiero configurar una instancia nueva de Discourse en otro lugar y restaurar tu copia de seguridad. Esa es la única forma confiable de salir de esta situación.

También puedes hacerlo manualmente, pero será mucho más trabajo y no garantizará resultados.

¿Se lanzó una nueva versión anoche? Creo que vi algunos git pulls. De todos modos, usar la plantilla 13 y mover los datos funcionó. Más o menos. :wink:
La base de datos pareció migrar bien. No puedo encontrar el ‘grant error’ en las páginas y páginas de salida. No significa que no esté ahí. Puede que tenga que ejecutar discourse_doctor para tener una salida guardada que pueda buscar errores. La base de datos está en funcionamiento. Ahora tengo un error de página en lugar de un “bad gateway” en mi navegador. Pondré lo último de la salida aquí para completitud, pero si no encuentro el mismo ‘grant error’ listado anteriormente, iniciaré un nuevo hilo.

Gracias a todos los que han ayudado hasta ahora. Como mínimo, ahora puedo acceder a la base de datos. Un gran agradecimiento a todos los que me han ayudado a llegar hasta aquí.

¡MUY APRECIADO!


== 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:inspawn’ exec failed with the params “cd /var/www/discourse && 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: Encontré esto en los logs. No voy a hacer nada hasta que ejecute doctor y busque errores.
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"

Para cerrar este hilo, ejecuté doctor y encontré el error de alter. Dado que la base de datos estaba en ejecución, ejecuté el comando alter en las bases de datos involucradas en multisitio, volví a ejecutar la compilación y ahora están migradas. El acceso del usuario a la base de datos persiste, pero iniciaré otro hilo para eso.

Nuevamente, gracias a todos por llevarme a este punto.

Como los moví como root, tuve que chown y luego chmod los archivos. No los documenté, pero la salida del error lo indica.

Enlace al problema actual.

Se fusionó una publicación en un tema existente: Problemas de acceso a la base de datos después de la actualización v3.5.2 → v3.6.0.beta2