1. 引言PostgreSQL 作为一款先进的开源关系型数据库其架构设计既清晰又灵活。理解它的逻辑与物理存储结构对于数据库的管理、性能调优以及备份恢复都至关重要。本文将从逻辑层面集簇、数据库、模式、表和物理层面目录结构、文件布局、页格式两个维度对 PostgreSQL 的存储体系进行一次全面的解析。2. 逻辑结构概览PostgreSQL 的逻辑结构自上而下可以划分为以下几个层次每一层都有独立的命名空间和访问隔离flowchart TD subgraph PostgreSQL 逻辑结构层级自上而下 direction TB A[集簇 Cluster] --|包含多个| B[数据库 Database] B --|包含多个| C[模式 Schema] C --|包含多个| D[表 Table / 视图 / 索引 / 函数等] end集簇Cluster一个 PostgreSQL 实例管理的所有数据集合由单个数据库服务进程管理。在文件系统中对应一个数据目录通常由环境变量PGDATA指定。数据库Database集簇内的独立数据集合拥有各自的系统表、用户表、索引等。不同数据库之间数据完全隔离但共享受同一集簇的进程池和 WAL 机制。模式Schema数据库内部的命名空间用于组织表、视图、函数等对象。通过search_path控制对象查找顺序从而实现多租户或开发与生产环境隔离。表Table实际存储数据的对象在物理上由一个或多个文件组成。每个表都会有一个唯一的对象标识符oid用于在系统表中关联和定位。3. 集簇内部对象与系统表在逻辑结构中集簇是整个实例的“根”它包含多个数据库。当一个集簇被初始化后会默认创建三个基础数据库template1创建新数据库时的默认模板。template0干净的备份模板用于恢复操作。postgres供管理员使用的默认数据库。每个数据库内部都有一套共享的系统表位于pg_catalog模式记录了整个集簇的元数据例如pg_database所有数据库信息、pg_class所有关系如表和索引、pg_tablespace表空间定义等。这些系统表也存储在物理文件中但使用者通过 SQL 即可查询和管理。4. 物理存储架构在文件系统层面整个集簇的数据都存放在PGDATA指定的目录下。其顶层目录结构大致如下PGDATA/ ├── base/ # 每个数据库都有一个子目录名为数据库的 oid ├── global/ # 集簇级别的共享系统表如 pg_database、pg_tablespace ├── pg_wal/ # WAL预写式日志文件旧版为 pg_xlog ├── pg_tblspc/ # 指向用户自定义表空间目录的符号链接 ├── pg_stat/ # 统计信息临时文件 ├── pg_logical/ # 逻辑复制相关数据 ├── pg_commit_ts/ # 事务提交时间戳数据 └── postgresql.conf # 主配置文件在base目录下每个数据库都有一个以其系统标识符oid命名的子目录。在该子目录中每个表、索引、序列等对象至少对应一个文件文件名通常为对象的relfilenode可能与oid相同。当表文件大小超过 1 GB 时PostgreSQL 会创建新的分段文件命名为relfilenode.1、relfilenode.2等。5. 表空间与物理文件分布除了默认的pg_default表空间数据存储在PGDATA/base下和pg_global表空间存储在PGDATA/global管理员可以创建自定义表空间将某些数据库或表的数据文件存储到不同的磁盘位置。其原理如下创建表空间时指定一个目录PostgreSQL 会在该目录下创建一个版本子目录如PG_15_202209061并在PGDATA/pg_tblspc下创建一个符号链接链接名称为表空间的 oid指向该版本子目录。当某个表或数据库指定使用该表空间时其数据文件实际存储在表空间目录的对应数据库 oid 子目录下而非PGDATA/base。这种机制使得冷热数据分层、I/O 负载分散等存储优化变得容易实现。6. 数据文件内部结构页与元组每个数据文件如表的存储文件由多个固定大小的页Page也叫块组成默认大小为 8 KB。每个页的内部结构大致如下页头Page Header记录 LSN、校验和、空闲空间指针等管理信息。项指针Item Pointer / Line Pointer一个数组每个元素指向页内一条元组Tuple的起始位置。空闲空间用于存储新的元组数据由空闲空间指针管理。元组Tuple / Row实际存储的行数据包含元组头事务 ID、命令 ID、空值位图等和列数据本身。这种设计使得同一个页内可以高效地进行插入、更新和删除。由于 MVCC多版本并发控制机制更新一行时通常会在同一页或另一页插入新版本元组并将旧版本标记为过期这也是为什么经常需要执行VACUUM来回收死元组占用的空间。7. 集簇初始化与数据库创建时的物理变化当我们执行initdb命令初始化集簇时PostgreSQL 会创建上述PGDATA目录结构并在base/1、base/13756等目录下为模板数据库和默认数据库生成系统表的文件。当用户执行CREATE DATABASE newdb;时PostgreSQL 实际上是复制template1数据库的物理文件并在base下创建一个新的子目录同时在pg_database系统表中插入一条记录。这种“文件系统复制”的方式使得创建数据库的速度很快。8. 总结理解 PostgreSQL 的逻辑结构与物理存储之间的关系有助于我们更深刻地把握其工作原理逻辑层提供了清晰的抽象集簇→数据库→模式→表方便开发和权限管理。物理层以文件系统为基础通过 oid 和 relfilenode 进行对象与文件的映射并利用页结构实现高效的行存储与 MVCC。表空间机制让存储布局更加灵活能够适应不同的硬件与性能需求。在排查磁盘空间问题、规划备份策略或优化查询性能时这些知识都是不可或缺的基石。建议读者在自己的测试环境中通过查看PGDATA目录、查询系统表以及使用pg_relation_filepath()等函数进行实践以加深理解。
UnityResolve.hpp:C++与Unity运行时交互的统一解决方案 1. 项目概述与核心痛点 如果你在Unity游戏开发或者逆向工程领域摸爬滚打过,尤其是在尝试用C与Unity运行时进行深度交互时,大概率被几个问题折磨得够呛:如何从C侧优雅地调用C#的类方法?怎么动态获取和修改游戏对象(Game…
2026年半封闭丝杆模组选这3家,实用不踩坑! 你是不是也遇到过这样的场景:一条自动化产线刚调试完,结果在高速点胶或搬运时,模组末端抖得像筛子,产品良率直接卡在94%上不去?或者图便宜买了低成本的同步带模组,结果负载稍大点就晃得离谱,焊偏…
RAG 超级教程:从原理到实战,用向量+重排模型搭出又准又省钱的 AI 问答 你有没有过这种冲动:网站有几百篇文章,想做一个「站内 AI 助手」,于是把全部文章正文拼进 system prompt,再问问题? 我最初也是这么干的。直到账单出来、回答开始胡说八道、长文章直接超出上下文窗口——才意识到这是…
Cursor + Docker + WSL2三端协同开发环境搭建(Windows/macOS/Linux全平台验证):解决文件监听失效、热重载中断等5大顽疾 更多请点击: https://codechina.net 第一章:Cursor Docker WSL2三端协同开发环境搭建(Windows/macOS/Linux全平台验证):解决文件监听失效、热重载中断等5大顽疾 Cursor 作为专为 AI 编程优化的现代编辑器ÿ…
AI伴侣应用隐私风险与合规开发指南 那天晚上,我正测试一个AI对话应用,想看看它在情感支持方面的表现。输入一些日常压力后,AI很快给出了共情回应,语气温暖得让人意外。但当我切到后台查看系统权限时,发现这个刚安装的应用已经请求了相机、麦克风、位置等…
碧蓝航线全皮肤解锁终极指南:Perseus补丁简单三步教程 碧蓝航线全皮肤解锁终极指南:Perseus补丁简单三步教程 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 还在为碧蓝航线中那些精美皮肤无法使用而烦恼吗?Perseus原生库补丁为你提供了…
AI能否推动西方经济生产率增长?皮萨里德斯的深度分析 诺贝尔经济学奖得主克里斯托弗皮萨里德斯最近提出了一个引人深思的观点:人工智能无法让西方经济体重返生产率快速增长的时代。这一观点在当前AI热潮中显得尤为独特,值得我们深入探讨。 皮萨里德斯作为劳动经济学领域的权威,他的分析基于对经…
3分钟快速解锁碧蓝航线全皮肤:Perseus原生库补丁完整指南 3分钟快速解锁碧蓝航线全皮肤:Perseus原生库补丁完整指南 【免费下载链接】Perseus Azur Lane scripts patcher. 项目地址: https://gitcode.com/gh_mirrors/pers/Perseus 还在为碧蓝航线中那些精美的舰娘皮肤无法使用而烦恼吗?Perseus原生库补丁…
2026 淮安代理记账财税机构选择避坑指南,四大维度拆解 - 山沟沟的小娃娃 清江浦、淮安区、淮阴区、经开区、洪泽、涟水、金湖、盱眙各类市场主体在经营过程中,都需要稳定合规的财税托管服务,挑选一家靠谱的财税服务机构,是企业规避税务风险、减少财务人力开支的基础条件。如今淮安财税服务…
2026年7月最新金华宇舶官方售后客户服务热线与维修网点地址汇总 - 亨得利官方服务中心 金华宇舶官方售后客户服务热线与维修网点地址信息是每一位宇舶腕表拥有者都极为关注的核心内容。作为瑞士高端制表品牌,宇舶以其精湛工艺与创新设计闻名,确保腕表始终处于理想运行状态,离不开官方售后渠道的合规支持…
HS2汉化补丁终极指南:一键解锁Honey Select 2完整中文体验 HS2汉化补丁终极指南:一键解锁Honey Select 2完整中文体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而苦恼吗…
怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬 同一箱老家特产,同事花22寄的,我花9块。不是我路子野,是我按场景选了渠道。寄快递便宜不便宜,一半看你会不会"对号入座"——退换货、卖闲置、寄礼物,招数都不一样。 分场景才最省 丰火递想不管啥场景都…
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复 如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…
企业AI落地困境与AgenticOps实践指南 1. 企业AI落地的现实困境与破局之道过去两年,大模型技术呈现爆发式增长,从GPT-3到GPT-4,从LLaMA到DeepSeek,模型参数规模从百亿级跃升至万亿级,多模态能力从单一文本扩展到图文音视频的综合处理。然而在企业应用层面&a…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…