由于角色可能在库中拥有各类数据表对象,或者持有作用于其他对象的访问权限,删除一个既有角色往往不能仅仅简单调用一次 DROP ROLE。所有属于该角色的既有对象必须预先完成归属移交或彻底销毁,并且赋予该角色的所有权限必须先行撤销。
可以利用 REASSIGN OWNED 命令,将待删除角色在当前库中拥有的全部对象批量一键移交给指定的后继继任角色:
REASSIGN OWNED BY doomed_role TO successor_role;
随后,使用 DROP OWNED 命令清除该角色在库中残留的其他从属对象及废弃权限:
DROP OWNED BY doomed_role;
在集群中所有包含该角色对象的各个数据库中分别执行完上述两步后,最后执行:
DROP ROLE doomed_role;