表空间
表空间
文件系统位置的一个目录,可以保存所有其他对象的容器,如表、索引等,有默认表空间、共享系统表表空间、自定义表空间
默认表空间中pg_default(base目录):
#目录名“1”是系统数据库template1各relation的存储目录
#目录数字“倒数第二”是系统数据库template0各relation的存储目录
#其他数字目录是用户建立的数据库目录
#目录的命名方法就是数据库的oid值
#FSM的文件记录每个数据块的空闲空间
#VM文件让vacuum高效工作,被标为无效的记录需要用vacuum来进行清理,需要一个文件来标识哪些数据块中存在无效记录来达到高效的清理。
共享系统表表空间pg_global(global目录):
$持有集群中所有数据库共享的系统表
自定义表空间:
*会在pg_tblspc目录下创建一个软链接,表空间oid->自定义表空间目录
*可以在创建表时指定表空间,也可以修改表空间,修改后原来表空间的文件为空
*数字目录为数据库目录,下面的文件为表文件
数据库的物理布局设计
每个数据库都会在$PGDATA/base下面生成一个子目录,文件名与数据库oid一一对应
数据库目录可以分布于多个表空间,也就是同一个数据库oid可以存在于不同表空间
模式与表空间
模式是逻辑存在的,它不受表空间的限制
表和索引的物理布局设计
每一个表和索引如果不超过1G大小,都只有一个文件
表或索引对象被创建后会生成以relfilenode编号命名的数据文件
relfilenode标识对象物理位置的数字标号,会随数据存放的变化位置变化而变化
函数pg_relation_filenode() 可以获得对象的relfilenode
表和索引也有和数据库一样的OID,另外还有一个relfilenode,这个值不会总是匹配OID,在发生一些truncate,reindex,cluster,vacuum full等相关的操作,会发生变化
开始oid和relfilenode是一样的,truncate等操作后,relfilenode会发生变化
表空间物理布局图