如何从PostgreSQL数据库中获取角色的注解

ruyhziif  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(5)|浏览(103)

给定角色名称someone,如何获取用子句定义的注解:
COMMENT ON ROLE someone IS 'THIS IS A ROLE COMMENT';

roqulrg3

roqulrg31#

查找如何检索这类信息的一个好方法是查看psql的帮助并找到显示此信息的命令。
在本例中,它是dg+命令。
一旦知道了该命令,就可以打印psql工具的内部SQL查询,以了解它是如何检索这些信息的。这是通过使用-E参数启动psql来完成的。
如果你这样做,你会看到:

psql (9.4.5)
Type "help" for help.

postgres=# \dg+
********* QUERY **********
SELECT r.rolname, r.rolsuper, r.rolinherit,
  r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
  r.rolconnlimit, r.rolvaliduntil,
  ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as memberof
, pg_catalog.shobj_description(r.oid, 'pg_authid') AS description
, r.rolreplication
FROM pg_catalog.pg_roles r
ORDER BY 1;
**************************

                                List of roles
   Role name   |            Attributes             | Member of | Description
---------------+-----------------------------------+-----------+-----------------------
 someone       |                                   | {}        | THIS IS A ROLE COMMENT

字符串
从你的问题中还不清楚你是否只是想让某个方法看到注解,那么dg+可能就足够了。否则,您可以根据需要调整psql使用的SQL查询,例如:

SELECT pg_catalog.shobj_description(r.oid, 'pg_authid') AS description
FROM pg_catalog.pg_roles r
where r.rolname = 'someone';


注意:\du和\dg在psql中是相同的命令。两者都被维护为for historic reasons

plupiseo

plupiseo2#

角色在群集中的所有数据库上共享。这些共享对象的注解包含在pg_shdescription系统目录中。你可以得到这样一个角色的注解:

SELECT rolname, description AS comment
FROM pg_roles r
JOIN pg_shdescription c ON c.objoid = r.oid;

字符串

yqlxgs2m

yqlxgs2m3#

要简化已接受答案的查询,请执行以下操作:

select r.rolname, psd.description
from pg_catalog.pg_shdescription psd
inner join pg_roles r ON r.oid = psd.objoid
inner join pg_class c ON c.relname = 'pg_authid'
inner join pg_namespace n ON n.oid = c.relnamespace AND n.nspname = 'pg_catalog';

字符串

rxztt3cl

rxztt3cl4#

使用psql\du+输出大致如下:

\du+ someone
 Role name |          Attributes           | Member of |      Description
-----------+-------------------------------+-----------+------------------------
 someone   | Password valid until infinity | {}        | THIS IS A ROLE COMMENT

字符串
您可以在其中阅读Description列中的注解。

zour9fqk

zour9fqk5#

另一个简单的查询是:
第一个月

相关问题