Como executar consultas SQL se o contêiner não iniciar? (rebuild falhou)

Olá.

Tentei executar atualizações e reconstruir, mas acabei com este belo erro:

I, [2023-01-18T08:05:48.701709 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-01-18T08:05:52.431210 #1]  INFO -- :
I, [2023-01-18T08:05:52.431807 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse DETAIL:  Key (name)=(vuejs) is duplicated.
2023-01-18 08:05:59.081 UTC [1166] discourse@discourse STATEMENT:  REINDEX INDEX CONCURRENTLY index_tags_on_name_ccnew_ccnew
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

PG::UniqueViolation: ERROR:  could not create unique index "index_tags_on_name_ccnew_ccnew_ccnew5"
DETAIL:  Key (name)=(vuejs) is duplicated.
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:110:in `async_exec'

Existem outros tópicos no fórum com problemas semelhantes (1, 2, 3) mas quando tento entrar no container recebo isto:

/var/discourse# ./launcher enter app
x86_64 arch detected.
Error: No such container: app

Portanto, sou incapaz de remover índices manualmente.

Alguma outra sugestão sobre qual abordagem devo seguir?

2 curtidas

Olá Ionut,

Obrigado pelo relatório de bug. Vou analisar isso, mas acredito que há um problema com um índice em seu banco de dados e uma migração recente tenta corrigi-lo, mas alguns problemas não podem ser corrigidos sem intervenção humana.

Acredito que o commit que introduziu a migração que falha é este:

Você pode tentar fixar sua instância do Discourse na versão anterior, que é o commit 690e2f15ab9549486aaa6750e1093c1336bf17f2. Edite seu arquivo app.yml e defina a chave version em params. Certifique-se de descomentar essa chave também!

Então, tudo deve iniciar e você poderá remover a tag duplicada vuejs, mas isso pode ter alguns efeitos indesejados se a tag duplicada estiver em uso. Tentaremos encontrar uma solução melhor, mas isso deve funcionar até lá.

2 curtidas

Após a inicialização, consegui encontrar todas as tags duplicadas com o plugin Data Explorer:

SELECT name, count(*)
    FROM tags
    GROUP BY name
     HAVING count(*) > 1

Por algum motivo, havia cerca de dez tags duplicadas. Fico imaginando o porquê e como elas apareceram lá em primeiro lugar

Consegui remover essas pragas, removi o bloqueio de versão do arquivo yml, reconstruí, as coisas parecem bem agora.

Obrigado!

:+1:

5 curtidas

Já vimos isso no passado, é um problema de pesadelo, mas o isolamos como relacionado à atualização.

A estrutura do índice no PG depende da localidade no momento da instalação e as atualizações podem levar a um pesadelo às vezes.

Se o reindex não for emitido cedo o suficiente, problemas podem ocorrer. Algumas de nossas primeiras atualizações do PG docker não executaram isso… e algumas instalações antigas, infelizmente, têm uma pequena bomba-relógio.

Isso está em grande parte resolvido hoje em dia no ecossistema, mas um pouco de dor permanece.

2 curtidas

Talvez isso possa ajudar a identificar a causa com mais precisão, então aqui estão mais alguns detalhes sobre o sistema:

A instalação é realmente antiga, desde 2014, mas o sistema é atualizado pelo menos uma vez por mês (embora geralmente seja a cada duas semanas). Portanto, nunca houve uma versão principal pulada.

Não há bloqueio de versão, então basicamente estamos executando a versão mais recente disponível no branch main (YOLO!).

Embora tenhamos tentado alguns não oficiais há um tempo, todos os plugins instalados são oficiais e tem sido assim nos últimos… 5 anos ou mais.

1 curtida

Estou tendo o mesmo problema, segui você até esta frase.

Como você realmente remove as duplicatas? Simplesmente emitindo uma instrução SQL delete no Data Explorer? E os registros de tabelas estrangeiras que apontam para essa tag?

Atualização 1

OK, vejo que você não pode executar instruções update.

Agora usei a GUI e simplesmente renomeei a tag.

Edite a tag (acessando /tag/foo) e renomeie-a ou remova-a.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.