Falha na atualização. Banco de dados parado. (instalação multisite)

Eu fiz login. Não atualizo há 11 meses. Comecei tentando atualizar o Docker Manager. Ele nunca pareceu concluir. No dia seguinte, a página de administração ficou praticamente quebrada. Tentei executar ./launcher rebuild app. Recebo o seguinte:

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

Mas o banco de dados está parado, então as correções que vi não funcionam.

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

Mas

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

EDIT: Parece que o banco de dados ainda está no formato 13?

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

Se você ainda não viu o tópico Atualização do PostgreSQL 15 - Anúncios, pode começar por lá. Ele discute uma série de problemas e recomendações.

2 curtidas

Obrigado. É muita coisa para realmente entender tudo, mas nada parece ser o meu problema. :frowning: O banco de dados parece rodar durante o processo de reconstrução, que é a parte estranha. Pelo menos pelo que consigo ver nas coisas que rolam.

Isso geralmente nunca vai funcionar depois de 11 meses.

Você definitivamente precisa fazer a atualização do postgres 15, e isso faz parte do problema. É possível que isso possa mudar para o postgres 13 e fazer as coisas funcionarem novamente antes de fazer a atualização.

1 curtida

Esta é uma instalação padrão?

Não, se o multisite ainda for considerado não suportado.

O problema parece ser que, quando instalei, não havia usuário/senha conectados aos bancos de dados individuais. Isso parece ter mudado. É aí que reside o problema. Tentei mexer um pouco nisso adicionando um usuário e depois um usuário com senha em branco, mas isso não ajudou.

Minha configuração versus a nova configuração de exemplo:


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:

Isso significa que o banco de dados realmente inicia durante o processo de instalação?

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


A extensão Pgvector está desatualizada ou não está configurada em um de seus bancos de dados. Encontrei isso em algumas instalações há alguns meses. É muito simples de resolver, você só precisa atualizá-la.

entre no contêiner do banco de dados, psql como discourse (ou qualquer que seja o proprietário do seu banco de dados) e, em seguida, escolha cada banco de dados e execute

ALTER EXTENSION vector UPDATE;

1 curtida

Parece que o proprietário da extensão para o banco de dados c_discourse não é o usuário discourse - você precisará verificar quem é o proprietário, por exemplo:

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

e execute o comando de atualização de extensão como esse usuário ou um superusuário do banco de dados.

2 curtidas

Alguma ajuda sobre como iniciar o banco de dados para fazer isso? Esse é realmente o ponto crucial.

EDIT: Os únicos arquivos postgres que encontro são da versão /13. Então, estou meio que em um limbo. Parece que o programa do banco de dados foi atualizado, mas os arquivos do banco de dados não. Fiz algumas pesquisas, mas nada com que me sinta confortável, a não ser tentar copiar os arquivos e mexer neles.

2025-10-31 00:27:40.021 UTC [662] FATAL: arquivos do banco de dados são incompatíveis com o servidor
2025-10-31 00:27:40.021 UTC [662] DETAIL: O diretório de dados foi inicializado pela versão 15 do PostgreSQL, que não é compatível com esta versão 13.16 (Debian 13.16-1.pgdg120+1).

Você deve conseguir editar o app.yml e usar o template do postgres 13 e reconstruir, como descrito no tópico Atualização do PostgreSQL 15.

Em seguida, você pode reconstruir. Em seguida, você pode iniciar o contêiner. Em seguida, você pode entrar no contêiner. Em seguida, você pode fazer as coisas do pgvectkr.

Bem, isso removeu 15 e instalou 13, mas estranhamente, o mesmo erro. Ele abortou muito mais perto do início do processo. :frowning:

2025-11-01 15:30:26.522 UTC [2547] FATAL: arquivos de banco de dados são incompatíveis com o servidor
2025-11-01 15:30:26.522 UTC [2547] DETAIL: O diretório de dados foi inicializado pela versão 15 do PostgreSQL, que não é compatível com esta versio
n 13.22 (Debian 13.22-1.pgdg12+1).

Este é o ponto de falha:
2025-11-01 15:30:26.522 UTC [2547] FATAL: arquivos de banco de dados são incompatíveis com o servidor
2025-11-01 15:30:26.522 UTC [2547] DETAIL: O diretório de dados foi inicializado pela versão 15 do PostgreSQL, que não é compatível com esta versio
n 13.22 (Debian 13.22-1.pgdg12+1).

Eu tentei o template 13. O problema é que o banco de dados já foi alterado pelo 15, mas a migração dos 2 sites adicionados com múltiplos sites foi de alguma forma adicionada com um usuário que parece não ser reconhecido pelo instalador. Como eu disse acima, não houve requisito para uma combinação de usuário/senha quando adicionei estes inicialmente, então não sei exatamente como eles foram adicionados ao banco de dados.

Existe algum valor que eu possa adicionar às opções de usuário/senha que as satisfaça? Lembre-se, eu não os adicionei, então o que o script inicial colocou neles se não for o postgres, que parece ser o usuário padrão indicado pela saída que vejo.

Seria possível apenas comentar os dois sites adicionados para colocar o banco de dados em funcionamento e ENTÃO talvez usar algum método de importação que está sendo usado agora?

Se você olhar o tópico do pg 15, ele dirá como renomear o diretório de backup que ainda tem os arquivos do pg 13.

Essa é uma thread longa, então deixe-me ter certeza de que estou olhando para a coisa certa.

  1. Use o template 13
  2. mv /shared/postgres_data para algo como /shared/postgres_data.bak
  3. mv /shared/postgres_data_old para /shared/postgres_data

E isso fará o banco de dados rodar com o antigo?

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

Depois se preocupe com o

O banco de dados sempre foi meu ponto fraco. :pensive_face: Parece que isso está estruturado de forma diferente do que eu pensava, que era que todas essas coisas estavam em /var/lib/posgresql sob um daqueles diretórios estranhos e opacos numerados.

Agradeço toda a ajuda. Existem alguns fóruns onde sou eu quem balança a cabeça para alguns dos usuários. :wink:

Se você estiver criando uma versão do Discourse que inclua plugins agrupados, a compilação falhará com a extensão pgvector ausente, independentemente da versão do postgres em que você esteja. Se você estiver em uma versão mais antiga do postgres, terá ainda mais problemas do que os que você já tinha.

Espero que você tenha feito um backup antes desta jornada de atualização.

Eu sugiro configurar uma nova instância do Discourse em outro lugar e restaurar seu backup. Essa é a única maneira confiável de sair dessa situação.

Você também pode fazer isso manualmente, mas será muito mais trabalho e não garantirá resultados.

Uma nova versão foi lançada ontem à noite? Acho que vi alguns git pulls. De qualquer forma, usar o template 13 e mover os dados funcionou. Mais ou menos. :wink:
O banco de dados parece ter migrado bem. Não consigo encontrar o ‘grant error’ nas páginas e páginas de saída. Isso não significa que não esteja lá. Talvez eu precise executar o discourse_doctor para ter uma saída salva que eu possa pesquisar por erros. O banco de dados está funcionando. Agora tenho um erro de página em vez de um bad gateway no meu navegador. Colocarei o restante da saída aqui para completar, mas, se eu não encontrar o mesmo grant error listado anteriormente, iniciarei um novo tópico.

Obrigado a todos que ajudaram até agora. No mínimo, agora consigo acessar o banco de dados. Um grande obrigado a todos que me ajudaram a chegar até aqui.

MUITO 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: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: Encontrei isso nos logs. Não vou fazer nada até executar o doctor e procurar por erros.
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 encerrar este tópico, executei o doctor e encontrei o erro alter. Como o banco de dados estava em execução, executei o comando alter nos bancos de dados envolvidos no multisite, executei o build novamente e eles agora foram migrados. O acesso do usuário ao banco de dados persiste, mas iniciarei outro tópico para isso.

Novamente, obrigado a todos por me trazerem até este ponto.

Como eu os movi como root, tive que chown e depois chmod os arquivos. Eu não documentei isso, mas a saída do erro mostra.

Link para o problema atual.

Uma postagem foi mesclada em um tópico existente: Problemas de acesso ao banco de dados após atualização v3.5.2 -\u003e v3.6.0.beta2