我们都知道,postgresql的base目录是存储整体数据的目录,而base 里面就是以数据库的OID为名字的目录,目录里面全是这个数据库里面的表及相关文件。
select datname ,oid from pg_database ;
我们查询某张表的存储位置
select pg_relation_filepath(‘table1‘);
---
postgres=# select pg_relation_filepath(‘table1‘);
pg_relation_filepath
----------------------
base/12723/24765
(1 row)
查看该表对应的存储文件
可以看到有后缀为“_fsm”或“_vm”命名的文件
空闲空间映射(FSM)
select * from pg_available_extensions where name like ‘pg_free%‘;
---
postgres=# select * from pg_available_extensions where name like ‘pg_free%‘;
name | default_version | installed_version | comment
-----------------+-----------------+-------------------+----------------------------------
pg_freespacemap | 1.2 | 1.2 | examine the free space map (FSM)
(1 row)
查看某张表的fsm
select * from pg_freespace(‘table1‘);
---
postgres=# select * from pg_freespace(‘table1‘);
blkno | avail
-------+-------
0 | 8128
(1 row)
需要注意:FSM文件是执行VACUUM操作时,或者是为了插入行而第一次查询FSM文件时才会创建;
可见性映射(VM)
create extension pg_visibility ;
select pg_visibility_map(‘table1‘); --- postgres=# select pg_visibility_map(‘table1‘); pg_visibility_map ------------------- (0,f,f) (1,t,f) (2,t,f) (3,t,f) (4,f,f) (5 rows)