1
我一直在玩postgresql一段时间,这引起了我的注意。什么是postgresql中的“映射关系”。根据该文件,postgresql中的映射关系
当磁盘上的文件的名称是零,它被称为“映射” 关系,其磁盘文件名是由低确定 - 水平状态。
这是一个简单的关系,没有一个固定的OID引用它。它为什么被创建?它有什么意义?或者它与临时表类似? 有人能告诉我这个吗?
我一直在玩postgresql一段时间,这引起了我的注意。什么是postgresql中的“映射关系”。根据该文件,postgresql中的映射关系
当磁盘上的文件的名称是零,它被称为“映射” 关系,其磁盘文件名是由低确定 - 水平状态。
这是一个简单的关系,没有一个固定的OID引用它。它为什么被创建?它有什么意义?或者它与临时表类似? 有人能告诉我这个吗?
https://www.postgresql.org/docs/current/static/storage-file-layout.html
此外,对于包括的pg_class本身某些系统目录, pg_class.relfilenode包含零。这些目录的实际文件节点号 存储在较低级别的数据结构中,并且可以使用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
新表名称在...
因此,只有映射表映射或用户表也映射? – user4658312
我会这么说。尝试'选择从pg_class其中relfilenode = 0'的relname,看看它的情况是否在你的分区 –
是啊,那个查询的结果在我所有的数据库中只给出了目录表。谢谢 :) – user4658312