- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)