Re: How are postgreSQL database files structured? - Mailing list pgsql-admin

From Oliver Elphick
Subject Re: How are postgreSQL database files structured?
Date
Msg-id 1038071298.28188.432.camel@linda.lfix.co.uk
Whole thread Raw
In response to How are postgreSQL database files structured?  (Hugh Esco <hesco@greens.org>)
Responses Re: How are postgreSQL database files structured?
List pgsql-admin
On Sat, 2002-11-23 at 04:12, Hugh Esco wrote:

> But when I take a look at /usr/local/pgsql/data/base, I am baffled by its
> contents.  I hear that the directory at: /usr/local/pgsql/data/base/1 is
> the template1 database.  But I do not know where the template0 database
> is.  And I certainly do not understand how testtest gets named 16555, much
> less what the numbered directories and files subordinate to that directory
> have to do with anything real in the world.

The files in $PGDATA/base are named by the oid of the database record in
pg_database, like this:

postgres@linda:~$ cd $PGDATA
postgres@linda:/usr1/postgres/data$ ls -l base
total 33
drwx------    2 postgres postgres     2048 Nov 23 04:01 1
drwx------    2 postgres postgres     2048 Nov 23 04:00 1063179
drwx------    2 postgres postgres     2048 Nov 23 04:00 1063190
drwx------    2 postgres postgres     3072 Nov 23 04:00 1063237
drwx------    2 postgres postgres     3072 Nov 23 04:00 1063515
drwx------    2 postgres postgres     3072 Nov 23 04:01 1064226
drwx------    2 postgres postgres     3072 Nov 23 04:01 1064465
drwx------    2 postgres postgres     2048 Nov 18 22:39 16975
drwx------    2 postgres postgres     2048 Nov 23 04:00 16976
drwx------    2 postgres postgres     3072 Nov 23 04:00 16983
drwx------    3 postgres postgres     6144 Nov 23 04:00 3884888
drwx------    2 postgres postgres     2048 Nov 23 04:01 4989386
postgres@linda:/usr1/postgres/data$ psql template1
Welcome to psql 7.3rc1, the PostgreSQL interactive terminal.
...
template1=# select oid,datname from pg_database order by oid;
   oid   |    datname
---------+----------------
       1 | template1
   16975 | template0
   16976 | NEUROMR
   16983 | accounts
 1063179 | comanagers
 1063190 | genealogy
 1063237 | junk
 1063515 | lfix
 1064226 | sql_ledger
 1064465 | stjohns
 3884888 | bray
 4989386 | space database
(12 rows)

Similarly, inside $PGDATA/base/<dbdir>, relation files are named by
their oids in pg_class:

stjohns=# select oid,relname from pg_class where oid > 1000000 and oid <
2000000 order by oid limit 5;
   oid   |        relname
---------+------------------------
 1064466 | members
 1064470 | pg_toast_1064466
 1064472 | pg_toast_1064466_index
 1064473 | members_pkey
 1064475 | perms
(5 rows)

stjohns=# \! cd $PGDATA/base/1064465 ; ls 10* | head -5
1064466
1064470
1064472
1064473
1064475


pg_class has a column, relfilenode, which almost invariably has the same
value as the oid; I'm not sure whether, should they differ, the file
would be named relfilenode or oid, though I would presume the former.

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "The LORD is nigh unto all them that call upon him, to
      all that call upon him in truth."
                                   Psalms 145:18


pgsql-admin by date:

Previous
From: "Henrique Spencer"
Date:
Subject: Re: Error while compiling (Please, I need help. Nobody answer my question)
Next
From: Tom Lane
Date:
Subject: Re: crash help, pgsql 7.2.1 on RH7.3