pg_freespacemap 模块提供检查 空闲空间映射(FSM)的手段。确切地说,它提供一个名为 pg_freespace 的函数,即两个重载函数。这些函数显示空闲空间映射中针对给定页面或关系中所有页面记录的值。
默认情况下,使用权限仅限于超级用户以及拥有 pg_stat_scan_tables 角色特权的角色。可以通过 GRANT 将访问权限授予其他用户。
空闲空间映射中存储的值并不精确。它们被舍入到 BLCKSZ 的 1/256 的精度(默认 BLCKSZ 下为 32 字节),并且在元组被插入和更新时也不会保持完全实时。
对于索引,被跟踪的是完全未使用的页面,页面内的空闲空间不在跟踪范围内。因此这些值没有实际意义,只有页面是被占用还是为空的区别。
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)
postgres=# SELECT * FROM pg_freespace('foo', 7);
pg_freespace
--------------
1216
(1 row)
原始版本由 Mark Kirkwood <markir@paradise.net.nz> 编写。8.4 版本中由 Heikki Linnakangas <heikki@enterprisedb.com> 为新的 FSM 实现进行了重写。