Estou tentando restaurar um banco de dados criado em \"Discourse 2.9.0.beta10 - https://github.com/discourse/discourse version 8d3fe3ddc5d38ab02a8f5c6aed7ebf7a6bcfbfec\"\u003e
e restaurar para Discourse 2.9.0.beta12 - https://github.com/discourse/discourse version d4371a9ffcc6c727105a880b4b70c715ed0283cb\"\u003e. Ambos estão usando RDS Postgres 13.7. O banco de dados descompactado tem 126 GB, então, depois de passar alguns dias acreditando que eu precisava de um disco de 200 GB para executar esta restauração do banco de dados compactado de 30 GB, recebo isto:
...
SET
CREATE TYPE
ERROR: function "entity2char" already exists with same argument types
EXCEPTION: psql failed: ERROR: function "entity2char" already exists with same argument types
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:51:in `run'
...
A busca por \"entity2char\" already exists não encontra nada e eu não vejo entity2char no core ou em nenhum dos plugins. E eu também não o vejo em retort, que eu esperava culpar, mas removê-lo não ajudou.
Parece que o dump do banco de dados contém uma referência a uma função entity2char por algum motivo. Removê-la deve fazer com que funcione, a menos que haja outras coisas no dump que não deveriam estar lá.
Eu estava a segundos de excluí-lo do banco de dados, pois parece muito mais fácil fazer o que quer que o SQL tenha para
drop function entity2char;
Consegui listá-los com \df
Você acha que se eu removê-lo do banco de dados, isso quebrará alguma coisa?
Espere. . . . E o objetivo deste exercício de restaurar o banco de dados de produção para a nova imagem que eu gostaria de lançar é garantir que o Discourse funcionará com o banco de dados de produção existente quando eu instalar o último Discourse e migrar o banco de dados, então modificar o banco de dados para restaurá-lo no staging não faz sentido.
Ah! Então o problema é que o banco de dados de staging já tem essa função, e o backup também tem essa função e ele é muito “burro” para entender que é a mesma função.
Talvez eu devesse apenas remover e criar o banco de dados no site de staging/destino?
Mas sua ideia parece um pouco mais fácil.
EDIT: Ok, renomeei a função e estou fazendo a restauração agora. Em cerca de uma hora poderei ver se funcionou.
E a preocupação é que, de alguma forma, a função entity2char que é levada junto no backup não funcionará com o banco de dados existente? Talvez eu devesse apenas criar um novo banco de dados e restaurar nele. Eu não sou um grande fã do nome xx-discourse-database-5 de qualquer maneira.
EDIT: Bem, parece que há mais “toupeiras” que terei que eliminar.
ERRO: função "replace_mentions" já existe com os mesmos tipos de argumento
Talvez começar com um novo banco de dados seja o caminho a seguir.