↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 存储结构

存储结构

版本比较

数据库文件、关系分叉、页、元组、TOAST、空闲空间映射与可见性映射。

当前查看 PostgreSQL 18。

共 35 个条目,PostgreSQL 18 收录 35 个。

  • PG_VERSION PGDATA 路径

    PG_VERSION 包含 PostgreSQL 主版本号的文件

  • base PGDATA 路径

    base 包含各数据库子目录的子目录

  • current_logfiles PGDATA 路径

    current_logfiles 记录日志收集器当前正在写入的日志文件的文件

  • global PGDATA 路径

    global 包含集簇范围内表的子目录,例如 pg_database

  • pg_commit_ts PGDATA 路径

    pg_commit_ts 包含事务提交时间戳数据的子目录

  • pg_dynshmem PGDATA 路径

    pg_dynshmem 包含动态共享内存子系统所用文件的子目录

  • pg_logical PGDATA 路径

    pg_logical 包含逻辑解码状态数据的子目录

  • pg_multixact PGDATA 路径

    pg_multixact 包含多事务状态数据的子目录(用于共享行锁)

  • pg_notify PGDATA 路径

    pg_notify 包含 LISTEN/NOTIFY 状态数据的子目录

  • pg_replslot PGDATA 路径

    pg_replslot 包含复制槽数据的子目录

  • pg_serial PGDATA 路径

    pg_serial 包含已提交可串行化事务信息的子目录

  • pg_snapshots PGDATA 路径

    pg_snapshots 包含导出快照的子目录

  • pg_stat PGDATA 路径

    pg_stat 包含统计子系统永久文件的子目录

  • pg_stat_tmp PGDATA 路径

    pg_stat_tmp 包含统计子系统临时文件的子目录

  • pg_subtrans PGDATA 路径

    pg_subtrans 包含子事务状态数据的子目录

  • pg_tblspc PGDATA 路径

    pg_tblspc 包含指向表空间的符号链接的子目录

  • pg_twophase PGDATA 路径

    pg_twophase 包含预备事务状态文件的子目录

  • pg_wal PGDATA 路径

    pg_wal 包含 WAL(预写式日志)文件的子目录

  • pg_xact PGDATA 路径

    pg_xact 包含事务提交状态数据的子目录

  • postgresql.auto.conf PGDATA 路径

    postgresql.auto.conf 用于存储通过 ALTER SYSTEM 设置的配置参数的文件

  • postmaster.opts PGDATA 路径

    postmaster.opts 记录服务器上次启动时所用命令行选项的文件

  • postmaster.pid PGDATA 路径

    postmaster.pid 记录当前 postmaster 进程 ID(PID)、集簇数据目录路径、postmaster 启动时间戳、端口号、Unix 域套接字目录路径(可能为空)、第一个有效的 listen_address(IP 地址或 * ,若未监听 TCP 则为空),以及共享内存段 ID 的锁文件(服务器关闭后该文件不存在)

  • fsm fork 关系分叉

    本节从文件和目录的层次描述存储格式。 传统上,数据库集簇所使用的配置文件和数据文件都存放在集簇的数据目录中,这个目录通常称为 PGDATA (名字来自可用于定义它的环境变量)。 PGDATA 的一个常见位置是 /var/lib/pgsql/data 。同一台机器上可以存在多个由不同服务器实例管理的集簇。 PGDATA 目录包含若干子目录和控制文件,如 表 66.1 所示。除这些必需项之外,集簇配置文件 postgresql.conf 、 pg_hba.conf 和 pg_ident.conf …

  • init fork 关系分叉

    本节从文件和目录的层次描述存储格式。 传统上,数据库集簇所使用的配置文件和数据文件都存放在集簇的数据目录中,这个目录通常称为 PGDATA (名字来自可用于定义它的环境变量)。 PGDATA 的一个常见位置是 /var/lib/pgsql/data 。同一台机器上可以存在多个由不同服务器实例管理的集簇。 PGDATA 目录包含若干子目录和控制文件,如 表 66.1 所示。除这些必需项之外,集簇配置文件 postgresql.conf 、 pg_hba.conf 和 pg_ident.conf …

  • main fork 关系分叉

    本节从文件和目录的层次描述存储格式。 传统上,数据库集簇所使用的配置文件和数据文件都存放在集簇的数据目录中,这个目录通常称为 PGDATA (名字来自可用于定义它的环境变量)。 PGDATA 的一个常见位置是 /var/lib/pgsql/data 。同一台机器上可以存在多个由不同服务器实例管理的集簇。 PGDATA 目录包含若干子目录和控制文件,如 表 66.1 所示。除这些必需项之外,集簇配置文件 postgresql.conf 、 pg_hba.conf 和 pg_ident.conf …

  • vm fork 关系分叉

    本节从文件和目录的层次描述存储格式。 传统上,数据库集簇所使用的配置文件和数据文件都存放在集簇的数据目录中,这个目录通常称为 PGDATA (名字来自可用于定义它的环境变量)。 PGDATA 的一个常见位置是 /var/lib/pgsql/data 。同一台机器上可以存在多个由不同服务器实例管理的集簇。 PGDATA 目录包含若干子目录和控制文件,如 表 66.1 所示。除这些必需项之外,集簇配置文件 postgresql.conf 、 pg_hba.conf 和 pg_ident.conf …

  • Database File Layout 物理结构

    本节从文件和目录的层次描述存储格式。 传统上,数据库集簇所使用的配置文件和数据文件都存放在集簇的数据目录中,这个目录通常称为 PGDATA (名字来自可用于定义它的环境变量)。 PGDATA 的一个常见位置是 /var/lib/pgsql/data 。同一台机器上可以存在多个由不同服务器实例管理的集簇。 PGDATA 目录包含若干子目录和控制文件,如 表 66.1 所示。除这些必需项之外,集簇配置文件 postgresql.conf 、 pg_hba.conf 和 pg_ident.conf …

  • Database Page Layout 物理结构

    本节概述 PostgreSQL 表和索引内部所使用的页面格式。 [19] 序列和 TOAST 表的格式与普通表相同。 在下面的说明中,假定一个 字节 包含 8 个位。另外,术语 项 指的是存储在页面上的单个数据值。在表中,项是一行;在索引中,项是一条索引条目。 每个表和索引都存储为固定大小的 页面 数组(通常为 8 kB,不过在编译服务器时可以选择不同的页面大小)。在表中,所有页面在逻辑上都是等价的,因此某个特定项(行)可以存放在任意页面中。在索引中,第一页通常保留为 元页 ,用于保存控制信息…

  • Free Space Map 物理结构

    每个堆关系和索引关系(hash 索引除外)都有一个空闲空间映射( FSM ),用于跟踪该关系中的可用空间。它与主关系数据并列存放在一个独立的关系分支中,其名称由该关系的文件节点编号加上 _fsm 后缀构成。例如,如果某关系的文件节点是 12345,那么 FSM 就存储在名为 12345_fsm 的文件中,与主关系文件位于同一目录。 空闲空间映射被组织成一棵由 FSM 页面构成的树。最底层的 FSM 页面存储每个堆页面(或索引页面)上的可用空闲空间,每个这样的页面用一个字节表示。上层页面则聚合来…

  • Heap-Only Tuples ( HOT ) 物理结构

    为了支持高并发, PostgreSQL 使用 多版本并发控制 ( MVCC )来存储行。不过, MVCC 对更新查询也有一些缺点。具体来说,更新需要向表中加入新的行版本。这还可能要求为每个被更新的行新增索引条目,而移除旧的行版本及其索引条目可能代价很高。 为了帮助降低更新的开销, PostgreSQL 提供了一种名为堆内元组( HOT )的优化。该优化在以下情况下可行: 在这种情况下,堆内元组提供两项优化: 要提高页面拥有足够空间进行 HOT 更新的可能性,你可以降低表的 fillfactor…

  • TOAST 物理结构

    本节概述超长属性存储技术( TOAST , The Oversized-Attribute Storage Technique)。 PostgreSQL 使用固定页面大小(通常为 8 kB),并且不允许元组跨越多个页面。因此,无法直接存储非常大的字段值。为克服这一限制,大字段值会被压缩并且/或者拆分成多个物理行。这个过程对用户是透明的,而且对大部分后端代码的影响很小。这项技术被亲切地称为 TOAST (或者 “ 自切片面包问世以来最棒的东西 ” )。 TOAST 基础设施也被用于改进内存中大型…

  • Table row layout 物理结构

    所有表行的结构都相同。它们都有一个固定大小的头部(在大多数机器上占 23 字节),后面跟着可选的空值位图、可选的对象 ID 字段以及用户数据。头部的详细格式见 表 66.4 。实际用户数据(行的各列)从 t_hoff 指示的偏移位置开始,它必须始终是该平台 MAXALIGN 对齐单位的整数倍。只有当 HEAP_HASNULL 位在 t_infomask 中被置位时,空值位图才存在。若存在,它紧随固定头部之后,并占用足够多的字节,以便为每个数据列提供一位(也就是说,其位数等于 t_infomas…

  • The Initialization Fork 物理结构

    每个不记录 WAL 的表以及该表上的每个索引,都有一个初始化分支。初始化分支是一个适当类型的空表或空索引。当不记录 WAL 的表因崩溃而必须重置为空时,初始化分支会被复制覆盖到主分支上,而其他分支都会被擦除(它们会在需要时自动重建)。

  • Visibility Map 物理结构

    每个堆关系都有一个可见性映射(VM),用于跟踪哪些页面只包含已知对所有活动事务都可见的元组;它还会跟踪哪些页面只包含已冻结的元组。它与主关系数据并列存放在一个独立的关系分支中,名称由关系的文件节点编号加上 _vm 后缀构成。例如,如果某关系的文件节点是 12345,那么 VM 会存储在名为 12345_vm 的文件中,与主关系文件位于同一目录。请注意,索引没有 VM。 可见性映射为每个堆页面存储两个位。第一位若被置位,表示该页面是全部可见(all-visible),换句话说,该页面不包含任何需…

  • WAL Internals 物理结构

    WAL 会自动启用;管理员除了确保满足 WAL 文件的磁盘空间需求,并完成任何必要调优之外,不需要再做其他操作(见 第 28.5 节 )。 每写入一条新记录, WAL 记录就会追加到 WAL 文件中。插入位置由日志序列号( LSN )描述,它是 WAL 内的一个字节偏移量,会随着每条新记录的写入而单调递增。 LSN 值以数据类型 pg_lsn 返回。通过比较两个值,可以计算它们之间相隔的 WAL 数据量,因此它们可用于衡量复制和恢复的进度。 WAL 文件保存在数据目录下的 pg_wal 目录中…

已收录首次收录接口或属性变化不再收录

版本方格表示采样构建中的收录情况,不代表实际引入时间。点击方格可查看对应版本的定义和来源。

PostgreSQL 18 的变化 · 导出 JSON

阅读说明

清单覆盖手册中的物理结构和 PGDATA 路径,不枚举所有内部 C 结构。页大小、对齐与访问方法的布局受构建影响;图示为概念示意。