02.-Fundamentos arquitectónicos

Antes de proceder, debemos entender la arquitectura básica del sistema PostgreSQL. Entender cómo interactúan entre sí las partes de PostgreSQL hará este capítulo algo más claro.

En la jerga de bases de datos, PostgreSQL utiliza un modelo cliente/servidor. Una sesión de PostgreSQL consiste en los siguientes procesos de cooperación (programas):

  • Un proceso de servidor, que administra los archivos de la base de datos, acepta conexiones a la base de datos de aplicaciones de clientes y realiza acciones de base de datos en nombre de los clientes. El programa de servidores de bases de datos se llama postgres.

  • La aplicación cliente (frontend) del usuario que quiere realizar operaciones de base de datos. Las aplicaciones de cliente pueden ser de muy diversa naturaleza: un cliente podría ser una herramienta orientada al texto, una aplicación gráfica, un servidor web que acceda a la base de datos para mostrar páginas web, o una herramienta especializada de mantenimiento de bases de datos. Algunas aplicaciones de clientes se suministran con la distribución PostgreSQL; la mayoría son desarrolladas por los usuarios.

Como es típico de las aplicaciones cliente/servidor, el cliente y el servidor pueden estar en diferentes hosts. En ese caso se comunican a través de una conexión de red TCP/IP. Debemos tener esto en cuenta, porque los archivos a los que se puede acceder en una máquina cliente pueden no ser accesibles (o sólo podrían ser accesibles usando un nombre de archivo diferente) en la máquina del servidor de bases de datos.

El servidor PostgreSQL puede manejar múltiples conexiones simultáneas de los clientes. Para lograrlo comienza un nuevo proceso ("forks") para cada conexión. A partir de ese momento, el cliente y el nuevo proceso de servidor se comunican sin la intervención del proceso original postgres. Por lo tanto, el proceso de servidor supervisor siempre está funcionando, esperando conexiones de clientes, mientras que los procesos de servidor asociados y el cliente van y vienen. (Todo esto es, por supuesto, invisible para el usuario. Sólo lo mencionamos aquí para estar al tanto.)