PG::UndefinedTable: ERROR: a relação "voice_rooms" não existe

Eu também tive esse problema — e executar aquele script exigiu um pouco de orientação do ask.discourse.com, pois não é muito fácil para administradores de sistemas menos experientes!

Aqui está um resumo para os outros:


Para quem estiver enfrentando isso na instalação padrão com Docker, aqui está como executar o script acima de fato.

Obtenha um shell e abra o psql.

  • Contêiner único:

    cd /var/discourse
    ./launcher start app   ## Necessário apenas se você já teve uma reconstrução falha
    ./launcher enter app
    su -c 'psql discourse' postgres
    
    
  • Configuração com dois contêineres:

    cd /var/discourse
    ./launcher enter data
    su -c 'psql discourse' postgres
    
    

Você deve ver o prompt discourse=#. Se tiver dúvidas, execute \conninfo.

Execute o script.

Cole todo o bloco DO $$ ... $$; da postagem acima do nat no prompt e pressione Enter. Uma execução bem-sucedida imprime avisos como:

NOTICE:  Renamed resenha_rooms to voice_rooms
NOTICE:  Renamed resenha_room_memberships to voice_room_memberships
...

Se, em vez disso, ele levantar uma exceção (por exemplo, “Both Resenha and Voice tables exist. Nothing was changed.”), pare e cole a mensagem de volta aqui — o script é intencionalmente seguro e não altera nada nesse caso.

Saia e reconstrua.

\q
exit

e, de volta no host:

./launcher rebuild app          # contêiner único
./launcher rebuild web_only     # dois contêineres (também pode ser feito via bootstrap, é claro)

Você pode precisar de duas reconstruções — a primeira finaliza o estado de migração aplicado parcialmente, e a segunda completa o processo com sucesso.