2.1.1 主要系统表功能及依赖关系(1)

在PostgreSQL 8.4.1中,共有42张系统表和17张系统视图,系统视图是建立在基本系统表之上的。本节将对主要的系统表进行介绍,其他系统表将在后续章节中分别予以介绍。

1.pg_namespace

系统表pg_namespace用于存储命名空间。命名空间是SQL92模式下层的结构:每个名字空间有独立的关系、类型等集合,但并不会相互冲突。PostgreSQL的名字空间层次是:数据库.模式.表.属性。

当要访问一个对象时,PostgreSQL会按以下名字空间顺序进行搜索:

特殊名字空间(special),仅用于创建模式。

临时表的名字空间(TEMP)。

系统表的名字空间。

pg_namespace中每一个元组都对应一个名字空间,每一个名字空间都被分配一个OID(对象标识符,用于在整个数据库系统中唯一地标识一个数据库对象,包括数据库、表、视图、索引等,在2.2节中会进一步介绍)作为唯一标识,并且存储在对应元组的隐藏属性(PostgreSQL中每个元组都有几个用户不可见的属性,用于记录一些系统级的信息)中。每个元组(名字空间)包含的属性如表2-1所示。

表2-1 pg_namespace属性表

2.pg_tablespace

pg_tablespace存储表空间信息,将表放置在不同的表空间有助于实施磁盘文件布局。pg_tablespace在整个数据集簇里只有一份,也就是说同一个数据集簇内的所有数据库共享一个pg_tablespace表,而不是每个数据库都有自己的pg_tablespace表。

PostgreSQL里的表空间允许数据库管理员在文件系统里定义代表数据库对象的文件的存放位置。通过使用表空间,管理员可以控制一个PostgreSQL中数据的磁盘布局,即可以通过表空间将PostgreSQL系统的数据分布在不同的磁盘位置上。这样做有两个用处。第一,如果初始的集簇所在的分区或者卷用光了空间,而又无法扩展该分区或卷的空间,那么可以通过表空间去利用另一个分区的空间;第二,表空间允许管理员根据数据库对象的使用模式安排数据位置,从而优化性能。比如,一个使用很频繁的索引可以放在非常快并且可靠的磁盘上(如一种非常贵的固态设备)。而一个存储归档的数据、很少使用的或者对性能要求不高的表可以存储在一个相对便宜但速度比较慢的磁盘系统上。

pg_tablespace中每一个元组都对应一个表空间,每一个表空间都被分配一个OID作为唯一标识,并且存储在对应元组的隐藏属性中。每个元组(表空间)包含的属性如表2-2所示。

表2-2 pg_tablespace属性表

3.pg_database

pg_database中存放了当前数据集簇中数据库的信息,它也是一个在整个集簇范围内共享的系统表。该表中每一个元组就表示集簇中的一个数据库,每一个数据库都被分配一个OID作为唯一标识,并且存储在对应元组的隐藏属性中。每个元组(数据库)包含的属性如表2-3所示。

表2-3 pg_datebase属性表

【责任编辑:云霞 TEL:(010)68476606】

results matching ""

    No results matching ""