PostgreSQL est écrit suivant un simple modèle
client/serveur « processus par utilisateur ». Dans ce
modèle, il existe un processus client connecté à un
seul processus serveur. Comme le nombre de
connexions établies n'est pas connu à l'avance, il est nécessaire
d'utiliser un processus maître qui lance un
processus serveur à chaque fois qu'une connexion est demandée. Ce
processus maître s'appelle postgres
et écoute les
connexions entrantes sur le port TCP/IP indiqué.
À chaque fois qu'une demande de connexion est
détectée, le processus postgres
lance un nouveau
processus serveur. Les tâches du serveur communiquent entre elles en
utilisant des sémaphores et de la mémoire
partagée pour s'assurer de l'intégrité des données lors d'accès
simultanés aux données.
Le processus client est constitué de tout programme comprenant le protocole PostgreSQL décrit dans le Chapitre 52. De nombreux clients s'appuient sur la bibliothèque C libpq, mais il existe différentes implantations indépendantes du protocole, tel que le pilote Java JDBC.
Une fois la connexion établie, le processus client peut envoyer une requête au serveur (backend). La requête est transmise en texte simple, c'est-à-dire qu'aucune analyse n'a besoin d'être réalisée au niveau de l'interface (client). Le serveur analyse la requête, crée un plan d'exécution, exécute le plan et renvoie les lignes trouvées au client par la connexion établie.