krithikaGopalakrishnan
krithikaGopalakrishnan

Reputation: 1335

Mapped relation in postgresql

I have been playing with postgresql for a while now and this one caught my eye. What is a "mapped relation" in postgresql. According to the documentation,

When the name of on-disk file is zero, it is called a "mapped" relation whose disk file name is determined by low - level state.

Is it a simple relation that doesnt have a fixed OID to reference it with. Why is it created? What is its significance?Or is it similar to a temp table? can some one thow light on this?

Upvotes: 2

Views: 989

Answers (1)

Vao Tsun
Vao Tsun

Reputation: 51599

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

Also, for certain system catalogs including pg_class itself, pg_class.relfilenode contains zero. The actual filenode number of these catalogs is stored in a lower-level data structure, and can be obtained using the pg_relation_filenode() function.

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)

now a little barbarian (yet user friendly) way to make sure it is the file:

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)

so we check the readable strings:

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

New table name is in...

Upvotes: 1

Related Questions