目录
一、数据库逻辑结构
1、数据库集簇逻辑结构
2、对象标识符oid
PG中所有数据库对象都由各自的oid在内部管理;
oid是无符号的4字节整数。数据库对象和oid之间的关系存储在适当的数据字典中,具体取决于对象的类型;
数据库oid存储于 pg_database ,表空间oid存储于pg_tablespace;
数据库oid与实际存储路径下的数据库目录名一致:
二、数据库物理结构
/:数据目录($PGDATA)
此为pg数据库实例的物理存储目录,即$PGDATA/,其下存储pg实例的物理文件,简单说明如下:
/base/:pg_default表空间的物理文件位置
base/为默认的表空间物理存储位置(表空间概念详见第三小节);
下层为数据库物理存储位置,目录名的数字即为数据库的oid(pg_database);
数据库目录的下层,存储对象物理文件,对象的物理文件名字即为对象的oid(pg_class)。
三、表空间结构
1、表空间的概念
(1)PostgreSQL中的表空间是基本目录之外的附加数据区域,此功能已在版本8.0中实现。
(2)初始化数据库后默认的表空间有pg_ default、pg_ global。
- pg_global表空间的物理文件位置在数据目录的global目录中,它用来保存系统表,不可以对他进行单独表空间备份恢复。
- pg_default表空间的物理文件位置在数据目录的base子目录中,是 template0和 Itemplate1数据库的默认表空间。
(3)创建数据库时,默认从 template1数据库进行克隆,因此除非特别指定了新建数据库的表空间,否则默认使用 template1使用的表空间,即 pg_default表空间。
2、表空间物理文件存储逻辑
新建表空间时,可以将表空间的物理存储位置,定义至与默认表空间物理位置不同的磁盘上,以实现IO分布的效果,例如:
create tablespace test_talspc location '/data2/test/test_tblspc';
在新建数据库时,制定数据库所属表空间,即可将数据库物理存储路径放至指定表空间下,例如:
#新建数据库
create database wqtest tablespace test_tblspc;
#查看数据库所属表空间
postgres=# SELECT db.oid dboid,db.datname dbname,db.dattablespace spcoid,spc.spcname spcname
FROM pg_database db,pg_tablespace spc
WHERE db.dattablespace=spc.oid
AND db.datname='wqtest';
dboid | dbname | spcoid | spcname
-------+--------+--------+-------------
24969 | wqtest | 24968 | test_talspc
(1 行记录)
#确认操作系统上的物理存储路径
[root@slave1 24969]# pwd
/data/test/test_tblspc/PG_14_202107181/24969
创建表空间时产生的目录命名规则:PG_'Major version'_'Catalogue version number'
#Major version:主版本号
#Catalogue version number:子版本发布时间