data文件夹下的文件(夹)
Item
|
Description
|
PG_VERSION
|
PG版本号
|
base
|
数据文件
|
current_logfiles
|
由日志采集器写入的日志文件
|
global
|
cluster-wide tables。
|
pg_commit_ts
|
事务提交时间戳
|
pg_dynshmem
|
动态共享内存子系统
|
pg_logical
|
逻辑解码状态数据
|
pg_multixact
|
多事务状态数据(用于共享行锁)
|
pg_notify
|
侦听/通知状态
|
pg_replslot
|
复制时隙数据
|
pg_serial
|
提交的可序列化事务的信息
|
pg_snapshots
|
导出的快照
|
pg_stat
|
统计子系统的永久文件
|
pg_stat_tmp
|
统计子系统的临时文件
|
pg_subtrans
|
子事务状态数据
|
pg_tblspc
|
表空间符号链接
|
pg_twophase
|
准备事务的状态文件
|
pg_wal
|
WAL (Write Ahead Log) 文件。
|
pg_xact
|
事务提交状态数据。
|
postgresql.auto.conf
|
通过ALTER SYSTEM修改的参数
|
postmaster.opts
|
服务器上次启动的命令行选项
|
postmaster.pid
|
锁文件,记录当前邮政主进程ID(PID)、集群数据目录路径、postmaster主控开始时间戳、端口号、UNIX域套接字目录路径(Windows上的空)、
第一个有效的侦听地址(IP地址或*,或如果不在TCP上侦听空),以及共享内存段ID(TH)
|
在数据文件 base/中,每个数据库为一个目录,与数据库oid对应。
select datname, oid from pg_databases;
每个表和索引分别存储。普通的对象,文件名命名为表或索引的filenode。
select relhasindex,relfilenode from pg_class ;
临时对象,文件命名为tBBB_FFF,BBB是backend ID,FFF是filenode。
当表或索引超过1G时,会将segment分开。第一个segment文件,名字是filenode,后面的segment文件命名为filenode.1, filenode.2 等等。
1 GB只是默认的段大小。可以在编译的的时候通过选项 --with-segsize 改变。原则上,free space map and visibility map forks 也需要多个段,但现实中不太可能发生。
一个有很多列的大表有相关的TOAST表,用于字段值out-of-line存储。字段值太大,无法在表中保持正确。 pg_class.reltoastrelid 链接TOAST表。
表空间使情况更加复杂。每个用户定义的表空间在pg_tblspc,指向物理表空间目录。这个符号链接是以表空间的OID命名的。
在物理表空间目录中,有一个子目录,其名称取决于PostgreSQL服务器版本。
在特定于版本的子目录中,每个数据库都有一个子目录,该表在表空间中具有元素,以数据库形式命名。
使用filenode命名方式将表和索引存储在该目录内。pg_default tablespace不是通过pg_tblspc,而是对应 base/
pg_relation_filepath() function显示了任何关系的整个路径.只给出关系的第一段的名称。能需要追加segment number and/or _fsm, _vm, or _init 来查找与该关系相关联的所有文件。
mytest=# select pg_relation_filepath('test_0704');
pg_relation_filepath
----------------------
base/16388/16639
临时文件(用于排序更多的数据,如内存中的数据)是在base/pgsql_tmp,或者在表空间目录pg_default。
temporary file的名称是。pgsql_tmpPPP.NNN。PPP是拥有后端的PID,NNN区分该后端的不同临时文件。