51.2. Cómo se establecen las conexiones #

PostgreSQL implementa un modelo cliente/servidor de proceso por usuario. En este modelo, cada proceso de cliente se conecta exactamente a un proceso de backend. Como no sabemos de antemano cuántas conexiones se realizarán, tenemos que utilizar un proceso supervisor que genera un nuevo proceso de backend cada vez que se solicita una conexión. Este proceso supervisor se llama postmaster y escucha en un puerto TCP/IP especificado para conexiones entrantes. Cada vez que detecta una solicitud de conexión, genera un nuevo proceso de backend. Esos procesos de backend se comunican entre sí y con otros procesos de la instancia utilizando semáforos y memoria compartida para garantizar la integridad de los datos durante el acceso concurrente a los mismos.

El proceso de cliente puede ser cualquier programa que entienda el protocolo de PostgreSQL descrito en el Chapter 54. Muchos clientes se basan en la biblioteca en lenguaje C libpq, pero existen varias implementaciones independientes del protocolo, como el controlador Java JDBC.

Una vez que se establece una conexión, el proceso de cliente puede enviar una consulta al proceso de backend al que está conectado. La consulta se transmite mediante texto plano, es decir, no se realiza ningún análisis en el cliente. El proceso de backend analiza la consulta, crea un plan de ejecución (execution plan), ejecutes el plan y devuelve las filas recuperadas al cliente transmitiéndolas a través de la conexión establecida.