54.7. Formatos de mensajes #

Esta sección describe el formato detallado de cada mensaje. Cada uno está marcado para indicar si puede ser enviado por el frontend (F), el backend (B) o ambos (F & B). Ten en cuenta que aunque cada mensaje incluye un recuento de bytes al principio, la mayoría de los mensajes están definidos de manera que el final del mensaje se pueda encontrar sin hacer referencia al recuento de bytes. Esto se debe a razones históricas, ya que la versión original del protocolo (ahora obsoleta 2) no tenía un campo de longitud explícito. Sin embargo, también ayuda a la comprobación de validez.

AuthenticationOk (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(0)

Especifica que la autenticación fue exitosa.

AuthenticationKerberosV5 (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(2)

Especifica que se requiere la autenticación Kerberos V5.

AuthenticationCleartextPassword (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(3)

Especifica que se requiere una contraseña en texto claro.

AuthenticationMD5Password (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(12)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(5)

Especifica que se requiere una contraseña cifrada con MD5.

Byte4

La sal (salt) a utilizar al cifrar la contraseña.

AuthenticationGSS (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(7)

Especifica que se requiere la autenticación GSSAPI.

AuthenticationGSSContinue (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(8)

Especifica que este mensaje contiene datos GSSAPI o SSPI.

Byten

Datos de autenticación GSSAPI o SSPI.

AuthenticationSSPI (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(9)

Especifica que se requiere la autenticación SSPI.

AuthenticationSASL (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(10)

Especifica que se requiere la autenticación SASL.

El cuerpo del mensaje es una lista de mecanismos de autenticación SASL, en el orden de preferencia del servidor. Se requiere un byte cero como terminador después del último nombre de mecanismo de autenticación. Para cada mecanismo, se presenta lo siguiente:

String

Nombre de un mecanismo de autenticación SASL.

AuthenticationSASLContinue (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(11)

Especifica que este mensaje contiene un desafío SASL.

Byten

Datos SASL, específicos del mecanismo SASL en uso.

AuthenticationSASLFinal (B) #
Byte1('R')

Identifica el mensaje como una solicitud de autenticación.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(12)

Especifica que la autenticación SASL ha finalizado.

Byten

"Datos adicionales" del resultado de SASL, específicos del mecanismo SASL en uso.

BackendKeyData (B) #
Byte1('K')

Identifica el mensaje como datos de la clave de cancelación. El frontend debe guardar estos valores si desea poder emitir mensajes CancelRequest más adelante.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32

El ID de proceso de este backend.

Byten

La clave secreta de este backend. Este campo se extiende hasta el final del mensaje, indicado por el campo de longitud.

La longitud mínima y máxima de la clave es de 4 y 256 bytes, respectivamente. El servidor de PostgreSQL solo envía claves de hasta 32 bytes, pero el tamaño máximo más grande permite que las futuras versiones del servidor, así como los gestores de colas de conexiones (connection poolers) y otros intermediarios (middleware), utilicen claves más largas. Un posible caso de uso es complementar la clave del servidor con información adicional. Por lo tanto, también se recomienda a los intermediarios no utilizar todos los bytes, en caso de que se superpongan múltiples aplicaciones intermediarias, cada una de las cuales podría envolver la clave con datos adicionales.

Antes de la versión 3.2 del protocolo, la clave secreta siempre tenía una longitud de 4 bytes.

Bind (F) #
Byte1('B')

Identifica el mensaje como un comando Bind.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

El nombre del portal de destino (una cadena vacía selecciona el portal sin nombre).

String

El nombre de la sentencia preparada de origen (una cadena vacía selecciona la sentencia preparada sin nombre).

Int16

El número de códigos de formato de parámetros que siguen (denotado como C más abajo). Puede ser cero para indicar que no hay parámetros o que todos los parámetros usan el formato por defecto (texto); o uno, en cuyo caso el código de formato especificado se aplica to todos los parámetros; o puede ser igual al número real de parámetros.

Int16[C]

Los códigos de formato de los parámetros. Actualmente, cada uno debe ser cero (texto) o uno (binario).

Int16

El número de valores de parámetros que siguen (posiblemente cero). Debe coincidir con el número de parámetros requeridos por la consulta.

A continuación, aparece el siguiente par de campos para cada parámetro:

Int32

La longitud del valor del parámetro, en bytes (este recuento no se incluye a sí mismo). Puede ser cero. Como caso especial, -1 indica un valor de parámetro NULL. No siguen bytes de valor en el caso NULL.

Byten

El valor del parámetro, en el formato indicado por el código de formato asociado. n es la longitud anterior.

Después del último parámetro, aparecen los siguientes campos:

Int16

El número de códigos de formato de columna de resultado que siguen (denotado como R más abajo). Puede ser cero para indicar que no hay columnas de resultado o que todas las columnas de resultado deben usar el formato por defecto (texto); o uno, en cuyo caso el código de formato especificado se aplica a todas las columnas de resultado (si las hay); o puede ser igual al número real de columnas de resultado de la consulta.

Int16[R]

Los códigos de formato de la columna de resultado. Actualmente, cada uno debe ser cero (texto) o uno (binario).

BindComplete (B) #
Byte1('2')

Identifica el mensaje como un indicador de Bind finalizado (Bind-complete).

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

CancelRequest (F) #
Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(80877102)

El código de la solicitud de cancelación. El valor se elige para contener 1234 en los 16 bits más significativos y 5678 en los 16 bits menos significativos. (Para evitar confusiones, este código no debe ser el mismo que cualquier número de versión del protocolo).

Int32

El ID de proceso del backend de destino.

Byten

La clave secreta para el backend de destino. Este campo se extiende hasta el final del mensaje, indicado por el campo de longitud. La longitud máxima de la clave es de 256 bytes.

Antes de la versión 3.2 del protocolo, la clave secreta siempre tenía una longitud de 4 bytes.

Close (F) #
Byte1('C')

Identifica el mensaje como un comando Close.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byte1

'S' para cerrar una sentencia preparada; o 'P' para cerrar un portal.

String

El nombre de la sentencia preparada o portal a cerrar (una cadena vacía selecciona la sentencia preparada o el portal sin nombre).

CloseComplete (B) #
Byte1('3')

Identifica el mensaje como un indicador de Close finalizado (Close-complete).

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

CommandComplete (B) #
Byte1('C')

Identifica el mensaje como una respuesta de comando completado.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

La etiqueta del comando. Usualmente es una sola palabra que identifica qué comando SQL se ha completado.

Para un comando INSERT, la etiqueta es INSERT oid rows, donde rows es el número de filas insertadas. oid solía ser el ID de objeto de la fila insertada si rows era 1 y la tabla de destino tenía OIDs, pero las columnas de sistema OID ya no son compatibles; por lo tanto, oid siempre es 0.

Para un comando DELETE, la etiqueta es DELETE rows donde rows es el número de filas eliminadas.

Para un comando UPDATE, la etiqueta es UPDATE rows donde rows es el número de filas actualizadas.

Para un comando MERGE, la etiqueta es MERGE rows donde rows es el número de filas insertadas, actualizadas o eliminadas.

Para un comando SELECT o CREATE TABLE AS, la etiqueta es SELECT rows donde rows es el número de filas recuperadas.

Para un comando MOVE, la etiqueta es MOVE rows donde rows es el número de filas en las que se ha cambiado la posición del cursor.

Para un comando FETCH, la etiqueta es FETCH rows donde rows es el número de filas que se han recuperado del cursor.

Para un comando COPY, la etiqueta es COPY rows donde rows es el número de filas copiadas. (Nota: el recuento de filas solo aparece en PostgreSQL 8.2 y posteriores).

CopyData (F & B) #
Byte1('d')

Identifica el mensaje como datos de COPY.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byten

Datos que forman parte de un flujo de datos COPY. Los mensajes enviados desde el backend siempre corresponderán a filas de datos individuales, pero los mensajes enviados por los frontends pueden dividir el flujo de datos de manera arbitraria.

CopyDone (F & B) #
Byte1('c')

Identifica el mensaje como un indicador de COPY finalizado.

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

CopyFail (F) #
Byte1('f')

Identifica el mensaje como un indicador de error de COPY.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

Un mensaje de error para informar como la causa del fallo.

CopyInResponse (B) #
Byte1('G')

Identifica el mensaje como una respuesta de inicio de Copy In. El frontend ahora debe enviar los datos de copy-in (si no está preparado para hacerlo, debe enviar un mensaje CopyFail).

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int8

0 indica que el formato general de COPY es textual (filas separadas por saltos de línea, columnas separadas por caracteres separadores, etc.). 1 indica que el formato general de copia es binario (similar al formato de DataRow). Consulta COPY para obtener más información.

Int16

El número de columnas en los datos que se van a copiar (denotado como N más abajo).

Int16[N]

Los códigos de formato que se utilizarán para cada columna. Actualmente, cada uno debe ser cero (texto) o uno (binario). Todos deben ser cero si el formato general de copia es textual.

CopyOutResponse (B) #
Byte1('H')

Identifica el mensaje como una respuesta de inicio de Copy Out. Este mensaje será seguido por datos de copy-out.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int8

0 indica que el formato general de COPY es textual (filas separadas por saltos de línea, columnas separadas por caracteres separadores, etc.). 1 indica que el formato general de copia es binario (similar al formato de DataRow). Consulta COPY para obtener más información.

Int16

El número de columnas en los datos que se van a copiar (denotado como N más abajo).

Int16[N]

Los códigos de formato que se utilizarán para cada columna. Actualmente, cada uno debe ser cero (texto) o uno (binario). Todos deben ser cero si el formato general de copia es textual.

CopyBothResponse (B) #
Byte1('W')

Identifica el mensaje como una respuesta de inicio de Copy Both. Este mensaje se utiliza únicamente para la replicación en flujo (Streaming Replication).

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int8

0 indica que el formato general de COPY es textual (filas separadas por saltos de línea, columnas separadas por caracteres separadores, etc.). 1 indica que el formato general de copia es binario (similar al formato de DataRow). Consulta COPY para obtener más información.

Int16

El número de columnas en los datos que se van a copiar (denotado como N más abajo).

Int16[N]

Los códigos de formato que se utilizarán para cada columna. Actualmente, cada uno debe ser cero (texto) o uno (binario). Todos deben ser cero si el formato general de copia es textual.

DataRow (B) #
Byte1('D')

Identifica el mensaje como una fila de datos.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int16

El número de valores de columna que siguen (posiblemente cero).

A continuación, aparece el siguiente par de campos para cada columna:

Int32

La longitud del valor de la columna, en bytes (este recuento no se incluye a sí mismo). Puede ser cero. Como caso especial, -1 indica un valor de columna NULL. No siguen bytes de valor en el caso NULL.

Byten

El valor de la columna, en el formato indicado por el código de formato asociado. n es la longitud anterior.

Describe (F) #
Byte1('D')

Identifica el mensaje como un comando Describe.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byte1

'S' para describir una sentencia preparada; o 'P' para describir un portal.

String

El nombre de la sentencia preparada o portal a describir (una cadena vacía selecciona la sentencia preparada o portal sin nombre).

EmptyQueryResponse (B) #
Byte1('I')

Identifica el mensaje como una respuesta a una cadena de consulta vacía. (Esto sustituye a CommandComplete).

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

ErrorResponse (B) #
Byte1('E')

Identifica el mensaje como un error.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

El cuerpo del mensaje consiste en uno o más campos identificados, seguidos de un byte cero como terminador. Los campos pueden aparecer en cualquier orden. Para cada campo se presenta lo siguiente:

Byte1

Un código que identifica el tipo de campo; si es cero, este es el terminador del mensaje y no le sigue ninguna cadena. Los tipos de campo actualmente definidos se enumeran en Section 54.8. Dado que se podrían agregar más tipos de campos en el futuro, los frontends deben ignorar silenciosamente los campos de tipo no reconocido.

String

El valor del campo.

Execute (F) #
Byte1('E')

Identifica el mensaje como un comando Execute.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

El nombre del portal a ejecutar (una cadena vacía selecciona el portal sin nombre).

Int32

Número máximo de filas a devolver, si el portal contiene una consulta que devuelve filas (se ignora en caso contrario). Cero indica sin límite.

Flush (F) #
Byte1('H')

Identifica el mensaje como un comando Flush.

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

FunctionCall (F) #
Byte1('F')

Identifica el mensaje como una llamada a función.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32

Especifica el OID (object ID) de la función a llamar.

Int16

El número de códigos de formato de argumentos que siguen (denotado como C más abajo). Puede ser cero para indicar que no hay argumentos o que todos los argumentos usan el formato por defecto (texto); o uno, en cuyo caso el código de formato especificado se aplica a todos los argumentos; o puede ser igual al número real de argumentos.

Int16[C]

Los códigos de formato de los argumentos. Actualmente, cada uno debe ser cero (texto) o uno (binario).

Int16

Especifica el número de argumentos que se suministran a la función.

A continuación, aparece el siguiente par de campos para cada argumento:

Int32

La longitud del valor del argumento, en bytes (este recuento no se incluye a sí mismo). Puede ser cero. Como caso especial, -1 indica un valor de argumento NULL. No siguen bytes de valor en el caso NULL.

Byten

El valor del argumento, en el formato indicado por el código de formato asociado. n es la longitud anterior.

Después del último argumento, aparece el siguiente campo:

Int16

El código de formato para el resultado de la función. Actualmente debe ser cero (texto) o uno (binario).

FunctionCallResponse (B) #
Byte1('V')

Identifica el mensaje como el resultado de una llamada a función.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32

La longitud del valor del resultado de la función, en bytes (este recuento no se incluye a sí mismo). Puede ser cero. Como caso especial, -1 indica un resultado de función NULL. No siguen bytes de valor en el caso NULL.

Byten

El valor del resultado de la función, en el formato indicado por el código de formato asociado. n es la longitud anterior.

GSSENCRequest (F) #
Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(80877104)

El código de solicitud de cifrado de GSSAPI. El valor se elige para contener 1234 en los 16 bits más significativos y 5680 en los 16 bits menos significativos. (Para evitar confusiones, este código no debe ser el mismo que cualquier número de versión del protocolo).

GSSResponse (F) #
Byte1('p')

Identifica el mensaje como una respuesta GSSAPI o SSPI. Ten en cuenta que esto también se utiliza para mensajes de respuesta SASL y contraseña. El tipo de mensaje exacto se puede deducir del contexto.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byten

Datos de mensaje específicos de GSSAPI/SSPI.

NegotiateProtocolVersion (B) #
Byte1('v')

Identifica el mensaje como un mensaje de negociación de versión de protocolo.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32

La versión de protocolo menor más nueva admitida por el servidor para la versión de protocolo mayor solicitada por el cliente.

Int32

Número de opciones de protocolo no reconocidas por el servidor.

Luego, para cada opción de protocolo no reconocida por el servidor, se presenta lo siguiente:

String

El nombre de la opción.

NoData (B) #
Byte1('n')

Identifica el mensaje como un indicador de que no hay datos (no-data).

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

NoticeResponse (B) #
Byte1('N')

Identifica el mensaje como un aviso (notice).

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

El cuerpo del mensaje consiste en uno o más campos identificados, seguidos de un byte cero como terminador. Los campos pueden aparecer en cualquier orden. Para cada campo se presenta lo siguiente:

Byte1

Un código que identifica el tipo de campo; si es cero, este es el terminador del mensaje y no le sigue ninguna cadena. Los tipos de campo actualmente definidos se enumeran en Section 54.8. Dado que se podrían agregar más tipos de campos en el futuro, los frontends deben ignorar silenciosamente los campos de tipo no reconocido.

String

El valor del campo.

NotificationResponse (B) #
Byte1('A')

Identifica el mensaje como una respuesta de notificación (notification response).

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32

El ID de proceso del proceso backend que realiza la notificación.

String

El nombre del canal sobre el cual se ha emitido la notificación.

String

La cadena de carga útil (payload) transmitida desde el proceso que realiza la notificación.

ParameterDescription (B) #
Byte1('t')

Identifica el mensaje como una descripción de parámetros.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int16

El número de parámetros utilizados por la sentencia (puede ser cero).

Luego, para cada parámetro, se presenta lo siguiente:

Int32

Especifica el OID (object ID) del tipo de datos del parámetro.

ParameterStatus (B) #
Byte1('S')

Identifica el mensaje como un informe de estado de parámetros en tiempo de ejecución.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

El nombre del parámetro en tiempo de ejecución del cual se informa.

String

El valor actual del parámetro.

Parse (F) #
Byte1('P')

Identifica el mensaje como un comando Parse.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

El nombre de la sentencia preparada de destino (una cadena vacía selecciona la sentencia preparada sin nombre).

String

La cadena de consulta a analizar.

Int16

El número de tipos de datos de parámetros especificados (puede ser cero). Ten en cuenta que esto no es una indicación del número de parámetros que podrían aparecer en la cadena de consulta, sino únicamente el número para el cual el frontend desea preespecificar los tipos.

Luego, para cada parámetro, se presenta lo siguiente:

Int32

Especifica el OID (object ID) del tipo de datos del parámetro. Colocar un cero aquí equivale a dejar el tipo sin especificar.

ParseComplete (B) #
Byte1('1')

Identifica el mensaje como un indicador de Parse finalizado (Parse-complete).

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

PasswordMessage (F) #
Byte1('p')

Identifica el mensaje como una respuesta de contraseña. Ten en cuenta que esto también se utiliza para mensajes de respuesta GSSAPI, SSPI y SASL. El tipo de mensaje exacto se puede deducir del contexto.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

La contraseña (cifrada, si se solicitó).

PortalSuspended (B) #
Byte1('s')

Identifica el mensaje como un indicador de portal suspendido. Ten en cuenta que esto solo aparece si se alcanzó el límite de recuento de filas de un mensaje Execute.

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Query (F) #
Byte1('Q')

Identifica el mensaje como una consulta simple.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

La propia cadena de consulta.

ReadyForQuery (B) #
Byte1('Z')

Identifica el tipo de mensaje. ReadyForQuery se envía cada vez que el backend está listo para un nuevo ciclo de consulta.

Int32(5)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byte1

Indicador de estado de la transacción backend actual. Los valores posibles son 'I' si está inactivo (idle, no en un bloque de transacción); 'T' si está en un bloque de transacción; o 'E' si está en un bloque de transacción fallido (las consultas serán rechazadas hasta que termine el bloque).

RowDescription (B) #
Byte1('T')

Identifica el mensaje como una descripción de fila.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int16

Especifica el número de campos en una fila (puede ser cero).

Luego, para cada campo, se presenta lo siguiente:

String

El nombre del campo.

Int32

Si el campo se puede identificar como una columna de una específica tabla, el OID (object ID) de la tabla; de lo contrario, cero.

Int16

Si el campo se puede identificar como una columna de una específica tabla, el número de atributo de la columna; de lo contrario, cero.

Int32

El OID (object ID) del tipo de datos del campo.

Int16

El tamaño del tipo de datos (ver pg_type.typlen). Ten en cuenta que los valores negativos denotan tipos de ancho variable.

Int32

El modificador de tipo (ver pg_attribute.atttypmod). El significado del modificador es específico de cada tipo.

Int16

El código de formato utilizado para el campo. Actualmente será cero (texto) o uno (binario). En un RowDescription devuelto por la variante de sentencia de Describe, el código de formato aún no se conoce y siempre será cero.

SASLInitialResponse (F) #
Byte1('p')

Identifica el mensaje como una respuesta SASL inicial. Ten en cuenta que esto también se utiliza para mensajes de respuesta GSSAPI, SSPI y contraseña. El tipo de mensaje exacto se deduce del contexto.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

String

Nombre del mecanismo de autenticación SASL que seleccionó el cliente.

Int32

Longitud de la "Respuesta inicial del cliente" específica del mecanismo SASL que sigue, o -1 si no hay Respuesta inicial.

Byten

"Respuesta inicial" específica del mecanismo SASL.

SASLResponse (F) #
Byte1('p')

Identifica el mensaje como una respuesta SASL. Ten en cuenta que esto también se utiliza para mensajes de respuesta GSSAPI, SSPI y contraseña. El tipo de mensaje exacto se puede deducir del contexto.

Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Byten

Datos de mensaje específicos del mecanismo SASL.

SSLRequest (F) #
Int32(8)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(80877103)

El código de la solicitud SSL. El valor se elige para contener 1234 en los 16 bits más significativos y 5679 en los 16 bits menos significativos. (Para evitar confusiones, este código no debe ser el mismo que cualquier número de versión del protocolo).

StartupMessage (F) #
Int32

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Int32(196610)

El número de versión del protocolo. Los 16 bits más significativos son el número de versión mayor (3 para el protocolo aquí descrito). Los 16 bits menos significativos son el número de versión menor (2 para el protocolo aquí descrito).

El número de versión del protocolo es seguido por uno o más pares de cadenas de nombre y valor del parámetro. Se requiere un byte cero como terminador después del último par de nombre/valor. Los parámetros pueden aparecer en cualquier orden. Se requiere user, otros son opcionales. Cada parámetro se especifica como:

String

El nombre del parámetro. Los nombres actualmente reconocidos son:

user

El nombre de usuario de la base de datos para conectarse. Requerido; no hay un valor predeterminado.

database

La base de datos a la que conectarse. El valor predeterminado es el nombre de usuario.

options

Argumentos de línea de comandos para el backend. (Esto está en desuso en favor de la configuración de parámetros individuales en tiempo de ejecución). Los espacios dentro de esta cadena se consideran para separar argumentos, a menos que se escapen con una barra diagonal inversa (\); escribe \\ para representar una barra diagonal inversa literal.

replication

Se utiliza para conectarse en modo de replicación en flujo (streaming replication), donde se puede emitir un pequeño conjunto de comandos de replicación en lugar de sentencias SQL. El valor puede ser true, false o database, y el valor predeterminado es false. Consulta Section 54.4 para obtener más detalles.

Además de los anteriores, se pueden enumerar otros parámetros. Los nombres de parámetros que comienzan con _pq_. están reservados para su uso como extensiones de protocolo, mientras que otros se tratan como parámetros en tiempo de ejecución para ser establecidos al inicio del backend. Dichos ajustes se aplicarán durante el inicio del backend (después de analizar los argumentos de la línea de comandos, si los hay) y actuarán como valores predeterminados de la sesión.

String

El valor del parámetro.

Sync (F) #
Byte1('S')

Identifica el mensaje como un comando Sync.

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.

Terminate (F) #
Byte1('X')

Identifica el mensaje como una finalización.

Int32(4)

Longitud del contenido del mensaje en bytes, incluyéndose a sí mismo.