PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.2 » Internes » Protocole Frontend/Backend

Chapitre 55. Protocole Frontend/Backend

PostgreSQL utilise un protocole de messages pour la communication entre le frontend et le backend (clients et serveurs). Le protocole est supporté sur TCP/IP et aussi sur les sockets de domaine Unix. Le nombre de port 5432 a été enregistré avec l'IANA comme numéro de port TCP attribué pour les serveurs utilisant ce protocole, mais, en pratique, tout numéro de port non privilégié peut être utilisé.

Ce document décrit la version 3.0 de ce protocole, implémenté dans PostgreSQL 7.4 et ses versions ultérieures. Pour la description des versions précédentes du protocole, voir les versions précédentes de la documentation PostgreSQL. Un serveur peut accepter plusieurs versions du protocole. Le message startup-request initial indique au serveur la version du protocole que le client essaie d'utiliser. Si la version majeure demandée par le client n'est pas comprise par le serveur, la connexion sera rejetée (par exemple, cela surviendrait si le client demandait la version 4.0 du protocole, qui n'existe pas au moment de l'écriture de ce chapitre). Si la version mineure demandée par le client n'est pas acceptée par le serveur (par exemple si le client réclame la version 3.1 mais que le serveur n'accepte que la version 3.0), le serveur peut soit rejeter la connexion soit répondre avec un message NegotiateProtocolVersion contenant la version mineure la plus haute qu'il accepte pour ce protocole. Le client peut ensuite choisir soit de tenter une nouvelle connexion avec la version indiquée du protocole soit annuler la connexion.

Pour servir plusieurs clients avec efficacité, le serveur lance un nouveau processus « backend » pour chaque backend. Dans l'implémentation actuelle, un nouveau processus fils est créé immédiatement après la détection d'une connexion entrante. Cependant, ceci est transparent pour le protocole. Pour le protocole, les termes « backend » et « server » sont interchangeables ; de la même façon, les termes « frontend » et « client » sont interchangeables.