PostgreSQL – 删除角色
在PostgreSQL 中使用DROP ROLE语句删除角色。
Syntax: DROP ROLE [IF EXISTS] target_role;
我们来分析一下上面的语法:
- 在 DROP ROLE 关键字后添加要删除的角色名称。
- 使用 IF EXISTS 选项可用于在请求删除不存在的角色时发出通知而不是错误。
需要注意的是,要删除超级用户角色,必须是超级用户。要删除非超级用户角色,您需要使用 CREATE ROLE 语句创建角色的 previlage。如果我们不小心尝试删除已在任何数据库中引用的角色,PostgreSQL 将引发错误。在这种情况下,必须采取两个步骤:
- 您需要使用 DROP OWNED 语句删除该特定角色拥有的数据库对象,或者使用 REASSIGN OWNED 语句将数据库对象的所有权重新分配给另一个角色。
- 您还需要撤销授予该角色的所有其他权限。
换句话说,完全按照下面的语句删除角色:
REASSIGN OWNED BY target_role TO another_role;
DROP OWNED BY target_role;
DROP ROLE target_role;
例子:
在这个例子中:
- 在这里,我们将创建一个名为 geeksforgeeks 的新角色,并使用该角色创建一个名为Employees的表。
- 然后,我们将展示如何从 PostgreSQL 数据库服务器中删除角色 geeksforgeeks 的分步指南。
首先,使用Postgres角色登录 PostgreSQL:
psql -U postgres
其次,使用以下语句创建一个名为geeksforgeeks 的新角色:
create role geeksforgeeks with login password 'geeks12345';
三、grant createdb 使用以下语句授予geeksforgeeks 的特权:
alter role geeksforgeeks createdb;
第四,创建一个名为sales的新数据库:
create database sales;
现在,使用 geeksforgeeks角色登录 PostgreSQL 数据库服务器,如下所示:
psql -U geeksforgeeks -W sales
向 Sales数据库添加一个新表:
create table employee(
customer_id int generated always as identity,
customer_name varchar(150) not null,
primary key(employee_id)
);
现在使用以下命令显示 sales 数据库中的表列表:
\du
这将显示以下结果:
现在以Postgres身份登录并尝试删除 geeksforgeeks 角色:
drop role geeksforgeeks;
输出: