53.7. Форматы сообщений #
В этом разделе подробно описывается формат каждого сообщения. Все сообщения помечены символами, обозначающими, какая сторона может их передавать: клиент (F), сервер (B) или обе стороны (F & B). Заметьте, что хотя каждое сообщение включает счётчик байт в начале, формат сообщения разработан так, чтобы конец сообщения можно было найти, не обращаясь к счётчику байт. Это помогает проверять корректность сообщений. (Исключением является сообщение CopyData, так как оно образует часть потока данных; содержимое любого отдельного сообщения CopyData нельзя интерпретировать само по себе.)
- AuthenticationOk (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(0)
- Показывает, что проверка подлинности прошла успешно. 
 
- AuthenticationKerberosV5 (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(2)
- Указывает, что требуется проверка подлинности по протоколу Kerberos V5. 
 
- AuthenticationCleartextPassword (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(3)
- Указывает, что требуется пароль, передаваемый открытым текстом. 
 
- AuthenticationMD5Password (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(12)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(5)
- Указывает, что требуется пароль, преобразованный в хеш MD5. 
- Byte4
- Значение соли, с которым должен хешироваться пароль. 
 
- AuthenticationGSS (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(7)
- Указывает, что требуется проверка подлинности на базе GSSAPI. 
 
- AuthenticationGSSContinue (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(8)
- Указывает, что это сообщение содержит данные GSSAPI или SSPI. 
- Byten
- Данные аутентификации для GSSAPI или SSPI. 
 
- AuthenticationSSPI (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(9)
- Указывает, что требуется проверка подлинности на базе SSPI. 
 
- AuthenticationSASL (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(10)
- Указывает, что требуется проверка подлинности на базе SASL. 
 - Тело сообщения содержит список механизмов аутентификации SASL в порядке предпочтений сервера. За последним именем механизма аутентификации должен идти завершающий нулевой байт. Для каждого механизма передаётся: - String
- Имя механизма аутентификации SASL. 
 
- AuthenticationSASLContinue (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(11)
- Указывает, что это сообщение содержит данные вызова SASL. 
- Byten
- Данные SASL, специфичные для применяемого механизма SASL. 
 
- AuthenticationSASLFinal (B) #
- Byte1('R')
- Указывает, что это сообщение представляет запрос аутентификации. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(12)
- Указывает, что аутентификация SASL завершена. 
- Byten
- «Дополнительные данные» результата SASL, специфичные для применяемого механизма SASL. 
 
- BackendKeyData (B) #
- Byte1('K')
- Указывает, что это сообщение содержит ключевые данные для отмены запросов. Клиент должен сохранить эти данные, если ему нужна возможность впоследствии выдавать сообщения CancelRequest. 
- Int32(12)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32
- PID обслуживающего процесса. 
- Int32
- Секретный ключ обслуживающего процесса. 
 
- Bind (F) #
- Byte1('B')
- Указывает, что это сообщение представляет команду Bind. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Имя целевого портала (пустая строка выбирает безымянный портал). 
- String
- Имя исходного подготовленного оператора (пустая строка выбирает безымянный подготовленный оператор). 
- Int16
- Количество кодов форматов следующих параметров (обозначается ниже символом - C). Может быть нулевым, что показывает, что параметры отсутствуют или все параметры передаются в формате по умолчанию (текстовом); либо равняться одному, в этом случае указанный один код формата применяется ко всем параметрам; либо может равняться действительному количеству параметров.
- Int16[C]
- Коды форматов параметров. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). 
- Int16
- Количество следующих значений параметров (может быть нулевым). Оно должно совпадать с количеством параметров, требующихся для запроса. 
 - Затем для каждого параметра идёт следующая пара полей: - Int32
- Длина значения параметра, в байтах (само поле длины не считается). Может быть нулевой. В качестве особого значения, -1 представляет значение NULL. В случае с NULL никакие байты значений далее не следуют. 
- Byten
- Значение параметра в формате, определённом соответствующим кодом формата. Переменная - nзадаёт длину значения.
 - За последним параметром идёт следующее поле: - Int16
- Количество кодов формата для следующих столбцов результата (обозначается ниже символом - R). Может быть нулевым, что показывает, что столбцы результата отсутствуют или для всех столбцов должен использоваться формат по умолчанию (текстовый), либо равняться одному, в этом случае указанный один код формата применяется ко всем столбцам (если они есть), либо может равняться действительному количеству столбцов результата запроса.
- Int16[R]
- Коды форматов столбцов результата. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). 
 
- BindComplete (B) #
- Byte1('2')
- Указывает, что это сообщение, сигнализирующее о завершении Bind. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- CancelRequest (F) #
- Int32(16)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(80877102)
- Код запроса отмены. Это специально выбранное значение содержит - 1234в старших 16 битах и- 5678в младших 16 битах. (Во избежание неоднозначности этот код не должен совпадать с номером версии протокола.)
- Int32
- PID целевого обслуживающего процесса. 
- Int32
- Секретный ключ целевого обслуживающего процесса. 
 
- Close (F) #
- Byte1('C')
- Указывает, что это сообщение представляет команду Close. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byte1
- ' - S' для закрытия подготовленного оператора, '- P' для закрытия портала.
- String
- Имя подготовленного оператора или портала, который должен быть закрыт (пустая строка выбирает безымянный подготовленный оператор или портал). 
 
- CloseComplete (B) #
- Byte1('3')
- Указывает, что это сообщение, сигнализирующее о завершении Close. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- CommandComplete (B) #
- Byte1('C')
- Указывает, что это сообщение об успешном завершении команды. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Тег команды. Обычно это одно слово, обозначающее завершённую команду SQL. - Для команды - INSERTв качестве тега передаётся- INSERT, где- oid- число_строк- число_строк— количество вставленных строк. В поле- oidпередавался идентификатор объекта вставленной строки, когда- число_строкбыло равно 1 и в целевой таблице содержались OID; таким образом, сейчас- oidвсегда равняется 0.- Для команды - DELETEв качестве тега передаётся- DELETE, где- число_строк- число_строк— количество удалённых строк.- Для команды - UPDATEв качестве тега передаётся- UPDATE, где- число_строк- число_строк— количество изменённых строк.- Для команды - MERGEв качестве тега передаётся- MERGE, где- число_строк- число_строк— количество вставленных, изменённых или удалённых строк.- Для команды - SELECTили- CREATE TABLE ASв качестве тега передаётся- SELECT, где- число_строк- число_строк— число полученных строк.- Для команды - MOVEв качестве тега передаётся- MOVE, где- число_строк- число_строк— количество строк, на которое изменилась позиция курсора.- Для команды - FETCHв качестве тега передаётся- FETCH, где- число_строк- число_строк— количество строк, полученное через курсор.- Для команды - COPYв качестве тега передаётся- COPY, где- число_строк- число_строк— количество скопированных строк. (Заметьте: число строк выводится, начиная только с PostgreSQL 8.2.)
 
- CopyData (F & B) #
- Byte1('d')
- Указывает, что в этом сообщении передаются данные - COPY.
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byten
- Данные, образующие часть информационного потока - COPY. Сообщения от сервера всегда соответствуют отдельным строкам данных, но сообщения, передаваемые клиентами, могут разделять поток произвольным образом.
 
- CopyDone (F & B) #
- Byte1('c')
- Указывает, что это сообщение, сигнализирующее о завершении - COPY.
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- CopyFail (F) #
- Byte1('f')
- Указывает, что это сообщение, сигнализирующее об ошибке операции - COPY.
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Сообщение об ошибке, описывающее причину сбоя операции. 
 
- CopyInResponse (B) #
- Byte1('G')
- Указывает, что это сообщение является ответом на запуск входящего копирования. Получив его, клиент начинает передавать данные на вход операции копирования (если клиент не готов к этому, он передаёт сообщение CopyFail). 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int8
- Значение 0 указывает, что для всей операции - COPYприменяется текстовый формат (строки разделяются символами новой строки, столбцы разделяются символами-разделителями и т. д.). Значение 1 указывает, что для всей операции копирования применяется двоичный формат (подобный формату DataRow). За дополнительными сведениями обратитесь к COPY.
- Int16
- Количество столбцов в копируемых данных (ниже обозначается символом - N).
- Int16[N]
- Коды формата для каждого столбца. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). Если общий формат копирования — текстовый, все эти коды должны быть нулевыми. 
 
- CopyOutResponse (B) #
- Byte1('H')
- Указывает, что это сообщение является ответом на запуск исходящего копирования. За этим сообщением следуют данные, исходящие со стороны сервера. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int8
- Значение 0 указывает, что для всей операции - COPYприменяется текстовый формат (строки разделяются символами новой строки, столбцы разделяются символами-разделителями и т. д.). Значение 1 указывает, что для всей операции копирования применяется двоичный формат (подобный формату DataRow). За дополнительными сведениями обратитесь к COPY.
- Int16
- Количество столбцов в копируемых данных (ниже обозначается символом - N).
- Int16[N]
- Коды формата для каждого столбца. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). Если общий формат копирования — текстовый, все эти коды должны быть нулевыми. 
 
- CopyBothResponse (B) #
- Byte1('W')
- Указывает, что это сообщение является ответом на запуск двустороннего копирования. Это сообщение используется только для потоковой репликации. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int8
- Значение 0 указывает, что для всей операции - COPYприменяется текстовый формат (строки разделяются символами новой строки, столбцы разделяются символами-разделителями и т. д.). Значение 1 указывает, что для всей операции копирования применяется двоичный формат (подобный формату DataRow). За дополнительными сведениями обратитесь к COPY.
- Int16
- Количество столбцов в копируемых данных (ниже обозначается символом - N).
- Int16[N]
- Коды формата для каждого столбца. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). Если общий формат копирования — текстовый, все эти коды должны быть нулевыми. 
 
- DataRow (B) #
- Byte1('D')
- Указывает, что в этом сообщении передаётся строка данных. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int16
- Количество последующих значений столбцов (может быть нулевым). 
 - Затем для каждого столбца идёт следующая пара полей: - Int32
- Длина значения столбца, в байтах (само поле длины не считается). Может быть нулевой. В качестве особого значения, -1 представляет значение NULL. В случае с NULL никакие байты значений далее не следуют. 
- Byten
- Значение столбца в формате, определённом соответствующим кодом формата. Переменная - nзадаёт длину значения.
 
- Describe (F) #
- Byte1('D')
- Указывает, что это сообщение представляет команду Describe. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byte1
- ' - S' для получения описания подготовленного оператора, '- P' — портала.
- String
- Имя подготовленного оператора или портала, описание которого запрашивается (пустая строка выбирает безымянный подготовленный оператор или портал). 
 
- EmptyQueryResponse (B) #
- Byte1('I')
- Указывает, что это сообщение является ответом на пустую строку запроса. (Это сообщение заменяет CommandComplete.) 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- ErrorResponse (B) #
- Byte1('E')
- Указывает, что это сообщение ошибки. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
 - Тело сообщения состоит из одного или нескольких определённых полей, за которыми в качестве завершающего следует нулевой байт. Поля могут идти в любом порядке. Для каждого поля передаётся: - Byte1
- Код, задающий тип поля; ноль обозначает конец сообщения, после которого ничего нет. Типы полей, определённые в настоящее время, перечислены в Разделе 53.8. Так как в будущем могут появиться другие типы полей, клиенты должны просто игнорировать поля нераспознанного типа. 
- String
- Значение поля. 
 
- Execute (F) #
- Byte1('E')
- Указывает, что это сообщение представляет команду Execute. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Имя портала, подлежащего выполнению (пустая строка выбирает безымянный портал). 
- Int32
- Максимальное число строк, которое должно быть возвращено, если портал содержит запрос, возвращающий строки (в противном случае игнорируется). Ноль означает «без ограничения». 
 
- Flush (F) #
- Byte1('H')
- Указывает, что это сообщение представляет команду Flush. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- FunctionCall (F) #
- Byte1('F')
- Указывает, что это сообщение представляет вызов функции. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32
- Задаёт идентификатор объекта вызываемой функции. 
- Int16
- Количество кодов форматов следующих аргументов (обозначается ниже символом - C). Может быть нулевым, что показывает, что аргументы отсутствуют или все аргументы передаются в формате по умолчанию (текстовом); либо равняться одному, в этом случае указанный один код формата применяется ко всем аргументами, либо может равняться действительному количеству аргументов.
- Int16[C]
- Коды форматов аргументов. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). 
- Int16
- Задаёт число аргументов, передаваемых функции. 
 - Затем для каждого аргумента идёт следующая пара полей: - Int32
- Длина значения аргумента, в байтах (само поле длины не считается). Может быть нулевой. В качестве особого значения, -1 представляет значение NULL. В случае с NULL никакие байты значений далее не следуют. 
- Byten
- Значение аргумента, в формате, определённом соответствующим кодом формата. Переменная - nзадаёт длину значения.
 - За последним аргументом идёт следующее поле: - Int16
- Код формата результата функции. В настоящее время допускается код ноль (текстовый формат) и один (двоичный). 
 
- FunctionCallResponse (B) #
- Byte1('V')
- Указывает, что в этом сообщении передаётся результат вызова функции. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32
- Длина значения результата функции, в байтах (само поле длины не считается). Может быть нулевой. В качестве особого значения, -1 представляет значение NULL. В случае с NULL никакие байты значения далее не следуют. 
- Byten
- Значение результата функции в формате, определённом соответствующим кодом формата. Переменная - nзадаёт длину значения.
 
- GSSENCRequest (F) #
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(80877104)
- Код запроса GSSAPI Encryption. Это специально выбранное значение содержит - 1234в старших 16 битах и- 5680в младших 16 битах. (Во избежание неоднозначности этот код не должен совпадать с номером версии протокола.)
 
- GSSResponse (F) #
- Byte1('p')
- Обозначает это сообщение как ответ GSSAPI или SSPI. Заметьте, что оно также применяется для ответов SASL и при аутентификации по паролю. Точный тип сообщения можно определить из контекста. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byten
- Данные сообщения, специфичные для GSSAPI/SSPI. 
 
- NegotiateProtocolVersion (B) #
- Byte1('v')
- Указывает, что это сообщение согласования версии протокола. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32
- Новейшая младшая версия протокола, поддерживаемая сервером, для запрошенной клиентом старшей версии. 
- Int32
- Число параметров протокола, не принятых сервером. 
 - Затем для параметров протокола, не принятых сервером, передаётся: - String
- Имя параметра. 
 
- NoData (B) #
- Byte1('n')
- Указывает, что это сообщение сигнализирует об отсутствии данных. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- NoticeResponse (B) #
- Byte1('N')
- Указывает, что это сообщение представляет замечание. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
 - Тело сообщения состоит из одного или нескольких определённых полей, за которыми в качестве завершающего следует нулевой байт. Поля могут идти в любом порядке. Для каждого поля передаётся: - Byte1
- Код, задающий тип поля; ноль обозначает конец сообщения, после которого ничего нет. Типы полей, определённые в настоящее время, перечислены в Разделе 53.8. Так как в будущем могут появиться другие типы полей, клиенты должны просто игнорировать поля нераспознанного типа. 
- String
- Значение поля. 
 
- NotificationResponse (B) #
- Byte1('A')
- Указывает, что это сообщение представляет уведомление. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32
- PID обслуживающего процесса, отправляющего уведомление. 
- String
- Имя канала, для которого было выдано уведомление. 
- String
- Строка «сообщения», сопровождающего уведомление. 
 
- ParameterDescription (B) #
- Byte1('t')
- Указывает, что это сообщение представляет описание параметра. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int16
- Количество параметров для оператора (может быть нулевым). 
 - Затем для каждого параметра передаётся: - Int32
- Задаёт идентификатор объекта типа данных параметра. 
 
- ParameterStatus (B) #
- Byte1('S')
- Указывает, что в этом сообщении передаётся состояние параметра времени выполнения. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Имя параметра времени выполнения, состояние которого передаётся. 
- String
- Текущее значение параметра. 
 
- Parse (F) #
- Byte1('P')
- Указывает, что это сообщение представляет команду Parse. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Имя целевого подготовленного оператора (пустая строка выбирает безымянный подготовленный оператор). 
- String
- Строка запроса, которая должна быть разобрана. 
- Int16
- Количество типов параметров (может быть нулевым). Заметьте, что это значение представляет не число параметров, которые могут фигурировать в строке запроса, а число параметров, для которых клиент хочет предопределить типы. 
 - Затем для каждого параметра передаётся: - Int32
- Задаёт идентификатор объекта типа данных параметра. Указание нулевого значения равносильно отсутствию указания типа. 
 
- ParseComplete (B) #
- Byte1('1')
- Указывает, что это сообщение, сигнализирующее о завершении Parse. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- PasswordMessage (F) #
- Byte1('p')
- Обозначает это сообщение как ответ SASL. Заметьте, что оно также применяется для ответов GSSAPI, SSPI и SASL. Точный тип сообщения можно определить из контекста. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Пароль (зашифрованный, если требуется). 
 
- PortalSuspended (B) #
- Byte1('s')
- Указывает, что это сообщение сигнализирует о приостановке портала. Заметьте, что оно выдаётся только при достижении ограничения числа строк, заданного в сообщении Execute. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- Query (F) #
- Byte1('Q')
- Указывает, что это сообщение представляет простой протокол запросов. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Собственно строка запроса. 
 
- ReadyForQuery (B) #
- Byte1('Z')
- Определяет тип сообщения. Сообщение ReadyForQuery передаётся, когда сервер готов к новому циклу запросов. 
- Int32(5)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byte1
- Индикатор текущего состояния транзакции на сервере. Возможные значения: ' - I', транзакция неактивна (вне блока транзакции), '- T' в блоке транзакции, либо '- E' в блоке прерванной транзакции (запросы не будут обрабатываться до завершения блока).
 
- RowDescription (B) #
- Byte1('T')
- Указывает, что это сообщение представляет описание строки. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int16
- Задаёт количество полей в строке (может быть нулевым). 
 - Затем для каждого поля передаётся: - String
- Имя поля. 
- Int32
- Если поле связано со столбцом определённой таблицы, идентификатор объекта этой таблицы; в противном случае — ноль. 
- Int16
- Если поле связано со столбцом определённой таблицы, номер атрибута для этого столбца; в противном случае — ноль. 
- Int32
- Идентификатор объекта типа данных поля. 
- Int16
- Размер типа данных (см. - pg_type.typlen). Заметьте, что отрицательные значения показывают, что тип имеет переменную длину.
- Int32
- Модификатор типа (см. - pg_attribute.atttypmod). Смысл этого модификатора зависит от типа.
- Int16
- Код формата, используемого для поля. В настоящее время допускаются коды ноль (текстовый формат) и один (двоичный). В сообщении RowDescription, возвращаемом вариацией Describe для оператора, код формата ещё не известен и всегда будет нулевым. 
 
- SASLInitialResponse (F) #
- Byte1('p')
- Обозначает это сообщение как начальный ответ SASL. Заметьте, что оно также применяется для ответов GSSAPI, SSPI и при аутентификации по паролю. Точный тип сообщения определяется из контекста. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- String
- Имя механизма аутентификации SASL, выбранного клиентом. 
- Int32
- Длина последующего сообщения «Начальный ответ клиента», специфичного для механизма SASL, или -1, если начального ответа нет. 
- Byten
- «Начальный ответ», специфичный для механизма SASL. 
 
- SASLResponse (F) #
- Byte1('p')
- Обозначает это сообщение как ответ SASL. Заметьте, что оно также применяется для ответов GSSAPI, SSPI и при аутентификации по паролю. Точный тип сообщения можно определить из контекста. 
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Byten
- Данные сообщения, специфичные для механизма SASL. 
 
- SSLRequest (F) #
- Int32(8)
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(80877103)
- Код запроса SSL. Это специально выбранное значение содержит - 1234в старших 16 битах и- 5679в младших 16 битах. (Во избежание неоднозначности этот код не должен совпадать с номером версии протокола.)
 
- StartupMessage (F) #
- Int32
- Длина содержимого сообщения в байтах, включая само поле длины. 
- Int32(196608)
- Номер версии протокола. В старших 16 битах задаётся старший номер версии (3 для протокола, описываемого здесь). В младших 16 битах задаётся младший номер версии (0 для протокола, описываемого здесь). 
 - За номером версии протокола следует одна или несколько пар из имени параметра и строки значения. За последней парой имя/значение должен следовать нулевой байт. Передаваться параметры могут в любом порядке. Обязательным является только параметр - user, остальные могут отсутствовать. Каждый параметр задаётся так:- String
- Имя параметра. В настоящее время принимаются имена: - user
- Имя пользователя баз данных, с которым выполняется подключение. Является обязательным, значения по умолчанию нет. 
- database
- База данных, к которой выполняется подключение. По умолчанию подставляется имя пользователя. 
- options
- Аргументы командной строки для обслуживающего процесса. (Этот способ считается устаревшим; теперь следует устанавливать отдельные параметры времени выполнения.) Пробелы в этой строке воспринимаются как разделяющие аргументы, если перед ними нет обратной косой черты ( - \); чтобы представить обратную косую черту буквально, продублируйте её (- \\).
- replication
- Используется для подключения в режиме потоковой репликации, в котором вместо операторов SQL может выполняться небольшой набор команд репликации. Допустимые значения: - true,- false(по умолчанию) и- database. За подробностями обратитесь к Разделу 53.4.
 - В дополнение к ним могут задаваться и другие параметры. Имена параметров, начинающиеся с - _pq_., резервируются для использования в расширениях протокола, а остальные воспринимаются как параметры времени выполнения, передаваемые во время запуска серверному процессу. Такие параметры будут применяться при запуске серверного процесса (после разбора аргументов командной строки, если они есть) и будут действовать как параметры сеанса по умолчанию.
- String
- Значение параметра. 
 
- Sync (F) #
- Byte1('S')
- Указывает, что это сообщение представляет команду Sync. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины. 
 
- Terminate (F) #
- Byte1('X')
- Указывает, что это сообщение завершает сеанс. 
- Int32(4)
- Длина содержимого сообщения в байтах, включая само поле длины.