我试图删除一个角色“xyz”,该角色以前是同名“xyz”架构的所有者。我如下所示更改了模式所有权,并运行重新分配的所有权以防万一(尽管所有表都是由具有超级用户权限的不同用户创建的)。所以我运行所有这些:
将模式xyz所有者更改为postgres;
将xyz拥有的资源重新分配给postgres;
改变模式种子中的默认权限,从xyz级联中撤销所有表上的权限;
改变模式种子中的默认权限从xyz级联中撤销所有序列;
改变模式种子中的默认权限,从xyz级联中撤销所有函数;
但仍然会出现错误:
删除角色xyz;
错误:无法删除角色“xyz”,因为某些对象依赖于它
详细信息:模式xyz中属于角色xyz的新关系的默认权限所有者
仅供参考:
postgres=#\du rsi
角色列表
角色名称|属性|成员
-----------+----------------+-----------
rsi |无遗传|{}
我错过了什么?任何帮助都将不胜感激!谢谢
摘自PostgreSQL文档的alterdefaultprivileges,注释部分:
如果希望删除已更改默认权限的角色,则必须撤消其默认权限的更改,或使用drop OWNED BY删除该角色的默认权限条目
在本例中,另一个值得一提的是关于拥有的DROP的文档:
由于DROP OWNED仅影响当前数据库中的对象,因此通常需要在包含要删除的角色所拥有的对象的每个数据库中执行此命令
因此,您的里程数可能会有所不同,这意味着您可能需要在更多的DBs中发布声明
收到了与问题中提到的相同的消息后,我尝试了所拥有的DROP语句,它成功了。希望这有帮助