Esta seccion describe el formato detallado de cada mensaje. Cana uno puede ser enviado por un frontend (F), por un backend (B) o por ambos (F y B).
Identifica el mensaje como una fila de datos ASCII . (Un mensaje previo RowDescription define el número de campos en la fila y sus tipos de datos).
Un mapa de bits con un bit para cada campo en la fila. El primer campo corresponde al bit 7 (MSB) del primer byte, el segundo campo corresponde al bit 6 del primer byte, el octavo campo corresponde al bit 0 (LSB) del primer byte, el noveno campo corresponde al bit 7 del segundo byte, y así sucesivamente. Cada bit está activo si el valor del campo correspondiente no es NULL. Si el número de campos no es un múltiplo de 8, el resto del último byte en el mapa de bits no es utilizado.
Por lo tanto, para cada campo con un valor no NULL, tenemos lo siguiente:
Especifica el tamaño del valor del campo, incluyendo este tamaño.
Especifica el valor del campo mismo en caracteres ASCII. n es el anterior tamaño menos 4. No hay '\0' al final del campo de datos, el frontend debe añadirlo si quiere uno.
Identifica el mensaje como una petición de autentificación.
Especifica que la autentificación tuvo éxito.
Identifica el mensaje como una petición de autentificación.
Especifica que se requiere autentificación Kerberos V4.
Identifica el mensaje como una petición de autentificación.
Especifica que se requiere autentificación Kerberos V5.
Identifica el mensaje como una petición de autentificación.
Especifica que se requiere una contraseña no encriptada.
Identifica el mensaje como una petición de autentificación.
Especifica que se requiere una contraseña encriptada.
El salto a utilizar al encriptar la contraseña.
Identifica el mensaje como una clave de cancelación. El frontend debe guardar estos valore se desea poder enviar mensajes CancelRequest posteriormente.
El ID de proceso del backend.
La clave secreta de este backend.
Identifica el mensaje como una fila de datos binarios. (Un mensaje RowDescription previo define el número de campos en la fial y sus tipos de datos)
Un mapa de bits con un bit para cada campo en la fila. El primer campo corresponde al bit 7 (MSB) del primer byte, el segundo campo corresponde al bit 6 del primer byte, el octavo campo corresponde al bit 0 (LSB) del primer byte, el noveno campo corresponde al bit 7 del segundo byte, y así sucesivamente. Cada bit está activo si el valor del campo correspondiente no es NULL. Si el número de campos no es un múltiplo de 8, el resto del último byte en el mapa de bits no es utilizado.
Para cada campo con un valor distinto de NULL, tenemos lo siguiente:
Especifica el tamaño del valor del campo, excluyendo este tamaño. **************************************************************************** *************************** Comprobar esto, por que aquí dice _excluyendo_ y antes (línea 756) dice incluyendo??????????????***************** ****************************************************************************
Especifica el valor del campo mismo en formato binario. n es el tamaño previo.
El tamaño del paquete en bytes.
El código de cancelación de petición. El valor es elegido para que contenga "1234" el los 16 bits más significativos, y "5678" en los 16 bits menos significativos. Para evitar confisión, este código no debe ser el mismo que ningún número de versión del protocolo.
El ID de proceso del backend objetivo.
La clave secreta para el backend objectivo.
Identifica este mensaje como una petición completada.
El comando. Normalmente (pero no siempre) una palabra simple que identifica que comando SQL se completó.
Es un flujo de filas donde cada una está terminada por un Byte1('\n'). Se completa con una secuencia Byte1('\\'), Byte1('.'), Byte1('\n').
Identifica el mensaje como una respuesta Start Copy In. El frontend debe enviar un mensaje CopyDataRows.
Identifica el mensaje como una respuesta Start Copy Out. Este mensaje será seguido por un mensaje CopyDataRows.
Identifica el mensaje como un cursor.
El nombre del cursor. Será "blanco" si el cursor es implícito.
Identifica este mensaje como una respuesta a una sentencia vacía.
Sin utilizar.
El tamaño del paquete en bytes.
La contraseña encriptada (mediante crypt()).
Identifica el mensaje como un error.
El mensaje de error mismo.
Identifica el mensaje como una llamada a función.
Sin utilizar.
Especifica el ID de objeto de la función a llamar.
Especifica el número de argumentos que se suministran a la función.
Para cada argumento, se tiene lo siguiente:
Especifica el tamaño del valor del argumento, excluyendo este tamaño.
Especifica el valor del campo mismo en formato binario. n es el tamaño anterior.
Identifica el mensaje como un resultado de llamada a función.
Especifica que se devolvió un resultado no vacío.
Especifica el tamaño del valor del resultado, excluyendo este tamaño.
Especifia el valor del resultado en formato binario. n Es el tamaño anterior.
Sin utilizar. (Hablando propiamente, FunctionResultResponse y FunctionVoidResponse son lo mismo pero con algunas partes opcionales en el mensaje).
Identifica el mensaje como un resultado de llamada a función.
Especifica que se devolvió un resultado vacío.
Identifica el mensaje como una advertencia.
El mensaje de advertencia mismo.
Identifica el mansaje como una repuesta de notificación.
El ID de proceso del proceso backend.
El nombre de la condición en la que se lanzó la notificación.
Identifica el mensaje como una petición.
La petición misma.
Identifica el tipo de mensaje. ReadyForQuery es enviado cuando el backend está listo para un nuevo ciclo de petición.
Identifica el mensaje como una descripción de fila.
Especifica el número de campos en una fila (puede ser cero).
Para cada campo tenemos lo siguiente:
Especifica el nombre del campo.
Especifica el ID de objeto del tipo de campo.
Especifica el tamaño del tipo.
Especifica el modificador del tipo.
El tamaño del paquete en bytes.
El número de versión del protocolo. Los 16 bits más significativos son el numero de versión mayor. Los 16 bits menos significativos son el número de versión menor.
El nombre de la base de datos, por defecto el nombre del usuario si no se especifica.
El nombre del usuario.
Cualquier linea de argumentos para pasar al backend por el postmaster.
Sin utilizar.
La tty opcional que el backen debería utilizar para mensajes de depuración.
Identifica el mensaje como una terminación.
El tamaño del paquete en bytes.
La contraseña sin encriptar.