Escrito por Phil Thompson. Actualizaciones del protocolo por Tom Lane. |
Postgres utiliza un protocolo basado en mensajes para la comunicaci�n entre frontend y backends. El protocolo est� implementado sobre TCP/IP y tambi�n sobre Unix sockets. Postgres v6.3 introduci� n�meros de versi�n en el protocolo. Esto fue hecho de tal forma que a�n permite conexiones desde versiones anteriores de los frontends, pero este documento no cubre el protocolo utilizado por esas versiones.
Este documento describe la versi�n 2.0 del protocolo, implementada en Postgres v6.4 y posteriores.
Las caracter�sticas de alto nivel sobre este protocolo (por ejemplo, como libpq pasa ciertas variables de entorno despues de que la comunicaci�n es establecida), son tratadas en otros lugares.
Los tres principales componentes son el frontend (ejecutandose en el clicente) y el postmaster y backend (ejecutandose en el servidor). El postmaster y backend juegan diferentes roles pero pueden ser implementados por el mismo ejecutable.
Un frontend env�a un paquete de inicio al postmaster. Este incluye los nombres del usuario y base de datos a la que el usuario quiere conectarse. El postmaster entonces utiliza esto, y la informaci�n en el fichero pg_hba.conf(5) para determinar que informaci�n adicional de autentificaci�n necesita del frontend (si existe) y responde al frontend en concordancia.
El frontend env�a entonces cualquier informaci�n de autentificaci�n requerida. Una vez que el postmaster valida esta informaci�n responde al frontend que est� autentificado y entrega una conexi�n a un backend. El backend entonces env�a un mensaje indicando arranque correcto (caso normal) o fallo (por ejemplo, un nombre de base de datos inv�lido).
Las subsiguientes comunicaciones son paquetes de consulta y resultados intercambiados entre el frontend y backend. El postmaster no interviene ya en la comunicaci�n ordinaria de cosultas/resultados. Sin embargo el postmaster se involucra cuando el frontend desea cancelar una consulta que se est� efectuando en su backend. M�s detalles sobre esto aparecen m�s abajo.
Cuando el frontend desea desconectar env�a un paquete apropiado y cierra la conexi�n sin esperar una respuesta del backend.
Los paquetes son enviados como un flujo de datos. El primer byte determina que se deber�a esperar en el resto del paquete. La excepci�n son los paquetes enviados desde un frontend al postmaster, los cuales incluyen la longitud del paquete y el resto de �l. Esta diferencia es hist�rica.