PostgreSQL: Logical and Physical structure, Layout and Tablespaces
Published: 2023-04-27 16:33:15

PostgreSQL is an open-source relational database management system that uses and extends the SQL language. It is known for its stability, extensibility, and support for advanced features like transactions, replication, and concurrency control. In this post, we will explore the logical and physical structure of a PostgreSQL database cluster, the layout of a heap table file, and the use of tablespaces.

## The Logical Structure of a Database Cluster
A database cluster is a collection of databases managed by a PostgreSQL server. Unlike other database management systems, a PostgreSQL server runs on a single host and manages a single database cluster. A database is a collection of database objects, which are data structures used to store or reference data. A (heap) table is a typical example of a database object. Other examples include indexes, sequences, views, and functions. In PostgreSQL, databases themselves are also database objects and are logically separated from each other. All other database objects belong to their respective databases.

## The Physical Structure of a Database Cluster
A PostgreSQL database cluster consists of a set of directories on disk. Each database in the cluster has its own subdirectory within the main cluster directory. Within each database directory, there are multiple files that represent database objects like tables, indexes, and sequences. PostgreSQL also uses a write-ahead log (WAL) to ensure data durability and consistency. The WAL contains a log of all changes made to the database cluster.

## The Layout of a Heap Table File
Within a database directory, a heap table is stored as a collection of pages, each of which is 8 KB in size. The first page in a heap table is the header page, which contains information about the table such as the number of pages and the table's schema. The remaining pages are data pages that store the actual rows of data in the table. Each page is divided into two sections: the page header and the page body. The page header contains metadata about the page, such as the page number and the number of tuples on the page. The page body contains the actual data stored in the table.

## The Use of Tablespaces
Tablespaces provide a way to store database objects in a location other than the default directory. Tablespaces can be used to improve performance or to store data on separate disks for better redundancy. In PostgreSQL, a tablespace is a named directory on disk that is separate from the main cluster directory. When a table or index is created, it can be assigned to a specific tablespace instead of the default directory.

In summary, understanding the logical and physical structure of a PostgreSQL database cluster, the layout of a heap table file, and the use of tablespaces is essential for anyone who wants to work with PostgreSQL. These concepts help you understand how data is stored, how to optimize performance, and how to manage data across different locations on disk. With these basics in place, you can start exploring more advanced features of PostgreSQL, such as transactions, replication, and concurrency control.