PostgreSQL学习笔记(三) PostgreSQL逻辑结构和物理结构

前面学习了PostgreSQL的基本安装,也学习了体系结构,对PostgreSQL有一个基本的认识,今天我们来学习PostgreSQL的逻辑结构和物理结构。

逻辑结构

PostgreSQL默认是一个数据库集群,这个概念作为搞O的会觉得很迷惑。数据库集群不是好几台服务器组成的吗?实际上PostgreSQL中的术语不是,他是在单个主机上运行并管理单个数据库的集群。例如图一数据库集群包含了Database 1,Database 2等数据库。而一个数据库是由多个对象构成的。而这些对象包含了表、索引、视图、存储过程、函数、序列等。在PostgreSQL当中,数据库本身也是对象。并且在逻辑上彼此分离。所有其他数据库对象(表、索引)都属于他们各自的数据库。

PostgreSQL当中,所有的数据库对象都由相应的对象标识符(OID)进行内部管理。这些标识符是无符号的4字节的整数。数据库对象与相应的OID之间的关系存储在适当的系统目录中。具体取决于对象的类型。例如数据库和表的OID分别存储在PG_DATABASE和PG_CLASS中,我们可以通过下列查询查OID。

postgres=# select datname,oid from pg_database where datname='testdb';
 datname |  oid  
---------+-------
 testdb  | 16385

postgres=# select relname,oid from pg_class where relname='t1';
 relname |  oid  
---------+-------
 t1      | 16388

物理结构


一个数据库集群基本上可以看作是一个基础的目录,它包含了一些子目录和文件。如果执行inittab执行程序初始化,则将在指定目录下创建基本目录,基本目录通常被设置成环境变量PGDATA。
如图所示,数据库集群的基础目录是$PGDATA。而数据库存放在$PGDATA下的Base目录下。这里有好几个数字开头的目录,对应刚刚我们通过查 pg_database找出的oid编号。例如oid为16385的代表着testdb数据库,而该目录下进一步存放了表和索引、free-space maps和visibility maps(我们可以通过pg_class下的oid编号查到对应的表)。另外还有一些程序的文件目录存放在$PGDATA下面。Postgre也支持表空间,Postgre表空间是一个包含基本目录之外的数据的目录。

关注dbDao.com的新浪微博

扫码加入微信Oracle小密圈,了解Oracle最新技术下载分享资源

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569