pg_filenode.map
是一个特殊文件,用于将所谓的“映射关系”(即其filenode未存储在pg_class中)映射到它们的OID。
pg_filenode.map
是在PostgreSQL 9.0中添加的。
每个数据库都有一个pg_filenode.map
文件,整个集群也有一个文件。
目前每个pg_filenode.map
文件的大小保持为512字节(旨在占用一个标准大小的磁盘扇区),以最大程度地降低更新失败的风险;相应的结构被设计为恰好占用512字节,并且最多可以包含62个8字节的条目(MAX_MAPPINGS
)
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。
更改历史
- PostgreSQL 9.0
- 添加(提交b9b8831a)
示例
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
有用链接
- filenode_map_inspect - 用于检查pg_filenode.map文件内容的扩展
- Dimitri Fontaine编写的PostgreSQL数据恢复 - 提到了恢复损坏的pg_filenode.map的可能性
- 使用pg_filenodemapdata解码pg_filenode.map文件 - 使用pg_hexdump