quinta-feira, março 30, 2017

Web2py ERROR', 'relation "auth_user" already exists

É comum ocorrerem errors de migração no DAL do web2py. Seja porque foi feito um restore diretamente via banco de dados, alguma alteração direta no banco, ou outro motivo.


Se a instalação é nova, e o banco foi criado/restaurado a partir de um backup, normalmente basta alterar as linhas no arquivo db.py de :

    db = DAL(myconf.get('db.uri'),
             pool_size=myconf.get('db.pool_size'),
              migrate=True,
             check_reserved=['all'])


para:

    db = DAL(myconf.get('db.uri'),
             pool_size=myconf.get('db.pool_size'),
              fake_migrate_all=True,
              #migrate=True,
             check_reserved=['all'])


Faça essa alteração, rode uma vez, e volte para o padrão.

Ao deixar o fake_migrate ativado,  ao se criar um novo campo ou tabela no web2py, ela não é criada no banco, levando o banco de dados informar o erro que o campo ou tabela não existe.

Nesse caso, é preciso fazer a alteração diretamente no banco de dados. O arquivo databases/sql.log pode ajudar com o sql que 'deveria' ter sido aplicado no banco, mas foi 'fake'.  Em alguns casos mais complexos, os erros tem que ser corrigidos à mão.

Portanto, via de regra, não deixe o fake_migrate_all ativo por padrão.


Nenhum comentário: