PostgreSQL学习手册(系统表)(二)
c.oid = attr.attrelid;
relname | attname | attnum
-------------+----------+--------
testtable | tableoid | -7
testtable | cmax | -6
testtable | xmax | -5
testtable | cmin | -4
testtable | xmin | -3
testtable | ctid | -1
testtable | i | 1
(7 rows)
#只查看用户自定义字段的类型
postgres=# SELECT relname,attname,typname FROM pg_class c,pg_attribute a,pg_type t WHERE c.relname = 'testtable' AND c.oid = attrelid AND atttypid = t.oid AND attnum > 0;
relname | attname | typname www.2cto.com
-------------+----------+---------
testtable | i | int4
(7 rows)
三、pg_attrdef:
该系统表主要存储字段缺省值,字段中的主要信息存放在pg_attribute系统表中。注意:只有明确声明了缺省值的字段在该表中才会有记录。
名字
类型
引用
描述
adrelid
oid
pg_class.oid
这个字段所属的表
adnum
int2
pg_attribute.attnum
字段编号,其规则等同于pg_attribute.attnum
adbin
text
字段缺省值的内部表现形式。
adsrc
text
缺省值的人可读的表现形式。
见如下应用示例:
#查看指定表有哪些字段存在缺省值,同时显示出字段名和缺省值的定义方式
postgres=# CREATE TABLE testtable2 (i integer DEFAULT 100);
CREATE TABLE
postgres=# SELECT c.relname, a.attname, ad.adnum, ad.adsrc FROM pg_class c, pg_attribute a, pg_attrdef ad WHERE relname = 'testtable2' AND ad.adrelid = c.oid AND adnum = a.attnum AND attrelid = c.oid;
relname | attname | adnum | adsrc
-------------+----------+---------+-------
testtable2 | i | 1 | 100
(1 row)
四、pg_authid:
该系统表存储有关数据库认证的角色信息,在PostgreSQL中角色可以表现为用户和组两种形式。对于用户而言只是设置了rolcanlogin标志的角色。由于该表包含口令数据,所以它不是公共可读的。PostgreSQL中提供了另外一个建立在该表之上的系统视图pg_roles,该视图将口令字段填成空白。
名字
类型
引用
描述
rolname
name
角色名称。
rolsuper
bool
角色是否拥有超级用户权限。
rolcreaterole
bool
角色是否可以创建其它角色。
rolcatupdate
bool
角色是否可以直接更新系统表(如果该设置为假,即使超级用户也不能更新系统表)。
rolcanlogin
bool
角色是否可以登录,换句话说,这个角色是否可以给予会话认证标识符。
rolvaliduntil
timestamptz
口令失效时间(只用于口令认证);如果没有失效期,则为NULL。
rolconfig
text[]
运行时配置变量的会话缺省。
见如下应用示例:
#从输出结果可以看出口令字段已经被加密。
postgres=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
-----------+-------------------------------------
postgres | md5a3556571e93b0d20722ba62be61e8c2d
五、pg_auth_members:
该
系统表存储角色之间的成员关系。
名字
类型
引用
描述
roleid
oid
pg_authid.oid
组角色的ID。
member
oid
pg_authid.oid
属于组角色roleid的成员角色的ID。
grantor
oid
pg_authid.oid
赋予此成员关系的角色的ID。
admin_option
bool
如果具有把其它成员角色加入组角色的权限,则为真。
见如下应用示例:
#1. 先查看角色成员表中有哪些角色之间的隶属关系,在当前结果集中只有一个成员角色隶属于一个组角色,
# 如果有多个成员角色隶属于同一个组角色,这样将会有多条记录。
postgres=# SELECT * FROM pg_auth_members ;
roleid | member | grantor | admin_option
--------+--------+---------+--------------
16446 | 16445 | 10 | f
(1 row)
#2. 查看组角色的名字。
postgres=# SELECT rolname FROM pg_authid a,pg_auth_members am WHERE a.oid = am.roleid; www.2cto.com
rolname
---------
mygroup
(1 row)
#3. 查看成员角色的名字。
#4. 如果需要用一个结果集获取角色之间的隶属关系,可以将这两个结果集作为子查询后再进行关联。
postgres=# SELECT rolname FROM pg_authid a,pg_auth_members am WHERE a.oid = am.member;
rolname
---------
myuser
(1 row)
六、pg_constraint:
该系统表存储Postg