Postgresql - 数据库文件物理存储

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


你可能感兴趣的:(Postgresql)