我們都知道,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)
