在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、pg_class: 该系统表记录了数据表、索引(仍然需要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型的元数据。注意:不是所有字段对所有对象类型都有意义。
见如下应用示例: 复制代码 代码如下: #查看指定表对象testtable的模式 postgres=# SELECT relname,relnamespace,nspname FROM pg_class c,pg_namespace n WHERE relname = 'testtable' AND relnamespace = n.oid; relname | relnamespace | nspname -------------+--------------+--------- testtable | 2200 | public (1 row) #查看指定表对象testtable的owner(即role)。 postgres=# select relname,rolname from pg_class c,pg_authid au where relname = 'testtable' and relowner = au.oid; relname | rolname -------------+---------- testtable | postgres (1 row) 二、pg_attribute: 该系统表存储所有表(包括系统表,如pg_class)的字段信息。数据库中的每个表的每个字段在pg_attribute表中都有一行记录。
见如下应用示例: 复制代码 代码如下: #查看指定表中包含的字段名和字段编号。 postgres=# SELECT relname, attname,attnum FROM pg_class c,pg_attribute attr WHERE relname = 'testtable' AND 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 -------------+----------+--------- testtable | i | int4 (7 rows) 三、pg_attrdef: 该系统表主要存储字段缺省值,字段中的主要信息存放在pg_attribute系统表中。注意:只有明确声明了缺省值的字段在该表中才会有记录。
见如下应用示例: 复制代码 代码如下: #查看指定表有哪些字段存在缺省值,同时显示出字段名和缺省值的定义方式 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,该视图将口令字段填成空白。
见如下应用示例: 复制代码 代码如下: #从输出结果可以看出口令字段已经被加密。 postgres=# SELECT rolname,rolpassword FROM pg_authid; rolname | rolpassword -----------+------------------------------------- postgres | md5a3556571e93b0d20722ba62be61e8c2d 五、pg_auth_members: 该系统表存储角色之间的成员关系。
见如下应用示例: 复制代码 代码如下: #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; 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: 该系统表存储PostgreSQL中表对象的检查约束、主键、唯一约束和外键约束。
七、pg_tablespace: 该系统表存储表空间的信息。注意:表可以放在特定的表空间里,以帮助管理磁盘布局和解决IO瓶颈。
见如下应用示例: 复制代码 代码如下: #1. 创建表空间。 postgres=# CREATE TABLESPACE my_tablespace LOCATION '/opt/PostgreSQL/9.1/mydata'; CREATE TABLESPACE #2. 将新建表空间的CREATE权限赋予public。 postgres=# GRANT CREATE ON TABLESPACE my_tablespace TO public; GRANT #3. 查看系统内用户自定义表空间的名字、文件位置和创建它的角色名称。 #4. 系统创建时自动创建的两个表空间(pg_default和pg_global)的文件位置为空(不是NULL)。 postgres=# SELECT spcname,rolname,spclocation FROM pg_tablespace ts,pg_authid a WHERE ts.spcowner = a.oid AND spclocation <> ''; spcname | rolname | spclocation ---------------+----------+---------------------------- my_tablespace | postgres | /opt/PostgreSQL/9.1/mydata (1 row) 八、pg_namespace: 该系统表存储名字空间(模式)。
见如下应用示例: 复制代码 代码如下: #查看当前数据库public模式的创建者的名称。 postgres=# SELECT nspname,rolname FROM pg_namespace n, pg_authid a WHERE nspname = 'public' AND nspowner = a.oid; nspname | rolname ----------+---------- public | postgres (1 row) 九、pg_database: 该系统表存储数据库的信息。和大多数系统表不同的是,在一个集群里该表是所有数据库共享的,即每个集群只有一份pg_database拷贝,而不是每个数据库一份。
十、pg_index: 该系统表存储关于索引的一部分信息。其它的信息大多数存储在pg_class。
见如下应用示例: 复制代码 代码如下: #查看该索引所在表的名称,以及构成该索引的键值数量和具体键值的字段编号。 postgres=# SELECT indnatts,indkey,relname FROM pg_index i, pg_class c WHERE c.relname = 'testtable2' AND indrelid = c.oid; indnatts | indkey | relname ----------+--------+------------ 2 | 1 3 | testtable2 (1 row) #查看指定表包含的索引,同时列出索引的名称。 postgres=# SELECT t.relname AS table_name, c.relname AS index_name FROM (SELECT relname,indexrelid FROM pg_index i, pg_class c WHERE c.relname = 'testtable2' AND indrelid = c.oid) t, pg_index i,pg_class c WHERE t.indexrelid = i.indexrelid AND i.indexrelid = c.oid; table_name | index_name ------------+---------------- testtable2 | testtable2_idx (1 row) |
请发表评论