dez*_*zso 5 postgresql role configuration users
我必须收集一些PostgreSQL角色的信息。一条信息是角色是否具有与“通常”不同的设置,这里通常意味着只有少数参数的默认值(例如log_statement
)。
到目前为止,我只有一个想法:遍历所有用户并发出命令
\c postgres username
SHOW log_statement;
Run Code Online (Sandbox Code Playgroud)
然后处理输出。
我想知道是否有类似查询pg_settings
视图、显示每个用户设置的类似方法?我不需要知道特定于会话的差异,只需要知道那些持久化的差异。
可以通过查询 pg_catalog.pg_shadow或pg_catalog.pg_user来获取角色配置,如下:
--查询pg_shadow
francs=# select usename,useconfig from pg_shadow ;
usename | useconfig
--------------+-------------------------------
postgres |
user_a |
user_b |
skytf_select | {"search_path=skytf, public"}
francs |
dwetl |
skytf |
(7 rows)
francs=# alter role francs set log_statement='all';
ALTER ROLE
francs=# select usename,useconfig from pg_shadow ;
usename | useconfig
--------------+-------------------------------
postgres |
user_a |
user_b |
skytf_select | {"search_path=skytf, public"}
rancs | {log_statement=all}
dwetl |
skytf |
(7 rows)
Run Code Online (Sandbox Code Playgroud)
不幸的pg_shadow
是没有显示没有登录权限的角色。
我发现在以下查询中使用 @dezso 提示视图更有用:
SELECT coalesce(role.rolname, 'database wide') as role,
coalesce(db.datname, 'cluster wide') as database,
setconfig as what_changed
FROM pg_db_role_setting role_setting
LEFT JOIN pg_roles role ON role.oid = role_setting.setrole
LEFT JOIN pg_database db ON db.oid = role_setting.setdatabase;
Run Code Online (Sandbox Code Playgroud)
与往常一样,只需将其添加到 psqlrc 文件(请参阅文档)
归档时间: |
|
查看次数: |
7500 次 |
最近记录: |