在PostgreSql中获取数据库所有者的名称

时间:2013-06-18 09:27:10

标签: postgresql

我在PostgreSql中有DB“test”。我想写sql来获取所有者我的数据库。我搜索了谷歌  但没有找到答案。请帮帮我

7 个答案:

答案 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_databasepg_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)