暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一次删除隶属于某个用户的所有对象 - DROP OWNED BY 语法

digoal 2020-11-14
314

作者

digoal

日期

2020-11-14

标签

PostgreSQL , owned , 对象 , 删用户


背景

在删除一个用户时, 经常遇到这样的报错, 因为还有对象隶属于某个用户, 无法删除.

postgres=# drop role regress_sro_user ; ERROR: role "regress_sro_user" cannot be dropped because some objects depend on it DETAIL: owner of function unwanted_grant() owner of function mv_action() owner of materialized view sro_mv

因为有对象属于某个用户, 无法删除, 如果要快速删除用户, 怎么办?

一个个删依赖对象吗?

《PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系 - 例如视图依赖》

有一个快速的语法

DROP OWNED BY regress_sro_user;

然后就可以删除role了

DROP ROLE regress_sro_user;

但是请注意, DROP OWNED BY风险很大, 因为你并不知道到底有哪些对象是隶属于被删除角色的, 例如有些业务库的owner隶属于你要删的role, 然后被你执行了一把DROP OWNED BY, 那就惨了.

所以比较温柔的做法也可以是把用户设置为不可登陆.

postgres=# alter role regress_sro_user nologin; ALTER ROLE

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论