注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL:如何查询基于用户(role)设置的参数  

2013-04-22 15:47:54|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


        PostgreSQL 可以针对服务级别,数据库级别,用户级别进行参数设置,例如在 postgresql.conf
设置的参数是针对整个服务级别,当然偶尔有这样的需求:需要对指定用户设置相关的参数,设置好用
户的参数后,如何查询呢?下面演示下:


一 方法一:通过 pg_user 视图查询
--1.1 设置用户的 log_statement 参数
 postgres=# alter role francs set log_statement="all";
ALTER ROLE
   
--1.2 验证
 postgres=# select * From pg_user where usename='francs';
-[ RECORD 1 ]--------------------
usename     | francs
usesysid    | 24920
usecreatedb | f
usesuper    | f
usecatupd   | f
userepl     | f
passwd      | ********
valuntil    | 
useconfig   | {log_statement=all}

--1.3 设置用户的 maintenance_work_mem 参数
 postgres=# alter role francs set maintenance_work_mem="1GB";
ALTER ROLE

--1.4 再次验证
 postgres=# select * From pg_user where usename='francs';
-[ RECORD 1 ]---------------------------------------------
usename     | francs
usesysid    | 24920
usecreatedb | f
usesuper    | f
usecatupd   | f
userepl     | f
passwd      | ********
valuntil    | 
useconfig   | {log_statement=all,maintenance_work_mem=1GB}
 备注:上面是通过 pg_user.useconfig 查询。


二 方法二: 通过 pg_db_role_setting catalog 基表查询
--2.1 pg_db_role_setting 表结构
 Table "pg_catalog.pg_db_role_setting"
   Column    |  Type  | Modifiers 
-------------+--------+-----------
 setdatabase | oid    | not null
 setrole     | oid    | not null
 setconfig   | text[] | 
Indexes:
    "pg_db_role_setting_databaseid_rol_index" UNIQUE, btree (setdatabase, setrole), tablespace "pg_global"
备注:可见 pg_db_role_setting 会针对数据库,用户级别进行记录。

--2.2 验证
 postgres=# select oid,rolname from pg_authid where rolname='francs';
  oid  | rolname 
-------+---------
 24920 | francs
(1 row)

postgres=# select * From pg_db_role_setting where setrole=24920;
 setdatabase | setrole |                  setconfig                   
-------------+---------+----------------------------------------------
           0 |   24920 | {log_statement=all,maintenance_work_mem=1GB}
备注:因为之前的设置只针对用户 francs 设置,而没指定相应的数据库,所以 setdatabase 值为 0。
          接着往下看。
          
--2.3 用户 francs 登陆 francs 库时,设置 client_min_messages 参数
 postgres=# alter role francs in database francs set client_min_messages='warning';
ALTER ROLE

postgres=# select * From pg_db_role_setting where setrole=24920;
 setdatabase | setrole |                  setconfig                   
-------------+---------+----------------------------------------------
           0 |   24920 | {log_statement=all,maintenance_work_mem=1GB}
       24922 |   24920 | {client_min_messages=warning} 
 备注:此时 setdatabase 值为 24922, 结果很明显了,不多解释。
  
--2.4 再次查询 pg_user
 postgres=# select * From pg_user where usename='francs';
-[ RECORD 1 ]---------------------------------------------
usename     | francs
usesysid    | 24920
usecreatedb | f
usesuper    | f
usecatupd   | f
userepl     | f
passwd      | ********
valuntil    | 
useconfig   | {log_statement=all,maintenance_work_mem=1GB}
备注:之前针对数据库 francs 设置的 client_min_messages 参数在 pg_user 里是查不到的。
           这是与 pg_user 比较大的区别。


三 方法三:通过 show 命令查看
         这种方法使用某个用户登陆到相应数据库后,通过 show 命令查看,如下:

 [pg92@redhatB ~]$ psql
psql (9.2.1)
Type "help" for help.

postgres=# show log_statement;
 log_statement 
---------------
 none
(1 row)

postgres=# \c francs francs
You are now connected to database "francs" as user "francs".
francs=> show log_statement;
 log_statement 
---------------
 all
(1 row)
 备注:这种方法最直接,但很不方便。


四 取消用户级参数设置
--4.1 取消对用户 francs 的 maintenance_work_mem 设置
 postgres=# alter role francs reset maintenance_work_mem;
ALTER ROLE

--4.2 验证
 postgres=# select * From pg_user where usename='francs';
-[ RECORD 1 ]--------------------
usename     | francs
usesysid    | 24920
usecreatedb | f
usesuper    | f
usecatupd   | f
userepl     | f
passwd      | ********
valuntil    | 
useconfig   | {log_statement=all}
备注:如果想取消多个参数,则使用"RESET ALL" 语法。
 
--4.3 RESET ALL 语法
 ALTER ROLE name [ IN DATABASE database_name ] RESET ALL
备注:比较简单,不再演示。


五 总结
   1 pg_user 只能查询针对用户的设置,如果设置了用户登陆到某个库的参数设置,则查不到。
   2 用户级别的参数设置建议查询 pg_db_role_setting 系统表,因为这记录了 "数据库 + 用户" 的参数设置。
  
   
六 参考
pg_user               
ALTER ROLE            

  评论这张
 
阅读(11784)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016