Chaque table et index, en dehors des index hash, a une carte des espaces libres (appelée aussi FSM, acronyme de Free Space Map) pour conserver le trace des emplacements disponibles dans la relation. Elle est stockée dans un fichier séparé du fichier des données. Le nom de fichier est le numéro relfilenode suivi du suffixe _fsm. Par exemple, si le relfilenode d'une relation est 12345, la FSM est stockée dans un fichier appelé 12345_fsm, dans même répertoire que celui utilisé pour le fichier des données.
La carte des espaces libres est organisée comme un arbre de pages FSM. Les pages FSM de niveau bas stockent l'espace libre disponible dans chaque page de la relation. Les niveaux suppérieurs agrégent l'information des niveaux bas.
À l'intérieur de chaque page FSM se trouve un arbre binaire stocké dans un tableau avec un octet par nœud. Chaque nœud final représente une page de la relation, ou une page FSM de niveau bas. Dans chaque nœud non final, la valeur la plus haute des valeurs enfants est stockée. Du coup, la valeur maximum de tous les nœuds se trouve à la racine.
Voir src/backend/storage/freespace/README pour plus de détails sur la façon dont la FSM est structurée, et comment elle est mise à jour et recherchée. Le module pg_freespacemap peut être utilisé pour examiner l'information stockée dans les cartes d'espace libre.