我在PostgreSql中有DB“test”。我想写sql来获取所有者我的数据库。我搜索了谷歌 但没有找到答案。请帮帮我
答案 0 :(得分:51)
您可以在系统目录中找到这样的东西
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner"
FROM pg_catalog.pg_database d
WHERE d.datname = 'your_name'
ORDER BY 1;
答案 1 :(得分:32)
您可以这样使用pg_database
,pg_users
系统表和current_database()
功能的组合:
SELECT u.usename
FROM pg_database d
JOIN pg_user u ON (d.datdba = u.usesysid)
WHERE d.datname = (SELECT current_database());
答案 2 :(得分:31)
如果您使用psql命令行工具,则只需使用\l
答案 3 :(得分:1)
This work with database owned by group role:
SELECT
U.rolname
,D.datname
FROM
pg_authid AS U JOIN pg_database AS D ON (D.datdba = U.oid)
WHERE
D.datname = current_database()
答案 4 :(得分:0)
以下查询显示公共模式中所有表的信息:
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/
答案 5 :(得分:0)
请记住,在SQL中(包括postgres),您在给定的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
具有所有者角色的名称/字符串
答案 6 :(得分:0)
可以使用魔法:: regrole强制角色OID赋予所有者角色名称:
#pragma pack(push)
#pragma pack(1)
struct BitMapFileHeader {
uint16_t bfType;
uint32_t bfSize;
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
} file_header;
#pragma pack(pop)