Errore Index_users_on_username_lower durante il ripristino del database: importazione fallita

Ciao!

Ieri sera ho avuto un grosso problema su un forum e ho dovuto ricreare tutto. Ma durante il ripristino ho riscontrato un errore e l’operazione è fallita. Ecco l’errore:

ERROR:  could not create unique index "index_users_on_username_lower"
DETAIL:  Key (username_lower)=(lea) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (username_lower)=(lea) is duplicated.

Penso che possa essere collegato al login tramite Twitter, ma il ripristino può modificare un nome username_lower se è duplicato? Non credo di poterlo modificare nel file SQL (è piuttosto grande) e ricaricarlo.

Un altro caso di corruzione dell’indice del database, come già menzionato qui: Critical Error: changed username, user got broken

Non so quale problema tu abbia avuto che ti ha portato a ripristinare il backup, ma potrebbe essere correlato.

Era un problema diverso: il server non riusciva ad accedere a pups.git. Impossibile risolvere l’host: github.com. Ho provato alcune soluzioni trovate ieri sera, ma non hanno funzionato.

Con il ripristino, penso che il problema riguardi solo un nome utente (forse legato alla creazione dell’account con un clic tramite Twitter o qualcosa di simile). Sto cercando di risolverlo manualmente, ma gestire un file SQL da 1 GB non è l’ideale.

Modifica: con il software vim, sono riuscito a modificare il file SQL e ho trovato le righe corrette. Il ripristino ha funzionato. Devo solo rifare tutto da capo e dovrebbe essere pronto.

C’era un utente chiamato “Lea” e uno chiamato “lea”. È strano che Discourse abbia permesso che accadesse. È un forum piuttosto vecchio (giugno 2014) e l’ho aggiornato frequentemente, quindi potrebbe essere stato dovuto a una versione specifica.

La giornata è stata folle, ma proverò a spiegare come ho risolto tutto, nel caso qualcuno abbia una sfiga davvero mostruosa come la mia :upside_down_face:

  1. Scarica il backup ed estrailo più volte finché non ottieni il file dump.sql

  2. Modifica il file dump.sql con un software come vim download : vim online

  3. Sono proprio pessimo con SQL. Per trovare la tabella giusta, ho cercato username_lower,. Mi ha indirizzato alla tabella degli utenti, poi ho cercato “lea”. Ho modificato le due voci relative a Lea. Probabilmente sarebbe stato molto più semplice, ma ricordate: sono un disastro con SQL, specialmente quando i file sono grandi 1,5 GB. Salva il file.

  4. Comprimi il dump.sql con 7zip. Dovresti ottenere un nuovo file chiamato: dump.sql.gz

  5. Crea una nuova cartella in :file_folder: /var/discourse/shared/standalone/backups/default/. Io ho usato test

  6. Se hai una buona connessione internet, carica la cartella :file_folder: uploads che hai ottenuto decomprimendo il file di backup e mettila in /var/discourse/shared/standalone/backups/default/test/
    6.1 Se non hai una buona connessione come me, devi usare il tuo server. Prendi nota del nome del tuo file di backup e usa questo comando: tar xvzf /var/discourse/shared/standalone/backups/default/yourbackupfile.tar.gz -C /var/discourse/shared/standalone/backups/default/test
    6.2 Nella cartella test avrai un file dump.sql.gz e una cartella uploads. Perfetto.

  7. Carica il file dump.sql.gz dalla tua cartella test per sostituire il dump.sql.gz rotto

  8. Sul tuo server : vai in cd /var/discourse/shared/standalone/backups/default/test

  9. Devi ricreare il file di backup. Devi usare il nome esatto del vecchio file di backup: tar -czvf yourbackupfile.tar.gz uploads/ dump.sql.gz

  10. Tramite il tuo FTP vai in :file_folder: /var/discourse/shared/standalone/backups/default/, elimina il backup rotto o spostalo in un’altra cartella

  11. Sposta il nuovo file di backup in /var/discourse/shared/standalone/backups/default/

  12. Ripristina il backup. Preferisco questo metodo e, se sei arrivato fin qui, dovresti essere in grado di usarlo facilmente: Restore a backup from the command line

Il ripristino del backup dovrebbe riuscire: :sweat_smile:

Facile.