Problemas de acesso ao banco de dados após atualização v3.5.2 -> v3.6.0.beta2

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

Este tópico me levou a este ponto: Upgrade failed. Database stopped. (multisite install)

Agora tenho problemas de acesso ao banco de dados:


2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse LOG:  o nome de usuário fornecido (postgres) e o nome de usuário autenticado (discourse) não correspondem 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse FATAL:  Falha na autenticação peer para o usuário "postgres" 
2025-11-02 17:13:51.212 UTC [1975] postgres@c_discourse DETAIL:  A conexão correspondeu à linha 89 do 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)


O multisite.yaml mudou entre essas versões.

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

Novo:
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

Eu nunca defini senhas ou usuários para o multisite porque não era necessário ou listado no modelo original quando os configurei.

Inicialmente, não consegui atualizar porque o multisite falhou devido a permissões nos dois sites listados em multisite.yml. Adicionar o postgres como usuário ao multisite.yml não funcionou para a migração. Agora vejo que talvez eu devesse ter tentado o discourse?

Simplesmente mudar o proprietário para discourse resolverá o problema? Preciso adicionar usuários e senhas para o multisite para que ele corresponda ao atual?

Qual é a melhor SOLUÇÃO DE LONGO PRAZO aqui.

Sua postagem está muito difícil de ler, por isso a deslistei. Por favor, corrija a formatação e eu a listarei novamente.

2 curtidas

Infelizmente, fiz um grande esforço para torná-lo o mais compreensível/coerente possível.

Eu sei o que quero dizer. :wink:

EDIT: OK, entendi. O outro fórum que uso é um pouco diferente. Eu uso três crases na linha antes e depois do bloco. Agora vejo o que está acontecendo. Este, o primeiro conjunto de crases insere uma janela para colar. Eu não conseguia entender por que as três crases não estavam funcionando e </> não estava me dando o que eu realmente queria.

1 curtida

Você pode alternar para o editor de markdown se precisar fazer muitas coisas em markdown em sua postagem.

Seus problemas com a senha do banco de dados são estranhos. Você considerou mudar para um novo servidor? Isso pode ser mais rápido e fácil do que lutar com esse problema.

Você seguiu estas instruções? (Parece que não?)

É uma aposta bem segura, mas certifique-se de que você tem as coisas como no tópico de instalação multisite.

Se seus sites estão funcionando agora, então eu também encorajaria você a fazer uma instalação multisite limpa e fazer backup/restaurar os bancos de dados. Você pode copiar todo o resto como descrito em Mover um site Discourse para outro VPS com rsync

Eu me perguntei por que chamei meus bancos de dados de b_discourse e c_discourse. Agora eu sei por quê. :wink:

## Plugins vão aqui
## veja https://meta.discourse.org/t/19157 para detalhes
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;\"'

Eu não entendo completamente como os privilégios são concedidos, então fiquei curioso sobre estes. (captura de tela acima para dois bancos de dados problemáticos):

Bem, boas notícias e más notícias. :frowning:
Agora 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';

em vez de

ALTER EXTENSION vector UPDATE TO ‘0.7.0’;

Mas:

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"

Tenho desconfiado sobre apenas mudar os proprietários nos bancos de dados, mas acho que isso pode ser o próximo passo.

Existe uma maneira de fazer com que ./launcher se conecte como o usuário postgres? Isso parece resolver todos os meus problemas de atualização aqui.

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 existem ‘problemas’ apenas ao tentar alterar o proprietário da extensão. A primeira referência que encontrei foi em 2017 e em 2022 ainda não implementada.

Usei o apt para instalar a nova extensão e consegui fazê-la funcionar. Caramba. Agora é fazer backups adequados e atualizar para o Postgres 15. Mas, não hoje à noite. :wink:

Meu histórico parece ter sido apagado, então não consigo dizer exatamente como fiz isso, mas cuidado. Ele requer o postgres 13 e tentará reinstalá-lo.

PS: Acontece que eu tinha ativado backups automáticos, mas tinha me esquecido deles. Não que eu soubesse onde eles estavam. Vou configurar um processo rsync para colocá-los no diretório onde faço meus outros backups de servidor também.

2 curtidas