系统表显示的都是当前操作数据库下的信息,对象都来自当前数据库。因为不同的系统表都用不同名的字段来记录不同对象的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,竟然有这么一张表用来记录所有表的字段,神奇。

  一直有两点疑惑,一是怎么查看视图的定义,二是怎么看一个函数(过程)的定义,也就是对象的实际实现语句,而不是其他属性,视图和函数都是不同模式下的对象,但是在查询它们的时候都没有受模式的影响。

  先看视图,以测试建的视图‘test_view1’为例,psql提供了3个视图相关的元命令,但是没有显示具体定义语句的,之后查询了pg_views视图才看到有,这还算是方便的。

yun=> \d test_view1
视观表 "yun.test_view1"
栏位 | 型别 | 修饰词
------------+--------------------------------+--------
kid | smallint |
word | character varying(255) |
styles | integer[] |
cids | integer[] |
filter_pos | smallint |
tm_update | timestamp(0) without time zone | yun=> \dp test_view1
存取权限
架构模式 | 名称 | 型别 | 存取权限 | 列访问权限
----------+------------+--------+----------+------------
yun | test_view1 | 视观表 | |
(1 行记录) yun=> \dv test_view1
关联列表
架构模式 | 名称 | 型别 | 拥有者
----------+------------+--------+---------
yun | test_view1 | 视观表 | chen
(1 行记录) yun=> select * from pg_views where viewname='test_view1'
schemaname | viewname | viewowner | definition
------------+------------+-----------+----------------
yun | test_view1 | chen | SELECT 定义略 ;
(1 行记录)

  再看函数,我直接查了pg_proc表,由于结果都只显示一行而结果第一行都是换行符所以psql在prosrc只显示了\r。另外psql给的2个函数相关的元命令也有用:\df 和 \sf 。

yun=> select prosrc from pg_proc where proname='thaha'
prosrc
--------------------------------------------------------
\r +
declare\r +
t2_row record;\r +
BEGIN\r +
select into t2_row gid from board where fid=52163;\r +
-- RAISE EXCEPTION 'employee % not found', ooo.name;\r+
return ooo||ooo.url||t2_row.gid;\r +
END;\r + (1 行记录)
cyyun=> \df thaha
函数列表
架构模式 | 名称 | 结果资料型别 | 参数资料型别 | 型别
----------+-------+--------------+--------------+------
cyyun | thaha | text | ooo website | 常规
(1 行记录) cyyun=> \sf thaha
CREATE OR REPLACE FUNCTION cyyun.thaha(ooo website)
RETURNS text
LANGUAGE plpgsql
AS $function$

return ooo||ooo.url||t2_row.gid;
END;
$function$

  thaha是之前随便写的一个测试函数,这里\sf命令不能显示实际执行的SQL,没法直接看到是怎么进行结果的。

  另话,新建视图v2后,把v2的select分配给public,然后drop view v2,再新建同名的view v2,不分配权限,虽然之前分配过同名的v2权限,但是其他用户是无法select新的v2的,说明权限的分配至少和viewname是没有关系的,可能也是跟随oid吧。

PostgreSQL-系统表、系统视图的更多相关文章

  1. sql server 系统表系统视图 及作用说明

    sql server 系统视图,可分为: 目录视图   兼容性视图    动态管理视图和函数    信息架构视图    复制视图 系统表: sysaltfiles主数据库 保存数据库的文件 sysch ...

  2. sql server系统表和视图相关的语句

    一.系统表 数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分. 1.1.sysservers 1.查看所有本地服务器及链接服务器 select * from master..sys ...

  3. DB2 存储过程创建、系统表

    前段时间做了数据表拆分,进行数据迁移,用到一些SQL命令,语句记录下来 db2look是DB2用于生成数据库DDL语句的一个工具: 命令:db2look -d DBname -a -e -p -i u ...

  4. auth系统与类视图

    用户 权限 密码哈希系统 表单视图工具 密码强度检查   第三方或自定义 限制登录尝试 第三方验证     (qq,微信,微博登录) 对象级权限 auth    user用户表   group分组表 ...

  5. 《A Tour of PostgreSQL Internals》学习笔记——系统表和数据类型

    上周末学习了<A Tour of PostgreSQL Internals>的第一部分(View 1),今天我们继续打开书本,继续View 2 部分. View 2 Postgresql的 ...

  6. [转]PostgreSQL教程:系统表详解

    这篇文章主要介绍了PostgreSQL教程(十五):系统表详解,本文讲解了pg_class.pg_attribute.pg_attrdef.pg_authid.pg_auth_members.pg_c ...

  7. SQLSERVER系统视图,系统表,sys.sql_modules视图

    SQLServer中提供了相当丰富的系统视图,能够从宏观到微观,从静态到动态反应数据库对象的存储结果.系统性能.系统等待事件等等.同时 也保留了与早期版本兼容性的视图,主要差别在于SQLServer2 ...

  8. SQL Server 2000 ——系统表和系统视图

    一.系统表 数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分. 1.1.sysservers 1.查看所有本地服务器及链接服务器 select * from master..sys ...

  9. ORACLE主要的系统表和系统视图

    ORACLE主要的系统表和系统视图 1.系统表 ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYS进行查询.几个重要的表或者视图如下: v$controlfile:控制 ...

  10. SQLSERVER系统视图 sql server系统表详细说明

    参考 https://www.cnblogs.com/luluping/archive/2012/11/05/2754639.html https://www.cnblogs.com/litubin/ ...

随机推荐

  1. T-SQL简单查询语句

    简单查询: 1.最简单查询(查所有数据)select * from 表名: 注:* 代表所有列select * from info 2.查询指定列select code,name from info ...

  2. 【Debug】Web开发中,Tomcat正常启动,访问欢迎页404,怎么办?

    访问页面出现404是一个会经常遇到的问题.每次开发Web项目时总要掉这个坑里几次,而且还不长记性.今天来总结一下,开发时遇到这个问题的解决思路. 1. 查看访问地址是否正确,有无拼写错误. 越是低级的 ...

  3. 7.11 数据注解特性--InverseProperty

    我们已经知道了,Code--First默认的约定,如果你没有包含外键属性在父类中,那么他会为我们创建{Class Name}_{primary Key}外键.这个InverseProperty特性用在 ...

  4. 【原创】Kafka console consumer源代码分析(二)

    我们继续讨论console consumer的实现原理,本篇着重探讨ZookeeperConsumerConnector的使用,即后续所有的内容都由下面这条语句而起: val connector = ...

  5. OA项目——总结

    先来张大致结构图: 项目链接:https://github.com/shuai7boy/YM_OA

  6. 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command)

    [源码下载] 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command) 作者:webabcd 介绍背水一战 Windows 10 之 MVV ...

  7. 最短路径之Floyd算法

    Floyd算法又称弗洛伊德算法,也叫做Floyd's algorithm,Roy–Warshall algorithm,Roy–Floyd algorithm, WFI algorithm. Floy ...

  8. rabbitmq trace 日志的使用以及其疑惑之处

    RabbitMQ 默认日志里只有类似客户端"accpet/close"等信息,对于有异常或者跟踪消息内部结构就比较麻烦了. 不过MQ有个rabbitmq_tracing插件,安装该 ...

  9. .NET程序员走向高端必读书单汇总

    .NET程序员走向高端必读书单汇总 一.知识树 1. 基本能力 1.1 数学 1.2 英语 1.3 语言表达 2. 计算机组织与体系结构 3. 算法与数据结构 4. 操作系统 5. 计算机网络 6. ...

  10. JS+HTML5的Canvas画图模拟太阳系运转

    查看效果:http://hovertree.com/texiao/html5/9.htm 地球自传 http://hovertree.com/texiao/html5/8.htm 代码如下: < ...