lt_freespacemap
模块提供了一种检查自由空间图(FSM)的方法。它提供了一个名为 pg_freespace
的函数(或两个重载的函数),用于显示给定页面或关系中所有页面的自由空间图中记录的值。
默认情况下,只允许超级用户和pg_stat_scan_tables
角色的成员使用。可以使用GRANT
授权给其他用户。
自由空间图中存储的值不是精确的。它们被舍入到 BLCKSZ
的 1/256 精度(默认情况下为32字节),并且在插入和更新元组时不会完全更新。
对于索引,跟踪的是完全未使用的页面,而不是页面内的自由空间。因此,这些值没有实际意义,只是用于判断页面是否为空或已满。
该接口在8.4版本中进行了更改,以反映在同一版本中引入的新FSM实现。
lightdb@postgres=# SELECT * FROM pg_freespace('foo'); blkno | avail -------+------- 0 | 0 1 | 0 2 | 0 3 | 32 4 | 704 5 | 704 6 | 704 7 | 1216 8 | 704 9 | 704 10 | 704 11 | 704 12 | 704 13 | 704 14 | 704 15 | 704 16 | 704 17 | 704 18 | 704 19 | 3648 (20 rows) lightdb@postgres=# SELECT * FROM pg_freespace('foo', 7); pg_freespace -------------- 1216 (1 row)