Initialization parameters
You create a new database cluster by using the initdb
program. An initdb
script creates the data files, system tables, and template databases (template0 and template1) that define the cluster.
The template database represents a stock database. It contains definitions for system tables, standard views, functions, and data types. pgdata
acts as an argument to the initdb
script that specifies the location of the database cluster.
All the database objects in PostgreSQL are internally managed by respective OIDs. Tables and indexes are also managed by individual OIDs. The relationships between database objects and their respective OIDs are stored in appropriate system catalog tables, depending on the type of object. For example, OIDs of databases and heap tables are stored in pg_database
and `pg_class, respectively. You can determine the OIDs by issuing queries on the PostgreSQL client.
Every database has its own individual tables and index files that are restricted to 1GB. Each table has two associated files, suffixed respectively with _fsm
and _vm
. They are referred to as the free space map and the visibility map. These files store the information about free space capacity and have visibility on each page in the table file. Indexes only have individual free space maps and don't have visibility maps.
The pg_xlog/pg_wal
directory contains the write-ahead logs. Write-ahead logs are used to improve database reliability and performance. Whenever you update a row in a table, PostgreSQL first writes the change to the write-ahead log, and later writes the modifications to the actual data pages to a disk. The pg_xlog
directory usually contains several files, but initdb creates only the first one. Extra files are added as needed. Each xlog file is 16MB long.