PostgreSQL由于默认权限而无法删除角色

32

我尝试删除一个名为'xyz'的角色,该角色先前是同名模式的所有者。 我修改了模式所有权如下,并重新分配了所有权以防万一(尽管所有表都由具有超级用户权限的不同用户创建)。 所以我运行了以下所有命令:

alter schema xyz owner to postgres;
reassign owned by xyz to postgres;
alter default privileges in schema seeds revoke all on tables from xyz cascade;
alter default privileges in schema seeds revoke all on sequences from xyz cascade;
alter default privileges in schema seeds revoke all on functions from xyz cascade;

仍然出现错误:

drop role xyz;
ERROR:  role "xyz" cannot be dropped because some objects depend on it
DETAIL:  owner of default privileges on new relations belonging to role xyz in schema xyz

另外提供信息:

postgres=# \du rsi
List of roles
Role name |   Attributes   | Member of   
-----------+----------------+-----------
rsi       | No inheritance | {}

我错过了什么?任何帮助都将不胜感激!谢谢!


将此问题转到dba.stackexchange.com? - Colin 't Hart
2个回答

35

这段内容来自于PostgreSQL文档中关于ALTER DEFAULT PRIVILEGES的Notes部分:

如果您想要删除一个已经更改了默认权限的角色,需要先恢复其默认权限中的更改或使用 DROP OWNED BY 命令来删除该角色的默认权限条目。

另外一项值得一提的是有关DROP OWNED BY在此情况下的文档内容:

因为 DROP OWNED 只影响当前数据库中的对象,所以通常需要在每个包含要删除角色的对象的数据库中执行此命令。

因此,您的情况可能有所不同,这意味着您可能需要在更多的数据库中发出该语句。

收到与问题中提到的相同消息后,我尝试了DROP OWNED BY语句并成功了。希望这能帮到您!


9
DROP OWNED BY usr; 后面跟上 DROP USER usr; 就可以了,对我很有用,谢谢! - kbtz

11

首先运行命令:

DROP OWNED BY xyz;

那么:

DROP ROLE xyz;

阅读PostgreSQL文档,了解Drop Owned By


1
警告:DROP OWNED会删除当前数据库中由指定角色拥有的所有对象。 - user2858738

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接