postgresql 更换数据库 owner

由于经常在多个odoo环境中切换开发,不可避免的会碰到数据库版本不一致的问题,解决的方案是给每个版本指定一个数据库用户,从而做到数据库分离。 因为某种原因,给数据库用户更换了名称,以前可以正常使用的数据库不能用了,报的错误如下:

1
2
3
4
5
6
7
8
9
10
11
12
    response = f(*args, **kw)
File "/mnt/hgfs/Code/odoo-11.0/odoo-11.0/addons/web/controllers/main.py", line 684, in selector
return self._render_template(manage=False)
File "/mnt/hgfs/Code/odoo-11.0/odoo-11.0/addons/web/controllers/main.py", line 674, in _render_template
d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases'])
File "/mnt/hgfs/Code/odoo-11.0/odoo-11.0/odoo/service/db.py", line 400, in list_db_incompatible
cr.execute("SELECT latest_version FROM ir_module_module WHERE name=%s", ('base',))
File "/mnt/hgfs/Code/odoo-11.0/odoo-11.0/odoo/sql_db.py", line 155, in wrapper
return f(self, *args, **kwargs)
File "/mnt/hgfs/Code/odoo-11.0/odoo-11.0/odoo/sql_db.py", line 232, in execute
res = self._obj.execute(query, params)
psycopg2.errors.InsufficientPrivilege: permission denied for relation ir_module_module

因为之前已经把数据库的owner从老用户转到了新用户头上,因此不是数据库的owner不对造成的。使用\dt命令查看,发现,虽然数据库改过来了,而该数据库下的表的owner还是老用户。

由于表、视图等数量很多,不能一一更改,因此我们需要找到一个快捷的方法。

1
reassign owned by old_name to new_name;

不过该方法有个副作用,如果你的old_name拥有多个数据库,那么哪些数据库也同样会被修改到新用户名下。

你的支持我的动力