Problemas de acceso a la base de datos tras la actualización v3.5.2 -> v3.6.0.beta2

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

Este hilo me llevó a este punto: Upgrade failed. Database stopped. (multisite install)

Ahora tengo problemas de acceso a la base de datos:


2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse LOG:  el nombre de usuario proporcionado (postgres) y el nombre de usuario autenticado (discourse) no coinciden 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse FATAL:  Error de autenticación Peer para el usuario "postgres" 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse DETAIL:  La conexión coincide con la línea 89 de pg_hba.conf: "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)


El multisite.yaml cambió entre estas versiones.

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

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

Nunca establecí contraseñas o usuarios para el multisitio porque no era necesario o no figuraba en la plantilla original cuando los configuré.

Inicialmente, no pude actualizar porque el multisitio falló debido a permisos en los dos sitios listados en multisite.yml. Agregar postgres como usuario a multisite.yml no funcionó para la migración. Ahora veo que tal vez debería haber intentado discourse?

¿Cambiar simplemente el propietario a discourse lo solucionará? ¿Necesito agregar usuarios y contraseñas para el multisitio para que coincida con el actual?

¿Cuál es la mejor SOLUCIÓN A LARGO PLAZO aquí?

Tu publicación es muy difícil de leer, así que la he despublicado. Por favor, arregla el formato y podré volver a publicarla.

2 Me gusta

Lamentablemente, me esforcé mucho para que fuera lo más comprensible/coherente posible.

Sé lo que quiero decir. :wink:

EDITAR: OK, lo entiendo. El otro foro que uso es un poco diferente. Uso triple comilla invertida en la línea antes y después del bloque. Ahora veo lo que está pasando. Este, el primer conjunto de comillas invertidas inserta una ventana para pegar. No podía entender por qué las triple comillas invertidas no funcionaban y \u003c/\u003e no me daba lo que realmente quería.

1 me gusta

Puedes cambiar al editor de markdown si necesitas hacer muchas cosas de markdown en tu publicación.

Tus problemas con la contraseña de la base de datos son extraños. ¿Has considerado mudarte a un nuevo servidor? Eso podría ser más rápido y fácil que luchar con este problema.

¿Seguiste estas instrucciones? (¿No parece que lo hiciste?)

Es una buena apuesta, pero asegúrate de tener cosas como las del tema de instalación multisitio.

Si tus sitios funcionan ahora, entonces yo también te animaría a hacer una instalación multisitio limpia y a hacer una copia de seguridad/restauración de las bases de datos. Puedes copiar todo lo demás como se describe en Mover un sitio de Discourse a otro VPS con rsync

Me preguntaba por qué nombré mis bases de datos b_discourse y c_discourse. Ahora lo sé. :guiño:

## Los plugins van aquí
## ver https://meta.discourse.org/t/19157 para más detalles
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;"'

No entiendo completamente cómo se otorgan los privilegios, así que me preguntaba sobre estos. (captura de pantalla de arriba para dos bases de datos problemáticas):

Bien, buenas noticias y malas noticias. :frowning:
Ahora queremos :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';

en lugar de

ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

Pero:

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"

He desconfiado de simplemente cambiar los propietarios de las bases de datos, pero supongo que eso podría ser lo siguiente.

¿Hay alguna forma de que ./launcher se conecte como el usuario postgres? Eso parece que solucionaría todos mis problemas de actualización aquí.

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)

Parece que hay ‘problemas’ solo al intentar cambiar el propietario de la extensión. La primera referencia que encontré fue en 2017 y en 2022 todavía no se ha implementado.

Usé apt para instalar la nueva extensión y funcionó. Vaya. Ahora a hacer copias de seguridad adecuadas y actualizar a Postgres 15. Pero, no esta noche. :wink:

Parece que mi historial se borró, así que no puedo decirte exactamente cómo lo hice, pero ten cuidado. Requiere postgres 13 e intentará reinstalarlo.

PD: Resulta que había activado las copias de seguridad automáticas pero me había olvidado de ellas. No es que supiera dónde estaban. Configuré un proceso rsync para ponerlas en el directorio donde hago también mis otras copias de seguridad del servidor.

2 Me gusta