Sql 多次授予后删除postgres角色和数据库

Sql 多次授予后删除postgres角色和数据库,sql,database,postgresql,psql,database-administration,Sql,Database,Postgresql,Psql,Database Administration,我试图从postgres实例中高效地删除角色,但遇到了一些问题。我正在寻找一些SQL来删除角色,这样我就可以停止读取错误消息,而不必手动执行此操作 在我使用的设置中,每个角色都有自己的同名数据库: CREATE ROLE alpha_user; CREATE DATABASE alpha_user; ALTER DATABASE alpha_user OWNER TO alpha_user; 用户通常将对其数据库中架构的访问权限授予其他用户: -- alpha_user logs in to

我试图从postgres实例中高效地
删除角色,但遇到了一些问题。我正在寻找一些SQL来
删除角色
,这样我就可以停止读取错误消息,而不必手动执行此操作

在我使用的设置中,每个角色都有自己的同名数据库:

CREATE ROLE alpha_user;
CREATE DATABASE alpha_user;
ALTER DATABASE alpha_user OWNER TO alpha_user;
用户通常将对其数据库中架构的访问权限授予其他用户:

-- alpha_user logs in to the alpha_user database
GRANT USAGE ON SCHEMA myschema TO beta_user;
当我尝试删除beta_用户时,会发生以下情况:

-- log in as superuser
DROP ROLE beta_user;
-- ERROR:  role "beta_user" cannot be dropped because some objects depend on it
-- DETAIL:  N objects in database alpha_user
我可以连接到
alpha_用户
数据库,并删除
拥有的
,但这样做效率低下:

-- log in as superuser
\c alpha_user;
DROP OWNED BY beta_user CASCADE;
DROP beta_user;
-- success

用户可以授予对任意数量的数据库的访问权限,并且有许多用户。超级用户是否有一条语句(或一系列语句)可以执行,以便在授予用户访问权限的所有数据库中删除用户所拥有的

with 
  user_id as (select oid, rolname as my_user from pg_authid where rolname in('abc', 'xyz'))
select 'REVOKE ' || rolname || ' FROM ' || my_user || ' CASCADE;' as sql
from pg_auth_members
join pg_authid on pg_auth_members.roleid = pg_authid.oid  
JOIN user_id ON pg_auth_members.member = user_id.oid
union 
SELECT 'REVOKE ALL ON ' || datname || ' FROM ' || my_user || ' CASCADE;' 
FROM pg_database 
JOIN user_id ON pg_database.datdba = user_id.oid

你的PostgreSQL版本是什么?你的操作系统是什么?Postgres9.4和Ubuntu 14.04。为什么操作系统很重要?您可以使用linux提供的命令行工具的帮助。