概述
今天主要介绍下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目录是如何组织的呢?