我一直在玩postgresql一段时间了,这个引起了我的注意。什么是"映射关系"在postgresql中。根据文件,
当磁盘文件的名称为零时,它被称为"映射" 磁盘文件名由低级状态确定的关系。
它是一个简单的关系,没有固定的OID来引用它。它为什么创建?它的意义是什么?或者它与临时表类似? 有人会对此有所了解吗?
答案 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
新表名在......