65.3. Mapas de espacios libres

Cada relación entre una estructura y un índice, a excepción de los índices hash, tiene un mapa de espacios libres para mantener el espacio de rastreo disponible entre ellos. Que está almacenado a la par de los principales datos relacionados, en un componente separado, renombrado después el número de archivo más el sufijo a_fsm. Por ejemplo, si la relación del archivo es 12345, la FSM es almacenada en un archivo 12345_fsm, en el mismo directorio con relación al archivo principal.
El mapa de espacios libres es organizado como un árbol de páginas FSM. Las páginas del nivel bajo de la FSM almacenan los espacios disponibles, en cada nivel de la estructura de datos, usando un byte para representar cada una de las páginas. Los niveles superiores obtienen información de los niveles bajos.
Entre cada una de las paginas hay un árbol binario, almacenada en un arreglo con un byte por nudo. Cada hoja de un nudo representa una página de estructura de datos, o una página del nivel bajo de la FSM. En cada nudo (non-leaf), el valor mayor de sus hijos es almacenado. El valor máximo de las hojas es almacenado en la raíz.

F.26. pg_freespacemap
El módulo pg_freespacemap proporciona un medio para examinar el mapa de espacios libres (FSM). Se proporciona una función llamada pg_freespace, o dos funciones sobrecargadas, para ser precisos. Las funciones muestran el valor registrado en el mapa de espacios libres para una página determinada o para todas las páginas de la relación.
Por defecto, el acceso público es revocado de las funciones, en caso de que haya problemas de seguridad.
F.26.1. Funciones
pg_freespace(rel regclass IN, blkno bigint IN) returns int2
Devuelve la cantidad de espacio libre en la página de la relación, especificado por blkno, según la 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. Devuelve un conjunto de (blkno bigint, INT2 vano) tuplas, una tupla por cada página en la relación.
Los valores almacenados en el mapa de espacios libres no son exactos. Están redondeados a una precisión de 1 / 256th de BLCKSZ (32 bytes con BLCKSZ por defecto), y no están totalmente al día conforme las tuplas son insertadas o actualizadas.
Para los índices, se rastrea las páginas no utilizadas, en lugar de espacios libres dentro de las páginas. Por lo tanto, los valores no son significativos, sólo si una página está llena o vacía.