超详细的postgreSQL目录结构介绍

概述

今天主要介绍下pg的整体目录结构,方便大家对PG有个整体认识,也做个备忘!

根目录介绍
data├──baseunderglobal,allthefilenodeishard-code(selectoid,relname,relfilenodefrompg_classwhererelfilenode=0orderbyoid;)├──pg_clogclientauthenticationconfigfile├──pg_├──pg_stat├──pg_stat_tmpversionfile├──pg_xlogstatusinfoofxlogarchive├──├──

global目录介绍

global名如其意,存放的文件用于存储全局的系统表信息和全局控制信息。

global下有四种文件:

1、pg_control

用于存储全局控制信息

2、pg_

用于将当前目录下系统表的OID与具体文件名进行硬编码映射(每个用户创建的数据库目录下也有同名文件)。

3、pg_

用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)。

4、全局系统表文件

数字命名的文件,用于存储系统表的内容。它们在pg_class里的relfilenode都为0,是靠pg_将OID与文件硬编码映射。(注:不是所有的系统表的relfilenode都为0)

data├──globalpg_pltemplate│├──1137pg_tablespace│├──1214pg_shdep_deper_index│├──1233pg_authid│├──1261pg_database│├──2396pg_shdescription_o_c_index│├──2671pg_database_oid_index│├──2676pg_authid_oid_index│├──2694pg_auth_members_member_role_index│├──2697pg_tablespace_spcname_index│├──2846pg_toast_2396_index│├──2964pg_db_role_setting_databaseid_rol_index│├──2966pg_toast_2964_index│├──3592pg_shseclabel_object_index│├──4060pg_toast_3592_index│├──6000pg_replication_origin_roiident_index│├──6002globalcontrolfile,usepgcheck-pctoseeit.│├──pg_,usepgcheck-prtoseeit.

base目录介绍

base目录用于存放数据库的所有实体文件。例如,我们创建的第一个库testdb的OID为16384,那么在data/base下就会产生一个名为16384的目录,用于存储testdb的数据文件。

testdb=usetostoredatabasefile(SELECToid,datnameFROMpg_database;)│├──1template0database│├──12407testdb,firstuserdatabase││├──3600││├──3600_fsm││├──3600_vm││├──16385││├──pg_││├──pg_││└──PG_VERSION

1、pg_是pg_class里relfilenode为0的系统表,OID与文件的硬编码映射。

3、pg_是系统表的cache文件,用于加快读取。默认不存在,查询系统表后自动产生。

4、PG_VERSION是当前数据库数据格式对应的版本号

4、其它文件是需要到pg_class里根据OID查到对应的relfilenode来与文件名匹配的。

例如:tab1的relfilenode是16385,那么16385这个文件就是tab1的数据文件

testdb=selectoid,*frompg_tablespace;

每一个Oid都在data/pg_tblspc下对应一个名为Oid的软链接文件,指向真正的space目录。

tree../data/pg_tblspc/../data/pg_tblspc/└──49162-/home/postgres//postgres/data/dbspace

在space目录是如何组织的呢?

发布于 2025-05-02
172
目录

    推荐阅读