PG数据存储结构分为:逻辑结构和物理存储。
其中逻辑存储结构是内部的组织和管理数据的方式。物理存储结构是操作系统中组织和管理数据的方式。逻辑存储结构适用于不同的操作系统和硬件平台。
逻辑结构
在逻辑存储结构中首先介绍几个术语:
Database cluster(Database Cluster,SQL 标准术语 Catalog Cluster)
数据库聚集:它是指有单个PostgreSQL服务器实例管理的数据库集合,一个数据库聚集是一组被Postgresql服务器管理的database。database cluster这个术语在Postgresql中不是表示一组database服务器。一个Postgresql服务器运行在一个主机(host)上并且管理着一个database cluster。一个DataBase Cluster可以包括:多个Database、多个User、以及Database中的所有对象。如上图所示。比如pg安装完成后,在可以做任何事情之前,我们必须在磁盘中初始化一个数据目录。 这个目录中的数据我们称之为数据库聚集。组成数据库聚集的这些数据库使用相同的全局配置文件和监听端口、共用进程和内存结构。数据库聚集是由正在运行的服务器中的一个执行实例(pg的进程)管理的database集合。初始化后,数据库聚集将包含一个名为 postgres 的database,这是供用户和第三方应用所预设的dababase。 实例本身不需要 postgres 数据库存在,但許多外部工具会假设它存在。 初始化期间在数据库聚集中所创建的另一个database称为 template1。 这将作为后续创建database使用的模板; 它不应该用于实际使用。
database cluster > database > database object 包含与被包含的关系。
database object——数据库对象,是一种数据结构,用于存储查询数据。在PostgreSQL中的所有数据库对象都由各自的对象标识符(OID)进行内部的管理。OIDs存储在system catalog。不同对象类型的OID存储在不同的catalog中。database的OID存储在pg_database中;table的OID存储在pg_class中
database——数据库
在PostgreSQL中,数据库本身也是数据库对象,并且在逻辑上彼此分离,除数据库之外的其他数据库对象(例如:表、索引等等)都属于他们各自的数据库。\l+ :查询数据库列表(pg_database)。
tablespace——表空间
数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。初始化的时候,会自动创建pg_default和pg_global两个表空间。 \db+ :查询表空间列表(pg_tablespace)。
Schema——模式
当创建一个数据库时,会为其创建一个名为public的默认Schema。Schema是数据库中的命名空间,在数据库中创建的所有对象都是在Schema中创建,一个用户可以从同一个客户端连接中访问不同的Schema。而不同的Schema中可以有多个同名的Table、Index、View、Sequence、Function等等数据库对象。\dnS+ :查询模式列表(pg_namespace)
物理结构
一个database cluster基本上就是作为基础目录(base directory)的一个目录。它包含了许多子目录和文件。如果你执行initdb初始化一个新的database cluster,在指定的目录下一个基础目录就会被创建。
下图显示了pg中一个database cluster的例子。一个database是base子目录下的一个子目录。每一个表和索引在database子目录中保存在(至少)一个文件(索引和数据可以保存在一个物理文件中)。另外,也有其他子目录保存一些特别的数据和配置文件。由于pg支持tablespace,这表面tablespace这一术语与其他数据库的意思是不一样的。一个tablespace在pg中实际是一个不在base子目录中的目录。
数据文件内部结构
page--数据库中最小的存储单元。在数据文件(堆表、索引、free space map and visibility map)内部,空间被分配成固定长度的pages使用,默认大小8192 byte (8 KB)
block numbers--每个page都是从0开始按顺序编号使用(编号叫block numbers),如果page已被填满,PostgreSQL会在文件末尾添加一个新的空页,以增加文件大小。
超详细的PG数据存储结构:逻辑结构和物理存储总结-51CTO.COM
PG INTERNAL-Database Cluster, Databases, and Tables_/pg internal_ivy&feeling的博客-CSDN博客
PostgreSQL物理存储结构 - 掘金
Postgresql数据库体系结构-存储结构 - 墨天轮
PostgreSQL之base和global目录完全解析_pg base目录_oldba.cn的博客-CSDN博客
The Internals of PostgreSQL : Chapter 1 Database Cluster, Databases, and Tables