27

我正在尝试删除以前是具有相同名称“xyz”的架构所有者的角色“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 | {}

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

4

2 回答 2

31

取自PostgreSQL 文档ALTER DEFAULT PRIVILEGES注释部分:

如果您希望删除已更改默认权限的角色,则需要反转其默认权限的更改或使用 DROP OWNED BY 删除该角色的默认权限条目。

在这种情况下,文档中另一个值得一提的是DROP OWNED BY

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

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

收到与问题中提到的相同的消息后,我已经尝试了该DROP OWNED BY声明并且它有效。希望这可以帮助!

于 2012-07-31T23:05:39.230 回答
9

首次运行命令:

DROP OWNED BY xyz;

然后:

DROP ROLE xyz;

阅读有关Drop Owned By的 PostgreSQL 文档。

于 2018-07-24T07:09:44.633 回答