网站大量收购闲置独家精品文档,联系QQ:2885784924

View2Postgresql系统表和数据类型.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
View2Postgresql系统表和数据类型

View 2 Postgresql的系统表和数据类型 和其他大多数DBMS相比,postgresql在更大程度上使用了“?数据驱动?”。 为什么这么说呢? 按照Tom Lane的解释,原因如下: postgresql使用一套系统表描述数据库表,表中的每一列,每个索引等等; 除此以外,postgresql同样使用系统表存储数据类型、函数、操作符和索引的访问方法等等信息; 通过增加新的数据字典,postgresql可以很方便的扩展。 我们知道,在关系数据库中,为了数据库系统的控制,必须提供数据字典的功能。数据字典不仅存储各种对象的描述,而且存储这些数据对象的细节信息。其中系统表是Postgresql数据库存放结构元数据的地方,表现为存放有系统信息的普通表和视图。 在postgresql每一个数据库中都有单独的一套系统表,这些表大多是在数据库创建时从template数据库拷贝过来的,描述该数据库的属性。 如果想看源码的话,可以看看src/include/catalog目录下的pg_xxx.h文件,这些文件相应地定义了pg_xxx系统表的数据结构。另外,indexing.h文件定义了所有的系统表索引,toasting.h定义了所有系统表的TOAST表。 2.1 基本系统表 pg_class表 pg_class存储表以及与表结构类似的数据库对象的信息,包括索引、序列、试图、复合数据类型、TOAST表等等。每一个对象在pg_class表中都表现为一个元组,并且分配一个OID作为唯一标识(该属性作为隐藏属性,不能直接访问)。 pg_attribute表 pg_attribute表存储数据库表中的每个属性的信息,对于表的每一个属性,都有一个对应的元组描述其属性,例如属性名、属性的数据类型、默认值、非NULL约束等等。 pg_index表 pg_index表存储索引的具体信息,把索引和索引对应的表关联起来。这里需要说明的是,由于索引也是表,所以索引也在pg_class表和pg_attribute表中有对应的元组。因此,pg_index表中的每个元组包含索引在pg_class表中对应的元组的OID和基础表(即索引建立在该表上)的OID,同时,也包含了计算索引所使用的表的列的信息以及索引的运算表达式。 以上是postgresql数据库中最重要的三张系统表,还有很多其他的表就不在此一一列出了,比如pg_tablespace、pg_database等等。这些表的信息可以通过select语句来获取。 2.2 与函数相关的系统表 pg_proc表 pg_proc表对函数进行了定义。每一个函数在该表中都对应一个元组,包含函数名。输入参数类型,返回类型以及对函数的定义(可能是文本,可能是一段编译型语句,也可能是对可执行代码的引用)。编译过的函数可以静态地链接到服务器上,或者在存储在共享库内,当第一次使用该库时动态的载入。这些编译过的函数一般都使用C编写,当然理论上你可以有别的选择。 pg_language表 pg_language表定义了函数实现所使用的语言。主要支持了C语言和SQL语句。一些可选的语言包括pl/pgsql、tcl和perl。这些语言是由动态链接的处理程序提供支持的,服务器内核并不关注其中细节。 以下是一些示例函数: C: int4 square_int4 (int4 x) { return x * x; } 把上面的函数编译成共享库文件,这样声明: CREATE FUNCTION square(int4) RETURNS int4 AS ’/path/to/square.so’, ’square_int4’ LANGUAGE ’C’; PL/PGSQL: CREATE FUNCTION square(int4) RETURNS int4 AS ’begin return $1 * $1; end;’ LANGUAGE ’plpgsql’; 2.3 与聚集函数相关的系统表 pg_aggregate表 pg_aggregate表定义了我们熟悉的这些聚集函数,比如:min()、max()、count()等。每个聚集函数涉及一个运行时的数据类型,一个更新函数,一个最终输出函数,共同完成了一个聚集函数的功能。 -- The working state is a 2-element integer array, sum and count. -- We use split(n) as a quick-and-dirty way of parsing the input array -- value, which comes in as a string like ’{1,2}’. There are better ways... create fun

文档评论(0)

tmd2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档