数据库文件布局
本节描述文件和目录级别的存储格式。
传统上,数据库集群使用的配置和数据文件一起存储在集群的数据目录中,通常称为PGDATA(以可用于定义它的环境变量的名称命名)。PGDATA的常见位置是/var/lib/pgsql/data。 由不同服务器实例管理的多个集群可以存在于同一台计算机上。
PGDATA目录包含几个子目录和控制文件,如表 65-1所示。除了这些必需的项目之外,集群配置文件postgresql.conf、pg_hba.conf和pg_ident.conf传统上也存储在PGDATA中,尽管也可以将它们放在其他地方。
PGDATA的内容
Item | Description |
---|---|
PG_VERSION | 包含PostgreSQL主版本号的文件 |
base | 包含每个数据库子目录的子目录 |
global | 包含集群范围表的子目录,例如pg_database |
pg_commit_ts | 包含事务提交时间戳数据的子目录 |
pg_clog | 包含事务提交状态数据的子目录 |
pg_dynshmem | 包含动态共享内存子系统使用的文件的子目录 |
pg_logical | 包含逻辑解码状态数据的子目录 |
pg_multixact | 包含多事务状态数据的子目录(用于共享行锁) |
pg_notify | 包含 LISTEN/NOTIFY 状态数据的子目录 |
pg_replslot | 包含复制槽数据的子目录 |
pg_serial | 包含已提交的可序列化事务信息的子目录 |
pg_snapshots | 包含导出快照的子目录 |
pg_stat | 包含统计子系统永久文件的子目录 |
pg_stat_tmp | 包含统计子系统临时文件的子目录 |
pg_subtrans | Subdirectory containing subtransaction status data |
pg_tblspc | Subdirectory containing symbolic links to tablespaces |
pg_twophase | Subdirectory containing state files for prepared transactions |
pg_xlog | 包含 WAL(预写日志)文件的子目录 |
postgresql.auto.conf | 用于存储由ALTER SYSTEM设置的配置参数的文件 |
postmaster.opts | A file recording the command-line options the server was last started with |
postmaster.pid | 一个锁定文件,记录当前 postmaster 进程 ID (PID)、集群数据目录路径、postmaster 启动时间戳、端口号、Unix 域套接字目录路径(Windows 上为空)、第一个有效的 listen_address(IP 地址或*,如果不在 TCP 上监听则为空)和共享内存段 ID(服务器关闭后此文件不存在) |
对于集群中的每个数据库,在PGDATA /base中都有一个子目录,以pg_database中数据库的 OID 命名。此子目录是数据库文件的默认位置;特别是,它的系统目录存储在那里。
每个表和索引都存储在单独的文件中。对于普通关系,这些文件以表或索引的文件节点号命名,可以在pg_class . relfilenode中找到。但对于临时关系,文件名的形式为t BBB _ FFF,其中BBB是创建该文件的后端的后端 ID,FFF是文件节点号。在任一情况下,除了主文件(又名主分支)之外,每个表和索引都有一个空闲空间图(参见第 65.3 节),其中存储了有关关系中可用空闲空间的信息。空闲空间图存储在以文件节点号加上后缀_fsm命名的文件中。表还有一个可见性图,存储在以后缀_vm结尾的分支中,以跟踪已知哪些页面没有死元组。可见性图在第 65.4 节中进一步描述。未记录的表和索引有第三个分支,称为初始化分支,它存储在带有后缀_init的分支中
警告 |
请注意,虽然表的文件节点通常与其 OID 匹配,但情况并不一定如此;某些操作(如TRUNCATE、REINDEX、CLUSTER和某些形式的ALTER TABLE)可以在保留 OID 的同时更改文件节点。避免假设文件节点和表 OID 相同。此外,对于某些系统目录(包括pg_class本身),pg_class . relfilenode包含零。这些目录的实际文件节点号存储在较低级别的数据结构中,可以使用函数获取 |
当表或索引超过 1 GB 时,它将被划分为千兆字节大小的段。第一个段的文件名与文件节点相同;后续段名为 filenode.1、filenode.2 等。这种安排避免了在具有文件大小限制的平台上出现问题。(实际上,1 GB 只是默认的段大小。可以在构建PostgreSQL时使用配置选项--with-segsize调整段大小。)原则上,空闲空间图和可见性图分叉也可能需要多个段,尽管在实践中这种情况不太可能发生。
如果一个表的列中可能包含较大的条目,则该表将具有一个关联的TOAST表,该表用于线外存储太大而无法正确保存在表行中的字段值。pg_class . reltoastrelid从一个表链接到其TOAST表(如果有)。
标签:文件,存储,包含,数据库,子目录,pg,节点,物理 From: https://www.cnblogs.com/wonchaofan/p/18225009