F.26. pg_freespacemap

pg_freespacemap模块提供一种检查自由空间映射(FSM)的手段。 它提供一个名为pg_freespace的函数,或精确的说是两个重载函数。 该函数在一个给定的页面或关系中的所有页面的自由空间映射内显示记录的值。

缺省的公共访问在该函数中取消了,只是因为潜藏的安全问题。

F.26.1. 函数

pg_freespace(rel regclass IN, blkno bigint IN) returns int2

返回关系的页面上的自由空间的数量,通过blkno指定,根据FSM。

pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)

在关系的每个页面上显示自由空间的数量,根据FSM。返回一组(blkno bigint, avail int2) 元组,在关系中每个页面一个元组。

存储在自由空间映射中的数据是不精确的。它们圆整到1/256的BLCKSZ(缺省32字节)的精度, 并且它们不保持全部的元组是最新的(插入了和更新了)。

对于索引,跟踪的是完全未使用的页面,而不是页面中的自由空间。因此, 该值是没有意义的,只表示一个页面是否为空。

注意: 接口在版本8.4中改变了,为了反映在相同版本中引进的新的FSM实现。

F.26.2. 示例输出

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)

F.26.3. 作者

Mark Kirkwood 制作的原始版本。 在版本8.4中重写,以适应Heikki Linnakangas 制作的新的FSM实现。