pg_filenode.map

一个将内部关系(主要是 系统目录表)映射到其 OID 的文件。

pg_filenode.map 是一个特殊文件,它将所谓的“映射关系”(即其 filenode 未存储在 pg_class 中的关系)映射到它们的 OID

pg_filenode.mapPostgreSQL 9.0 中添加。

每个数据库有一个 pg_filenode.map 文件,整个集群也有一份。

目前每个 pg_filenode.map 文件大小固定为 512 字节(旨在占用一个标准大小的磁盘扇区)以最大限度地降低更新失败的风险;相应的结构体设计为正好占用 512 字节,最多可包含 62 个条目(MAX_MAPPINGS),每个条目 8 字节。

typedef struct RelMapping
{
	Oid			mapoid;			/* OID of a catalog */
	Oid			mapfilenode;	/* its filenode number */
} RelMapping;

加上文件元数据,总大小达到 512 字节。

typedef struct RelMapFile
{
	int32		magic;			/* always RELMAPPER_FILEMAGIC */
	int32		num_mappings;	/* number of valid RelMapping entries */
	RelMapping	mappings[MAX_MAPPINGS];
	pg_crc32c	crc;			/* CRC of all above */
	int32		pad;			/* to make the struct size be 512 exactly */
} RelMapFile;

更多详细信息,请参见 src/backend/utils/cache/relmapper.c

变更历史

示例

数据目录中 pg_filenode.map 文件的分布

    postgres:data$ find . -name pg_filenode.map
    ./global/pg_filenode.map
    ./base/1/pg_filenode.map
    ./base/11787/pg_filenode.map
    ./base/11788/pg_filenode.map
    ./base/16385/pg_filenode.map

分类

PostgreSQL内部, 存储

反馈

请在此处提交关于“pg_filenode.map”的任何评论、建议或更正