深入探究PostgreSQL:数据库集群、表及堆表结构全解析

📅 2026/7/2 7:33:59
深入探究PostgreSQL:数据库集群、表及堆表结构全解析
数据库集群的逻辑结构2026年6月28日作者深入研究Postgres内部机制并记录笔记。在PostgreSQL里数据库集群由单个PostgreSQL实例管理数据库由 Oid 表示。内置对象OID值低且硬编码用户创建表/对象OID从16384开始。对象及其关系存储在系统目录系统目录是普通表。新行添加到目录表时OID自动生成其发展历程分三个阶段。数据库集群的物理结构Postgres集群数据存于数据目录initdb 负责设置创建不同安装方法有类似逻辑。$PGDATA 目录下有多个子目录变更少见。数据库子目录布局每个数据库在 base 目录下有以OID命名的子目录。表和索引大小小于1GB时以单文件存储由 relfilenode 标识。作者创建 shop 数据库和 orders 表操作后证明 OID 不一定等于 relfilenode。表空间Postgres支持表空间可指定目录存储使用数据库文件。创建 extra_space 表空间表空间有OIDPostgres创建符号链接。表和索引存储路径与表空间OID有关。堆表结构堆表是无序页面集合页面含元组。表文件页面从0开始每页8192字节页面包含头部信息、行指针和元组。作者用 pageinspect 扩展研究添加数据后用 ctid 获取行物理位置分析页面信息。TOAST超大属性存储技术Postgres用TOAST技术处理大值可变长度数据类型支持。设置 SET STORAGE EXTERNAL 探究未压缩数据插入数据后分析主表和TOAST表信息。