50.2. How Connections Are Established
PostgreSQL is implemented using a simple“process per user” client/server model. In this model there is oneclient process connected to exactly oneserver process. As we do not know ahead of time how many connections will be made, we have to use amaster process that spawns a new server process every time a connection is requested. This master process is calledpostgres
and listens at a specified TCP/IP port for incoming connections. Whenever a request for a connection is detected thepostgres
process spawns a new server process. The server tasks communicate with each other usingsemaphores andshared memory to ensure data integrity throughout concurrent data access.
The client process can be any program that understands thePostgreSQL protocol described inChapter 52. Many clients are based on the C-language librarylibpq, but several independent implementations of the protocol exist, such as the JavaJDBC driver.
Once a connection is established the client process can send a query to thebackend (server). The query is transmitted using plain text, i.e., there is no parsing done in thefrontend (client). The server parses the query, creates anexecution plan, executes the plan and returns the retrieved rows to the client by transmitting them over the established connection.