Restauração a partir de backup falhando: falha ao criar índice postgres

Olá a todos,

Tenho usado o Discourse sem problemas há vários anos.

Hoje, tentei fazer uma atualização pela interface web, passando da versão 2.4.0beta-something que eu estava usando para a atual (2.5.0beta5). Isso… não correu bem. Não anotei tudo direito, mas parece que o PostgreSQL não estava iniciando corretamente devido ao diretório de dados do PostgreSQL não estar pertencendo ao usuário correto.

Pensei em tentar clonar meus antigos containers/app.yml para app2 e restaurar a partir de um backup. O novo container foi construído e segui as instruções para executar um backup pela linha de comando (Restore a backup from the command line - #12). O comando “discourse restore ” falhou com:

ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(//viewer/, 16) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(//viewer/, 16) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Trying to rollback...
Rolling back...
Cleaning stuff up...

Qualquer sugestão sobre como prosseguir seria muito bem-vinda.

Obrigado!
–dustin

Bem-vindo, Dustin. Desculpe pelos problemas que você está enfrentando.

Você tem um índice corrompido. Dê uma olhada em PostgreSQL 12 update - #238.

1 curtida

Obrigado pela sua resposta. No final, em vez de tentar criar um novo aplicativo e restaurar a partir de um backup, voltei ao meu aplicativo original e executei ‘./launcher rebuild app’ algumas vezes (como root, o que eu não teria pensado ser necessário, mas acho que configurei meu site como root originalmente, o que faria sentido), e agora meu site voltou! Uhu!

Lembre-me de nunca tocar sem pensar no botão de Atualização que parece amigável!

obrigado,
–dustin

2 curtidas

Você ainda tem o índice corrompido. Você ainda quer que ele não esteja corrompido.

1 curtida

Uau, seria realmente ótimo se o processo de atualização pudesse resolver alguns desses problemas!

Então, depois de instalar o plugin de explorador de dados e dar uma olhada no índice incoming_referers, além de remover outros índices listados na consulta aqui:

Ainda estou recebendo:

discourse=# REINDEX SCHEMA CONCURRENTLY public;
WARNING:  cannot reindex invalid index "pg_toast.pg_toast_19337_index_ccnew" concurrently, skipping
WARNING:  cannot reindex invalid index "pg_toast.pg_toast_19337_index_ccnew1" concurrently, skipping

e eles não querem ser removidos!

# drop index pg_toast_19337_index_ccnew1;
ERROR:  index "pg_toast_19337_index_ccnew1" does not exist
1 curtida

Ah, precisa do prefixo pg_toast:

discourse=# drop index pg_toast.pg_toast_19337_index_ccnew1;
DROP INDEX
discourse=# drop index pg_toast.pg_toast_19337_index_ccnew;
DROP INDEX
discourse=# REINDEX SCHEMA CONCURRENTLY public;
REINDEX

Sim, os índices corrompidos são algo que estamos analisando de perto. Pedimos desculpas pelas dificuldades. Em teoria, isso não deveria ser possível… mas você sabe o que dizem sobre teoria versus prática. Espero que o PG12 seja mais resistente a… seja lá o que for isso.

1 curtida

Isso é bom de ouvir. Basicamente, esse é o primeiro obstáculo que encontro após anos de uso tranquilo, do tipo

1 curtida