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区分该后端的不同临时文件。