PostgreSQL implémente un modèle client/serveur avec « un processus par utilisateur ». Dans ce modèle, chaque processus client se connecte à exactement un processus moteur. Comme il n'est pas possible de savoir à l'avance combien de connexions seront créées, il est nécessaire d'utiliser un « processus superviseur » qui génère un nouveau processus moteur à chaque fois qu'une connexion est demandée. Ce processus superviseur est appelé postmaster et écoute sur un port TCP/IP spécifique les connexions entrantes. Dès qu'il détecte une demande de connexion, il génère un nouveau processus moteur. Ces processus moteur communiquent entre eux et avec d'autres processus de l'instance en utilisant des sémaphores et la mémoire partagée pour s'assurer de l'intégrité des données tout au long des accès concurrents aux données.
Le processus client est constitué de tout programme comprenant le protocole PostgreSQL décrit dans le Chapitre 55. 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 que la connexion est établie, le processus client envoie une requête au processus moteur auquel il est connecté. La requête est transmise en plein texte, c'est-à-dire qu'elle n'est pas analysée par le client. Le moteur effectue l'analyse de la requête, crée un plan d'éxécution, exécute le plan et retourne les enregistrements récupérés au client en les transmettant par la connexion établie.