Erro Index_users_on_username_lower durante a restauração do banco de dados: importação falhou

Oi!

Ontem à noite, tive um problema enorme em um fórum e precisei recriar tudo. Mas durante a restauração, ocorreu um erro e ela falhou. Aqui está a mensagem de erro:

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.

Acho que isso pode estar relacionado ao login com o Twitter, mas será que a restauração pode alterar um nome username_lower se ele estiver duplicado? Acredito que não seria possível alterar isso no arquivo SQL (que é bem grande) e fazer o upload novamente.

Outro caso de corrupção de índice de banco de dados, como mencionado anteriormente aqui: Critical Error: changed username, user got broken

Não sei qual foi o problema que fez você restaurar o backup, mas pode estar relacionado.

Era um problema diferente: o servidor não conseguiu acessar o pups.git. Não foi possível resolver o host: github.com. Tentei algumas soluções encontradas ontem à noite, mas não funcionaram.

Com a restauração, acho que o problema afeta apenas um usuário (talvez relacionado à criação de conta com um clique via Twitter ou algo assim). Estou tentando corrigir manualmente, mas gerenciar um arquivo SQL de 1 GB não é ideal.

edição: com o software vim, consegui editar o arquivo SQL e encontrei as linhas corretas. A restauração funcionou. Só preciso refazer tudo e deverá estar tudo certo.

Havia um nome de usuário “Lea” e outro “lea”. É estranho que o Discourse tenha permitido isso. É um fórum bastante antigo (junho de 2014) e eu o atualizei com frequência, então talvez tenha sido devido a uma versão específica.

O dia foi maluco, mas vou tentar explicar como resolvi tudo caso alguém tenha uma sorte reaaaalmente ruim como eu :upside_down_face:

  1. Baixe o backup. Extraia várias vezes até ter o arquivo dump.sql.

  2. Edite o dump.sql com um software como o vim download : vim online

  3. Sou péssimo em SQL. Para encontrar a tabela correta, pesquisei username_lower,. Isso me levou à tabela de usuários, então pesquisei por “lea”. Editei as duas entradas de Lea. Provavelmente era muito mais fácil, mas lembre-se: sou péssimo em SQL, especialmente quando os arquivos têm 1,5 GB. Salve o arquivo.

  4. Comprima o dump.sql com o 7zip. Você deve ter um novo arquivo chamado: dump.sql.gz.

  5. Crie uma nova pasta em :file_folder: /var/discourse/shared/standalone/backups/default/. Usei “test”.

  6. Se você tiver uma boa conexão com a internet, faça upload da pasta :file_folder: uploads que você obteve ao descomprimir seu arquivo de backup e coloque a pasta em /var/discourse/shared/standalone/backups/default/test/.
    6.1 Se você não tiver uma boa conexão como eu, precisará usar seu servidor. Anote o nome do seu arquivo de backup e use este comando: tar xvzf /var/discourse/shared/standalone/backups/default/yourbackupfile.tar.gz -C /var/discourse/shared/standalone/backups/default/test.
    6.2 Na pasta test, você terá um arquivo dump.sql.gz e uma pasta uploads. Está tudo certo.

  7. Faça upload do arquivo dump.sql.gz da sua pasta test para substituir o dump.sql.gz quebrado.

  8. No seu servidor: vá para cd /var/discourse/shared/standalone/backups/default/test.

  9. Você precisa recriar seu arquivo de backup. Use o nome exato do arquivo de backup antigo: tar -czvf yourbackupfile.tar.gz uploads/ dump.sql.gz.

  10. No seu FTP, vá para :file_folder: /var/discourse/shared/standalone/backups/default/, delete o backup quebrado ou mova-o para outra pasta.

  11. Mova o novo arquivo de backup para /var/discourse/shared/standalone/backups/default/.

  12. Restaure o backup. Prefiro usar este método, e se você chegou até aqui, deverá conseguir usá-lo facilmente: Restore a backup from the command line

O backup deve ser concluído com sucesso :sweat_smile:

Fácil.