Come si eseguono query SQL se il container non si avvia? (rebuild fallito)

Ciao.

Ho provato a eseguire aggiornamenti e ricostruzioni, ma ho ottenuto questo bellissimo errore:

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'

Ci sono altri argomenti sul forum con problemi simili (1, 2, 3) ma quando provo ad entrare nel container ottengo questo:

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

Pertanto, non sono in grado di eliminare gli indici manualmente.

Hai qualche altro suggerimento su quale approccio dovrei adottare ora?

2 Mi Piace

Ciao Ionut,

Grazie per la segnalazione del bug. Ci darò un’occhiata, ma credo ci sia un problema con un indice nel tuo database e una recente migrazione tenta di risolverlo, ma alcuni problemi non possono essere risolti senza un intervento umano.

Credo che il commit che ha introdotto la migrazione che fallisce sia questo:

Puoi provare a bloccare la tua istanza di Discourse alla versione precedente che è il commit 690e2f15ab9549486aaa6750e1093c1336bf17f2. Modifica il tuo file app.yml e imposta la chiave version sotto params. Assicurati di decommentare anche quella chiave!

Quindi, tutto dovrebbe avviarsi e dovresti essere in grado di rimuovere il tag duplicato vuejs, ma ciò potrebbe avere alcuni effetti indesiderati se il tag duplicato è in uso. Cercheremo di trovare una soluzione migliore, ma questo dovrebbe funzionare fino ad allora.

2 Mi Piace

Dopo l’avvio, sono riuscito a trovare tutti i tag duplicati con il plugin Data Explorer:

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

Per qualche motivo, c’erano circa dieci tag duplicati. Mi chiedo perché e come siano apparsi lì in primo luogo…

Sono riuscito a eliminarli, ho rimosso il blocco della versione dal file yml, ho ricostruito, le cose sembrano a posto ora.

Grazie!

:+1:

5 Mi Piace

Abbiamo visto questo in passato, è un problema da incubo ma è stato isolato come correlato all’aggiornamento.

La struttura dell’indice in PG dipende dalla locale al momento dell’installazione e gli aggiornamenti possono a volte portare a un incubo.

Se il reindicizzazione non viene eseguita abbastanza presto, possono sorgere problemi. Alcuni dei nostri precedenti aggiornamenti di PG docker non l’hanno eseguita… e alcune vecchie installazioni hanno purtroppo una piccola bomba a orologeria.

Oggi questo è in gran parte risolto nell’ecosistema, ma rimane un po’ di dolore.

2 Mi Piace

Forse questo può aiutare a identificare ulteriormente la causa, quindi ecco alcuni dettagli aggiuntivi sul sistema:

L’installazione è effettivamente antica, risale al 2014, ma il sistema viene aggiornato almeno una volta al mese (anche se di solito è ogni due settimane). Quindi non è mai stata saltata una versione principale.

Non c’è un blocco di versione, quindi in pratica stiamo eseguendo la versione più recente disponibile sul ramo main (YOLO!).

Sebbene in passato abbiamo provato pochissimi plugin non ufficiali, tutti i plugin installati sono ufficiali ed è così da almeno… 5 anni.

1 Mi Piace

Ho lo stesso problema, ti ho seguito fino a questa frase.

Come rimuovi effettivamente i duplicati? Emettendo semplicemente un’istruzione SQL delete in Data Explorer? Che dire dei record delle tabelle esterne che puntano a questo tag?

Aggiornamento 1

OK, vedo che non puoi eseguire istruzioni update.

Ora ho usato l’interfaccia grafica e ho semplicemente rinominato il tag.

Modifica il tag (andando su /tag/foo) e rinominalo o rimuovilo.

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