Redshift - 无法删除用户 "xyz",因为该用户拥有某个对象

Redshift - user "xyz" cannot be dropped because the user owns some object

尝试在 Redshift 数据库中删除用户 "xyz" 时,我收到错误消息:

user 'xyz' cannot be dropped because the user owns some object.

根据 documentation:

If a user owns an object, first drop the object or change its ownership to another user before dropping the original user

我如何知道用户拥有哪些对象(架构、表、视图、UDF?,...)?

您可以在 pg_tables 中查看特定用户拥有的表和视图 和 pg_views 系统表。 (还有 pg_udf,但它不包含对特定用户的任何引用)

select 
    case when schemaname='public' then '' 
        else schemaname+'.' end+tablename 
    from pg_tables where tableowner = 'xyz'
union 
    select 
    case when schemaname='public' then ''
        else schemaname+'.' end+viewname 
    from pg_views where viewowner = 'xyz'

;

就我而言,用户不拥有任何表或视图或我能找到的任何其他内容。我猜对了,被授予特权意味着用户“拥有”某些东西,因为我解决了这个问题:

revoke all privileges on database some_database_name from some_user_name

之后 drop user 命令生效。

由于以下内容以非常简单的方式解决了我的问题,因此我也将此回复复制到此线程中:

在尝试了无数帖子和话题的建议后,awslabs 的 aws-redshift-utils provided relief in the form of admin.v_find_dropuser_objs 观点。它立即识别出剩余的依赖项,从而可以删除有问题的用户。

AWS 的以下博客 post 非常清楚地解释了如何解决此问题: https://aws.amazon.com/premiumsupport/knowledge-center/redshift-user-cannot-be-dropped/

他们的脚本 v_find_dropuser_objs.sql link here returns 一个不错的 table 对象类型、对象所有者、用户 ID、模式名称、对象名称、ddl 等