Before we begin, you should understand the basic
PostgreSQL system architecture. Understanding how the
parts of PostgreSQL interact will make the next chapter
somewhat clearer.
In database jargon, PostgreSQL uses a simple "process
per-user" client/server model. A PostgreSQL session
consists of the following cooperating Unix processes (programs):
A supervisory daemon process (the postmaster),
the user's frontend application (e.g., the psql program), and
one or more backend database servers (the postgres process itself).
A single postmaster manages a given collection of
databases on a single host. Such a collection of
databases is called a cluster (of databases). A frontend
application that wishes to access a given database
within a cluster makes calls to an interface library (e.g., libpq)
that is linked into the application.
The library sends user requests over the network to the
postmaster
(Figure 7-1(a)),
which in turn starts a new backend server process
(Figure 7-1(b))
and connects the frontend process to the new server
(
Figure 7-1(c)).
From that point on, the frontend process and the backend
server communicate without intervention by the
postmaster. Hence, the
postmaster is always running, waiting
for connection requests, whereas frontend and backend processes
come and go. The
libpq library allows a single
frontend to make multiple connections to backend processes.
However, each backend process is a single-threaded process that can
only execute one query at a time; so the communication over any one
frontend-to-backend connection is single-threaded.
One implication of this architecture is that the
postmaster and the backend always run on the
same machine (the database server), while the frontend
application may run anywhere. You should keep this
in mind,
because the files that can be accessed on a client
machine may not be accessible (or may only be accessed
using a different path name) on the database server
machine.
You should also be aware that the postmaster and
postgres servers run with the user ID of the PostgreSQL
"superuser".
Note that the PostgreSQL superuser does not
have to be any particular user (e.g., a user named
postgres), although many systems are installed that way.
Furthermore, the PostgreSQL superuser should
definitely not be the Unix superuser, root!
It is safest if the PostgreSQL superuser is an
ordinary, unprivileged user so far as the surrounding Unix system is
concerned.
In any case, all files relating to a database should belong to
this Postgres superuser.