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 50, Protocole client/serveur. 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.