Try to drop a role/user in PostgreSQL, and get below errors:
postgres=>drop role testuser_read; ERROR: role "testuser_read" cannot be dropped because some objects depend on it DETAIL: privileges for table user1.tab1 privileges for table table user1.tab1 privileges for sequence user1.seq1 ... .. .
SOLUTION
1)Revoke objects privileges from this role/user which is to be dropped:
postgres=> select grantee,table_schema,table_name,privilege_type from information_schema.role_table_grants where grantee='testuser_read' order by table_name,privilege_type; grantee | table_schema | table_name | privilege_type -----------+--------------+------------+---------------- testuser_read | user1 | tab1 | SELECT testuser_read | user1 | tab2 | SELECT ... .. . postgres=> select 'revoke '||privilege_type ||' on '|| table_schema||'.'||table_name||' from '||grantee||' ;' from information_schema.role_table_grants where grantee='testuser_read' ; ----------------------------------------------------------------------------- revoke SELECT on user1.tab1 from testuser_read ; revoke SELECT on user1.tab2 from testuser_read ; ... .. . OR just ... postgres=>REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA user1 FROM testuser_read; postgres=>REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA user1 FROM testuser_read; postgres=>alter default privileges in schema testuser revoke select on tables from testuser_read; postgres=>alter default privileges in schema testuser revoke select , usage on sequences from testuser_read;
2) Revoke depended roles.
\du to find dependent roles
postgres=>\du postgres=>revoke other_role from testuser_read;
3) Drop the role.
postgres=> drop role testuser_read; ERROR: role "testuser_read" cannot be dropped because some objects depend on it DETAIL: privileges for default privileges on new sequences belonging to role testuser in schema testuser privileges for default privileges on new relations belonging to role tetsuser in schema testuser postgres=> ALTER DEFAULT PRIVILEGES FOR ROLE testuser IN SCHEMA testuser REVOKE ALL ON TABLES FROM testuser_read; ALTER DEFAULT PRIVILEGES postgres=> ALTER DEFAULT PRIVILEGES FOR ROLE testuser IN SCHEMA testuser REVOKE ALL ON SEQUENCES FROM testuser_read; ALTER DEFAULT PRIVILEGES postgres=> drop role testuser_read; DROP ROLE postgres=>