postgresql中的映射关系

时间:2017-09-11 09:14:26

标签: sql postgresql

我一直在玩postgresql一段时间了,这个引起了我的注意。什么是"映射关系"在postgresql中。根据文件,

  

当磁盘文件的名称为零时,它被称为"映射"   磁盘文件名由低级状态确定的关系。

它是一个简单的关系,没有固定的OID来引用它。它为什么创建?它的意义是什么?或者它与临时表类似?         有人会对此有所了解吗?

1 个答案:

答案 0 :(得分:1)

https://www.postgresql.org/docs/current/static/storage-file-layout.html

  

此外,对于某些系统目录,包括pg_class本身,   pg_class.relfilenode包含零。实际的filenode数量   这些目录存储在较低级别的数据结构中,并且可以   使用pg_relation_filenode()函数获得。

t=# select relfilenode from pg_class where relname = 'pg_class';
 relfilenode
-------------
           0
(1 row)

t=# select pg_relation_filenode('pg_class');
 pg_relation_filenode
----------------------
                12712
(1 row)

现在有点野蛮人(但用户友好)的方式来确保它是文件:

t=# create table very_special_name(i int);
CREATE TABLE
t=# CHECKPOINT; --to actually write to disk
CHECKPOINT
t=# select oid from pg_database where datname='t';
   oid
----------
 13805223
(1 row)

所以我们检查可读字符串:

-bash-4.2$ strings /pg/data/base/13805223/12712  | grep very_special
very_special_name

新表名在......