Postgres如何查询全部schema(含隐藏schema)的所有者
PostgreSQL查询所有schema所有者的解决方案
问题根因
你之前使用的select * from information_schema.schemata s order by schema_name语句返回结果不全,是Postgres的权限控制机制导致的:information_schema下的视图遵循SQL标准的权限约定,只会返回当前登录用户拥有USAGE或CREATE权限的schema,没有权限的schema会被直接过滤,不会出现在结果集里。
可行解决方法
直接查询Postgres原生的系统目录表,这类表不受对象权限过滤约束,默认所有数据库用户都有只读权限,可以拿到全量schema信息。
执行以下SQL即可查询所有schema和对应的所有者:
SELECT n.nspname AS schema_name, u.usename AS schema_owner FROM pg_catalog.pg_namespace n JOIN pg_catalog.pg_user u ON n.nspowner = u.usesysid ORDER BY n.nspname;
特殊情况说明
如果执行上述SQL仍返回不全的结果,说明当前登录用户的系统表访问权限被管理员回收,你需要切换为超级用户(默认是postgres用户)登录数据库,再执行上面的查询即可拿到全量数据。
内容的提问来源于stack exchange,提问作者Helmoet de Zwijger
相关产品推荐
相关产品推荐

