El módulo pg_freespacemap proporciona un medio para examinar el
mapa de espacio libre (FSM).
Proporciona una función llamada pg_freespace, o dos
funciones sobrecargadas, para ser precisos. Las funciones muestran el valor registrado en
el mapa de espacio libre para una página determinada, o para todas las páginas en la relación.
Por defecto, el uso está restringido a los superusuarios y a los roles con privilegios del
rol pg_stat_scan_tables. Se puede conceder acceso a otros usuarios
utilizando GRANT.
pg_freespace(rel regclass IN, blkno bigint IN) returns int2
Devuelve la cantidad de espacio libre en la página de la relación, especificada
por blkno, según el FSM.
pg_freespace(rel regclass IN, blkno OUT bigint, avail OUT int2)
Muestra la cantidad de espacio libre en cada página de la relación,
según el FSM. Se devuelve un conjunto de tuplas
(blkno bigint, avail int2), una tupla por cada página de la relación.
Los valores almacenados en el mapa de espacio libre no son exactos. Se redondean
a una precisión de 1/256 de BLCKSZ (32 bytes con la configuración predeterminada de BLCKSZ), y
no se mantienen completamente actualizados a medida que se insertan y actualizan las tuplas.
Para los índices, lo que se rastrea son las páginas completamente no utilizadas, en lugar del espacio libre dentro de las páginas. Por lo tanto, los valores no son significativos, solo indican si una página está en uso o vacía.
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)
Versión original por Mark Kirkwood <[email protected]>.
Reescrito en la versión 8.4 para adaptarse a la nueva implementación de FSM
por Heikki Linnakangas <[email protected]>