我在PostgreSql中有数据库“测试”。我想编写sql以获取数据库的所有者。
Answers:
您可以在系统目录中找到此类内容
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d
WHERE d.datname = 'database_name'
ORDER BY 1;
可以与组角色拥有的数据库一起使用:
SELECT
U.rolname
,D.datname
FROM
pg_roles AS U JOIN pg_database AS D ON (D.datdba = U.oid)
WHERE
D.datname = current_database();
pg_authid
代替pg_roles
SuperUser来使用(就像我在先前版本中所做的那样),因为它拥有密码(请参阅文档),因此它仅限于SuperUser :
由于该目录包含密码,因此不得公开读取。
pg_roles
是一个公开可读的视图,pg_authid
它使密码字段无效。
pg_authid
了pg_roles
。祝你今天愉快。
以下查询显示公共模式中所有表的信息:
select t.table_name, t.table_type, c.relname, c.relowner, u.usename
from information_schema.tables t
join pg_catalog.pg_class c on (t.table_name = c.relname)
join pg_catalog.pg_user u on (c.relowner = u.usesysid)
where t.table_schema='public';
来源:http : //cully.biz/2013/12/11/postgresql-getting-the-owner-of-tables/
请记住,在包括postgres的SQL中,您在给定的sql服务器实例中具有一个层次结构: catalog/db > schema > tables
当寻找烫发/元数据中的一个目录,你想看看information_schema
示例: information_schema.role_table_grants
用于表烫发
示例: information_schema.role_usage_grants
对于SEQUENCE /模式烫发
https://www.postgresql.org/docs/current/information-schema.html
对于商品目录/数据库级别的配置/元,您需要在中查找另一个级别pg_catalog
。
https://www.postgresql.org/docs/current/catalogs.html
例:
SELECT dbs.datname, roles.rolname
FROM pg_catalog.pg_database dbs, pg_catalog.pg_roles roles
WHERE dbs.datdba = roles.oid;
pg_catalog.pg_database.datdba
具有所有者角色的ID。
pg_catalog.pg_roles.oid
具有所有者角色的ID(加入)
pg_catalog.pg_roles.rolname
具有所有者角色的名称/字符串