欢迎来到天天文库
浏览记录
ID:27538945
大小:52.18 KB
页数:6页
时间:2018-12-04
《view2postgresql的系统表和数据类型》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、View2Postgresql的系统表和数据类型和其他人多数DBMS相比,postgresql在更大程度上使用丫“数据驱动”。为什么这么说呢?按照TomLane的解释,原因如下:•postgresql使用一套系统表描述数据库表,表中的每一列,每个索引等等;•除此以外,postgresql同样使用系统表存储数据类型、函数、操作符和索引的访问方法等等信息;•通过增加新的数据字典,postgresql可以很方便的扩展。我们知道,在关系数据库屮,为了数据库系统的控制,必须提供数据字典的功能。数据字典不仅存储各种对象的描述,而且存储这些数据对象的细节信息。K中系统
2、表是Postgresql数据库存放结构元数据的地方,表现为存放有系统信息的普通表和视图。在postgresql每一个数据库巾都有单独的一赶系统表,这麵表人多是在数据库创建吋从template数据库拷贝过來的,描述该数据库的属性。如果想看源码的W,可以看看src/include/catalogR隶下的"pg_xxx.h"文件,这牲文件相应地定义丫"pg_xxx*•系统表的数据结构。另外,indexing.h文件定义了所有的系统表索引,toasting.h定义了所有系统表的TOAST表。2.1基本系统表pg_class表pg_t、lass存储表以及与表结构类
3、似的数据库对象的信息,包括索引、序列、试图、复合数裾类型、TOAST表等等。每一个对象在Pg_daSS表中都表现为一个元组,并且分配一个OID作为唯一标识(该属性作为隐藏属性,不能直接访问)。pg_attribute表pg_attribute表存储数掘庠表屮的每个属性的信息,对于表的每一个属性,都有一个对应的元组描述其属性,例如属性名、属性的数据类型、默认值、非NULL约朿等等。pg」ndex表pgjndex表存储索引的具体信息,把索引和索引对应的表关联起来。这里需要说明的是,由于索引也是表,所以索引也在pg_class表和pg_attribute表中右
4、对成的元组。因此,pg_index表中的姆个元组包含索引在pg_class表巾对应的元组的OID和基础表(即索引建立在该表上)的OID,同吋,也包含了计算索引所使用的表的列的信息以及索引的运算表达式。以上是postgresql数据库中最ffi要的三张系统表,还有很多其他的表就不在此一一列出了,比如pg_tablespace、pg_database等等。这些表的信息"f以通过select语句来获取。2.2与函数相关的系统表pg_proc表pg_proc表对函数进行了定义。每一个函数在该表屮都对应一个组,也含函数名。输入参数类型,返回类型以及对函数的定义(可
5、能是文本,可能是一段编译型语句,也可能是对可执行代码的引用)。编译过的函数可以静态地链接到服务器上,或者在存储在共亨库内,当第一次使用该库时动态的裁入<这些编译过的函数一般都使用C编写,当然理论上你可以有别的选择。pg」anguage表Pg_langUage表定义了函数实现所使用的语言。主耍支持了C语言和SQL语句。一些可选的语言括pl/pgsql、tel和ped。这些语言是由动态链接的处理程序提供支持的,服务器内核并不关注其中细节。以下足一些示例函数:C:int4squarc_int4(int4x)returnx氺x;}把上面的函数编译成共享库文件,这
6、样声明:CREATEFUNCTIONsquare(intd)RETURNSint4AS’/path/to/square.so,,’square_int4,LANGUAGE’(T;PL/PGSQL:CREATEFUNCTIONsquare(int4)RETURNSint4AS’beginreturn$1*$1;end;’LANGUAGEplpgsql’与聚集函数相关的系统表2.3pg_aggregate表pg_aggregate表定义了我们熟悉的这些聚集函数,比如:min()、max()、count()等。特个聚集函数涉及一个运行时的数据类型,一个更新函数
7、,一个最终输出函数,共冋完成了一个聚集函数的功能。--Theworkingstateisa2-elementintegerarray,sumandcount.—Weusesplit(n)asaquick-and-dirtywayofparsingww.visal58.comtheinputarray--value,whichcomesinasastringlike’{l,2}’.Therearebetterways…createfunctiontcl_int4_accum(int4[],int4)returnsint4[]assetstate[split
8、$1〃{,}〃]setnewsum[expr{[lindex$state1]+$
此文档下载收益归作者所有