从PostgreSQL中移除角色

后端开发 2026-07-10

在Postgres中无法删除一个角色。

postgres=# \\c test_database;

drop role user1;

错误:角色 "user1" 不能删除,因为有对象依赖于它
详细信息:模式public的权限
在模式public中属于角色user1的新序列的默认权限拥有者
在模式public中属于角色user1的新关系的默认权限拥有者

I issue this command:

```sql
SELECT
    pg_get_userbyid(defaclrole) AS owner,
    nspname AS schema,
    defaclobjtype AS type,
    defaclacl AS privileges
FROM pg_default_acl a
LEFT JOIN pg_namespace b ON a.defaclnamespace = b.oid
WHERE pg_get_userbyid(defaclrole) = 'user1';

I get:

 所有者    | 模式 | 类型 |      权限
------------+--------+------+-----------------------
 user1    | public | S    | {backup=r/confluence}
 user1    | public | r    | {backup=r/confluence}

解决方案

You could remove the privileges one by one, but the simple solution is to remove them all with

``` DROP OWNED BY user1;

我建议永远不要直接把任何权限授予你打算删除的角色。在这种情况下,应该使用权限继承。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章