第一章
数据库群集、数据库、表
这个章节和下个章节概叙Postgresql基本的知识,这将帮助阅读随后的章节。在这章,将描叙如下主题:
数据群集的逻辑结构
数据库群集的物理结构
堆表文件的内部布局
对表读和写的方法
假如你已经熟悉这些,可以跳过这章
1.1 数据群集的逻辑结构
一个数据库群集是指透过一个Postgresql server管理的数据库的集合。假如你第一次听见这个定义,你可能对此感到疑惑,但在PostgreSQL中的术语“database cluster"并不意味着”一组数据库服务器“,一个数据库服务器运行在一个单一的服务器并且管理一个单一的数据库群集。
图1.1显示数据库群集的逻辑结构。一个数据库是数据库对象的一个集合。在关系型数据库理论,一个数据库对象是存取或引用数据而使用的数据结构,一个 (堆)表就是它的一个典型例子,还有更多像索引、序列、视图、函数等。数据库本身也是数据库对象,并且在逻辑上是相互分离的。所有其他的数据库对象(如表、索引等)属于他们各自的数据库。
图1.1 一个数据库群集的逻辑结构
在PostgreSQL中的所有数据库对象被各自的对象标识符(OIDs)内部的管理,它们是无符号的4字节整数,数据库对象和对应OIDs的关系被存储在适当的系统目录,依赖于对象的类型,例如,数据库和堆表的OIDs被分别存储于pg_database和pg_class,如此发布如下面的查询您能找出你想知道的OIDs:
1.2 数据库群集的物理结构
一个数据库群集是一个被成为基本目录的目录,它包含一些子目录和大量的文件,假如你执行initdb工具去初始化一个新的数据库群集,一个基本目录将被创建在指定的目录下,虽然它不是强制的,这个基本目录的路径通常被设置到环境变量PGDATA
图1.2显示PostgreSQL数据库群集的例子。一个数据库是这个基本子目录下的子目录,并且每一个表和索引(至少)一个文件被存储在其所属数据库的子目录下,也有几个包含特定数据和配置文件的子目录。虽然 PostgreSQL 支持表空间,但该术语的含义与其他 RDBMS 不同。 PostgreSQL 中的表空间是一个包含基本目录之外的一些数据的目录。
图 1.2. 数据库集群的一个例子。
在以下小节中,将描述数据库集群、数据库、与表和索引关联的文件以及 PostgreSQL 中的表空间的布局。
1.2.1. 数据库群集的布局
数据库群集的布局已经被描述在官方文档中。一部分文档中的主要文件和子目录列在表1.1
表1.1: 基础目录下的文件及子目录的布局(来演于官方文档)