Falha na atualização: UniqueViolation: valor de chave duplicado viola a restrição única "data_explorer_queries_pkey"

A atualização de hoje para a versão mais recente falhou:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' falhou com retorno #<Process::Status: pid 3194 exit 1>
Localização da falha: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec falhou com os parâmetros {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
590cf0611c566ea6df5f70ffdd2cec2359e84eaea29b7abcde77d56288a46370
** FALHA NA INICIALIZAÇÃO ** por favor, role para cima e procure mensagens de erro anteriores, pode haver mais de uma.

Acima no log:

Causado por:
PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "data_explorer_queries_pkey"
DETAIL:  Key (id)=(-10) already exists.

e

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

ERROR:  duplicate key value violates unique constraint "data_explorer_queries_pkey"
DETAIL:  Key (id)=(-10) already exists.

Portanto, suponho que precise eliminar a chave duplicada data_explorer_queries_pkey.

Como faço isso?

Obrigado, mas não consigo acessar o aplicativo:

./launcher enter app
Resposta de erro do daemon: O container 694b24a2a235e90456fb0ca770c86ac14bb914ad33ada8a18fc4777a1188d848 não está em execução
root@gaoa-discourse:/var/discourse#

E também:

root@gaoa-discourse:/var/discourse# su - postgres
Nenhuma entrada de senha para o usuário 'postgres'

Então, reinicie o container?

./launcher start app

Em seguida, você quer algo como:

./launcher enter app

então:

su postgres -c 'psql discourse'

Obrigado! Não tenho certeza do motivo pelo qual não funcionou na primeira vez que tentei.

Parece que tenho um ID “10” duplicado:

4374 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"group_ids":[],"last_run_at":"2019-10-21T04:03:35.548+00:00"}

4114 | discourse-data-explorer | q:-10 | JSON      | {"id":-10,"name":"Inactive Users with no posts","description":"analyze pre-Discourse signups.","sql":"SELECT\
n    u.id,\n    u.username_lower AS \"username\",\n    u.created_at,\n    u.last_seen_at\nFROM users u\nWHERE u.active = false\nORDER BY u.id\n","created_by":"-1",
"created_at":null,"last_run_at":"2019-02-27T06:17:48.317+00:00"}

Então, imagino que eu deva executar isso:

DELETE from plugin_store_rows WHERE id = 10

ou deveria ser:

DELETE from plugin_store_rows WHERE id = -10

Estou curioso — qual deles será excluído pelo comando acima? O primeiro que encontrar ou ambos?

Os números na coluna ID são 4374 e 4114. Exclua o de número mais alto.

NÃO execute DELETE from plugin_store_rows WHERE id = 10!! ou você excluirá a entrada errada!

Ah, então isso aqui?

DELETE from plugin_store_rows WHERE id = 4374;

Sim. Você deve ver o cabeçalho da coluna correto na saída da consulta PL/SQL, certo?

Agora que você mencionou, sim. Eu rolei para baixo porque a saída é assim:

Sim, também, em geral, considere executar comandos para ver seu impacto antes de confirmar, veja:

Assim, se você perceber que excluiu 500 linhas quando pretendia afetar apenas uma, terá a chance de fazer um rollback sem medo.

Sucesso! :tada: Obrigado pela orientação @merefield.

Meu comando DELETE estava faltando um ponto e vírgula de fechamento (atualizado acima).

Ah, sim, isso me pega toda vez :wink: