我无法从Odoo界面复制或删除数据库,因为有会话使用数据库.如何永久修复它?

Che*_*uCR 8 postgresql connection controller odoo odoo-8

每次我尝试从界面复制或删除数据库时,我总是会收到此错误,即使所有用户都已注销:

ERROR:  source database "database_name" is being accessed by other users
DETAIL:  There are 5 other sessions using the database.
Run Code Online (Sandbox Code Playgroud)

然后,如果想要复制或删除数据库,我必须运行此查询以终止所有连接:

SELECT pg_terminate_backend(pg_stat_activity.pid) 
FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'database_name' AND pid <> pg_backend_pid();
Run Code Online (Sandbox Code Playgroud)

我想要做的是覆盖以下控制器,以便在执行函数之前始终运行查询,duplicate_database并且drop:

@http.route('/web/database/duplicate', type='json', auth="none")
def duplicate(self, fields):
    params = dict(map(operator.itemgetter('name', 'value'), fields))
    duplicate_attrs = (
        params['super_admin_pwd'],
        params['db_original_name'],
        params['db_name'],
    )
    return request.session.proxy("db").duplicate_database(*duplicate_attrs)

@http.route('/web/database/drop', type='json', auth="none")
def drop(self, fields):
    password, db = operator.itemgetter(
        'drop_pwd', 'drop_db')(
            dict(map(operator.itemgetter('name', 'value'), fields)))
    try:
        if request.session.proxy("db").drop(password, db):
            return True
        else:
            return False
    except openerp.exceptions.AccessDenied:
        return {'error': 'AccessDenied', 'title': 'Drop Database'}
    except Exception:
        return {'error': _('Could not drop database !'), 'title': _('Drop Database')}
Run Code Online (Sandbox Code Playgroud)

我在Odoo文档中找到了这个注释:

[...]此操作要求没有与正在复制的数据库的连接,但Odoo当前不会破坏现有/未完成的连接,因此重新启动服务器是确保一切处于正确状态的最简单方法.

可以安全地覆盖这些控制器吗?有什么更好的方法呢?我想使用界面这样做,因为如果我手动执行或者每次需要我必须停止服务器是非常烦人的.

Bha*_*ran -1

转到 postgresql 数据库并右键单击您的数据库,您将获得删除/删除数据库的选项。此时,如果您收到此错误,请尝试从服务列表中停止 odoo 服务器,然后重试。