设为首页 加入收藏

TOP

PostgreSQL-系统表、系统视图
2015-11-21 02:09:10 】 浏览:7739
Tags:PostgreSQL- 系统
系统表显示的都是当前操作 数据库下的信息,对象都来自当前数据库。因为不同的 系统表都用不同名的字段来记录不同对象的oid,这个表引用那个表,那个表又引用另一个表,所以这些字段名不太好记。
pg_class (系统表:对象)是一个对象表,表的每个字段都是‘rel’开头,分明就是 ‘relation’这个单词的缩写,意思就是‘关系’。表中relkind字段决定对象类型:r = 普通表,i = 索引,S = 序列,v = 视图, c = 复合类型,s = 特殊,t = TOAST表。对象所属的relnamespace(模式名称)和relowner(所有者)都是用其对应的oid显示,所以要直观看到实际本名要联合pg_namespace(系统表:模式)和pg_roles(系统视图:角色)一起查,这两个表和视图中都有oid字段。
以查询对象所属模式及其名称为例:
select relname,relkind,relnamespace,nspname from pg_class c,pg_namespace n where n.oid=16424 and c.relnamespace=n.oid

      relname      | relkind | relnamespace | nspname
-------------------+---------+--------------+---------
 website_pkey      | i       |        16424 | yun
 website           | r       |        16424 | yun
 board_pkey        | i       |        16424 | yun
 board             | r       |        16424 | yun
 spam_keyword_pkey | i       |        16424 | yun
 spam_keyword      | r       |        16424 | yun
oid数据类型,查询有无单引号都可以。pg_namespace中的oid字段是隐含的,用select * from不能直接查询。
select oid,* from pg_namespace

  oid  |      nspname       | nspowner |               nspacl                
-------+--------------------+----------+-------------------------------------
    99 | pg_toast           |       10 | 
 11194 | pg_temp_1          |       10 | 
 11195 | pg_toast_temp_1    |       10 | 
    11 | pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
 11469 | information_schema |       10 | {postgres=UC/postgres,=U/postgres}
  2200 | public             |       10 | {postgres=UC/postgres,=UC/postgres}
 16424 | yun                |    16392 | 
 16551 | audit              |    16392 | 
PS:逗号其实是一种起到连结若干列与若干列作用的符号,是一个对查询结果直接产生作用的符号,不是因为查多个字段所以用来分隔为了易读好看的。
pg_namespace有模式的oid,pg_roles有用户的oid。
pg_attribute,竟然有这么一张表用来记录所有表的字段,神奇。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【PLSQL】变量声明,结构语句,cu.. 下一篇SQLServer远程服务器不存在,未被..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目