作者李传成PostgreSQL中的表会有一个RelFileNode值指定这个表在磁盘上的文件名。事实上,这个文件存储了我们向表t2插入的数据。在我们对一张表执行truncate,vacuum full等操作后,会重写这个表的数据,会引发这个表relfilenode值的变更。如下测试可以看出truncate之后,t2表的relfilenode从16808变为了16811.Nail表的Relfilenode上述查询可以看出,从pg_class系统表中查询出的这些表的relfilenode为0。其中pg_type、pg_proc、pg_attribute、pg_class是非共享表,在内核中称他们为Nail表。pg_class表中relfilenode字段的意义是为了告诉程序,某一张表在磁盘上存储的文件名。在PostgreSQL中提供了一组函数接口进行oid和relfilenode的转化。在global目录下的pg_filenode.map文件里存储了shared表的oid和relfilenode的映射关系,12835目录下存储了OID为12835的数据库里nail表的oid和relfilenode的映射关系。

解析PostgreSQL中Oid和Relfilenode的映射问题

解析PostgreSQL中Oid和Relfilenode的映射问题

解析PostgreSQL中Oid和Relfilenode的映射问题

解析PostgreSQL中Oid和Relfilenode的映射问题