postgres base目录实践性分析

本文探讨了postgres安装后base目录中数字文件的含义,这些数字与数据库表的关联方式。通过SQL查询和Linux操作,揭示了隐藏的oid列与其他元数据信息在数据库系统中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

postgres安装后下面有个base目录,目录下的文件通常是一串数字组成,这串数字是什么呢?他是如何和表对应关联起来的?


SQL操作

create table test(c int4);
select oid,* from pg_class where relname ='test'
"oid";"relname";"relnamespace";"reltype";"reloftype";"relowner";"relam";"relfilenode";"reltablespace";"relpages";"reltuples";"relallvisible";"reltoastrelid";"reltoastidxid";"relhasindex";"relisshared";"relpersistence";"relkind";"relnatts";"relchecks";"relhasoids";"relhaspkey";"relhasrules";"relhastriggers";"relhassubclass";"relispopulated";"relfrozenxid";"relminmxid";"relacl";"reloptions"
410265;"test";2200;410267;0;10;0;410265;0;0;0;0;0;0;f;f;"p";"r";1;0;f;f;f;f;f;t;61603587;1929;"";""

由于oid是隐藏列,必须明确指定才可以显示出来,类似ctid,xmin,xmax,cmin,cmax等等。

Linux操作

[root@R720 base]# find ./ -name 410265
./98983/410265
[root@R720 base]# ll ./98983/410265 
-rw------- 1 postgres postgres 0 8月   6 15:49 ./98983/410265


SQL操作

insert into test values(1);

Linux操作

[root@R720 base]# ll ./98983/410265 
-rw------- 1 postgres postgres 8192 8月   6 15:49 ./98983/410265
我们发现文件大小被改变,所以可以判定这个文件和表的关系。


SQL操作

truncate test ;
select oid,* from pg_class where relname ='test'
"oid";"relname";"relnamespace";"reltype";"reloftype";"relowner";"relam";"relfilenode";"reltablespace";"relpages";"reltuples";"relallvisible";"reltoastrelid";"reltoastidxid";"relhasindex";"relisshared";"relpersistence";"relkind";"relnatts";"relchecks";"relhasoids";"relhaspkey";"relhasrules";"relhastriggers";"relhassubclass";"relispopulated";"relfrozenxid";"relminmxid";"relacl";"reloptions"
410265;"test";2200;410267;0;10;0;410271;0;0;0;0;0;0;f;f;"p";"r";1;0;f;f;f;f;f;t;61603590;1929;"";""

我们发现oid没有改变,但是relfilenode被改变了,relfilenode是什么呢?

Linux操作

[root@R720 base]# ll ./98983/410265 
ls: 无法访问./98983/410265: 没有那个文件或目录
[root@R720 base]# find ./ -name 410265
[root@R720 base]# find ./ -name 410271
./98983/410271
[root@R720 base]# ll ./98983/410271
-rw------- 1 postgres postgres 0 8月   6 15:56 ./98983/410271

以上Linux操作可以看出,truncate表之后文件被物理删除了,而新建的文件名字对应的就是relfilenode字段值。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值