PG INTERNAL-Database Cluster, Databases, and Tables
翻译http://www.interdb.jp/pg/pgsql01.html
这一章和下一个章节总结Postgresql的基础知识,帮助读者理解后续章节.这一章,描述了下面的主题:
- database cluster的逻辑结构
- database cluster的物理结构
- heap table文件的内部逻辑布局
- 表的读写数据的方法
1.1 database cluster的逻辑结构
一个database cluster是一组被Postgresql服务器管理的database.如果你是第一次听说这个定义,那么你可能会对它产生好奇,但是database cluster这个术语在Postgresql中不是表示一组database服务器.一个Postgresql服务器运行在一个主机(host)上并且管理着一个database cluster.
下面的图显示了一个database cluster的逻辑结构.一个database是database对象的一个集合.在关系数据库理论中,一个database对象是用于存储或者引用数据的数据结构.一个(heap) table是数据库对象的典型例子,其他的比如index,sequence,view,function等都是数据库对象.在Postgresql中,数据库本身也是数据库对象,在逻辑上是相互分隔的.其他所有数据库对象都属于他们对应的数据库.
在pg中所有的数据库对象内部都有对应的object identifiers(OIDS).它是4字节无符号整数.数据库对象之间的关系和对应的OIDS都保存在合适的相应的对象类型的system catalog
.比如,database和heap table的OIDS保存在pg_database和pg_class中,所以可以通过下面的查询找出你想要的OIDS:
sampledb=# SELECT datname, oid FROM pg_database WHERE datname = 'sampledb';
datname | oid
----------+-------
sampledb | 16384
(1 row)
sampledb=# SELECT relname, oid FROM pg_class WHERE relname = 'sampletbl';
relname | oid
-----------+-------
sampletbl | 18740
(1 row)
1.2 database cluster的物理结构
一个database cluster基本上就是作为基础目录(base directory)的一个目录.它包含了许多子目录和文件.如果你执行initdb初始化一个新的database cluster,在指定的目录下一个基础目录就会被创建.虽然不是必须的,但是通常会把基础目录的路径设置