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当前不会破坏现有/未完成的连接,因此重新启动服务器是确保一切处于正确状态的最简单方法.
可以安全地覆盖这些控制器吗?有什么更好的方法呢?我想使用界面这样做,因为如果我手动执行或者每次需要我必须停止服务器是非常烦人的.
| 归档时间: |
|
| 查看次数: |
1747 次 |
| 最近记录: |