作者
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热门书籍等,奖品丰富,快来许愿。开不开森.