<entry><filename>pg_serial</filename></entry>
<entry>Subdirectory containing information about committed serializable transactions</entry>
</row>
<row>
<entry><filename>pg_snapshots</filename></entry>
<entry>Subdirectory containing exported snapshots</entry>
</row>
<row>
<entry><filename>pg_stat</filename></entry>
<entry>Subdirectory containing permanent files for the statistics
subsystem</entry>
</row>
<row>
<entry><filename>pg_stat_tmp</filename></entry>
<entry>Subdirectory containing temporary files for the statistics
subsystem</entry>
</row>
<row>
<entry><filename>pg_subtrans</filename></entry>
<entry>Subdirectory containing subtransaction status data</entry>
</row>
<row>
<entry><filename>pg_tblspc</filename></entry>
<entry>Subdirectory containing symbolic links to tablespaces</entry>
</row>
<row>
<entry><filename>pg_twophase</filename></entry>
<entry>Subdirectory containing state files for prepared transactions</entry>
</row>
<row>
<entry><filename>pg_wal</filename></entry>
<entry>Subdirectory containing WAL (Write Ahead Log) files</entry>
</row>
<row>
<entry><filename>pg_xact</filename></entry>
<entry>Subdirectory containing transaction commit status data</entry>
</row>
<row>
<entry><filename>postgresql.auto.conf</filename></entry>
<entry>A file used for storing configuration parameters that are set by
<command>ALTER SYSTEM</command></entry>
</row>
<row>
<entry><filename>postmaster.opts</filename></entry>
<entry>A file recording the command-line options the server was
last started with</entry>
</row>
<row>
<entry><filename>postmaster.pid</filename></entry>
<entry>A lock file recording the current postmaster process ID (PID),
cluster data directory path,
postmaster start timestamp,
port number,
Unix-domain socket directory path (could be empty),
first valid listen_address (IP address or <literal>*</literal>, or empty if
not listening on TCP),
and shared memory segment ID
(this file is not present after server shutdown)</entry>
</row>
</tbody>
</tgroup>
</table>
<para>
For each database in the cluster there is a subdirectory within
<varname>PGDATA</varname><filename>/base</filename>, named after the database's OID in
<structname>pg_database</structname>. This subdirectory is the default location
for the database's files; in particular, its system catalogs are stored
there.
</para>
<para>
Note that the following sections describe the behavior of the builtin
<literal>heap</literal> <link linkend="tableam">table access method</link>,
and the builtin <link linkend="indexam">index access methods</link>. Due
to the extensible nature of <productname>PostgreSQL</productname>, other
access methods might work differently.
</para>
<para>
Each table and index is stored in a separate file. For ordinary relations,
these files are named after the table or index's <firstterm>filenode</firstterm> number,
which can be found in <structname>pg_class</structname>.<structfield>relfilenode</structfield>. But
for temporary relations, the file name is of the form
<literal>t<replaceable>BBB</replaceable>_<replaceable>FFF</replaceable></literal>, where <replaceable>BBB</replaceable>
is the process number of the backend which created the file, and <replaceable>FFF</replaceable>
is the filenode number. In either case, in addition to the main file (a/k/a
main fork), each table and index has a <firstterm>free space map</firstterm> (see <xref
linkend="storage-fsm"/>), which stores information about free space available in
the relation. The free space map is stored in a file named with the filenode
number plus the suffix <literal>_fsm</literal>. Tables also have a
<firstterm>visibility map</firstterm>, stored in a fork with the suffix <literal>_vm</literal>,
to track which pages are known to have no dead tuples. The visibility map is
described further in <xref linkend="storage-vm"/>. Unlogged tables and indexes
have a third fork, known as the initialization fork, which is stored in a fork