56.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.
- Byte
n
Данные аутентификации для 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.
- Byte
n
Данные SASL, специфичные для применяемого механизма SASL.
- AuthenticationSASLFinal (B) #
- Byte1('R')
Указывает, что это сообщение представляет запрос аутентификации.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Int32(12)
Указывает, что аутентификация SASL завершена.
- Byte
n
«Дополнительные данные» результата 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 никакие байты значений далее не следуют.
- Byte
n
Значение параметра в формате, определённом соответствующим кодом формата. Переменная
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
Длина содержимого сообщения в байтах, включая само поле длины.
- Byte
n
Данные, образующие часть информационного потока
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 никакие байты значений далее не следуют.
- Byte
n
Значение столбца в формате, определённом соответствующим кодом формата. Переменная
n
задаёт длину значения.
- Describe (F) #
- Byte1('D')
Указывает, что это сообщение представляет команду Describe.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Byte1
'
S
' для получения описания подготовленного оператора, 'P
' — портала.- String
Имя подготовленного оператора или портала, описание которого запрашивается (пустая строка выбирает безымянный подготовленный оператор или портал).
- EmptyQueryResponse (B) #
- Byte1('I')
Указывает, что это сообщение является ответом на пустую строку запроса. (Это сообщение заменяет CommandComplete.)
- Int32(4)
Длина содержимого сообщения в байтах, включая само поле длины.
- ErrorResponse (B) #
- Byte1('E')
Указывает, что это сообщение ошибки.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
Тело сообщения состоит из одного или нескольких определённых полей, за которыми в качестве завершающего следует нулевой байт. Поля могут идти в любом порядке. Для каждого поля передаётся:
- Byte1
Код, задающий тип поля; ноль обозначает конец сообщения, после которого ничего нет. Типы полей, определённые в настоящее время, перечислены в Разделе 56.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 никакие байты значений далее не следуют.
- Byte
n
Значение аргумента, в формате, определённом соответствующим кодом формата. Переменная
n
задаёт длину значения.
За последним аргументом идёт следующее поле:
- Int16
Код формата результата функции. В настоящее время допускается код ноль (текстовый формат) и один (двоичный).
- FunctionCallResponse (B) #
- Byte1('V')
Указывает, что в этом сообщении передаётся результат вызова функции.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Int32
Длина значения результата функции, в байтах (само поле длины не считается). Может быть нулевой. В качестве особого значения, -1 представляет значение NULL. В случае с NULL никакие байты значения далее не следуют.
- Byte
n
Значение результата функции в формате, определённом соответствующим кодом формата. Переменная
n
задаёт длину значения.
- GSSENCRequest (F) #
- Int32(8)
Длина содержимого сообщения в байтах, включая само поле длины.
- Int32(80877104)
Код запроса GSSAPI Encryption. Это специально выбранное значение содержит
1234
в старших 16 битах и5680
в младших 16 битах. (Во избежание неоднозначности этот код не должен совпадать с номером версии протокола.)
- GSSResponse (F) #
- Byte1('p')
Обозначает это сообщение как ответ GSSAPI или SSPI. Заметьте, что оно также применяется для ответов SASL и при аутентификации по паролю. Точный тип сообщения можно определить из контекста.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Byte
n
Данные сообщения, специфичные для GSSAPI/SSPI.
- NegotiateProtocolVersion (B) #
- Byte1('v')
Указывает, что это сообщение согласования версии протокола.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Int32
Новейшая младшая версия протокола, поддерживаемая сервером, для запрошенной клиентом старшей версии.
- Int32
Число параметров протокола, не принятых сервером.
Затем для параметров протокола, не принятых сервером, передаётся:
- String
Имя параметра.
- NoData (B) #
- Byte1('n')
Указывает, что это сообщение сигнализирует об отсутствии данных.
- Int32(4)
Длина содержимого сообщения в байтах, включая само поле длины.
- NoticeResponse (B) #
- Byte1('N')
Указывает, что это сообщение представляет замечание.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
Тело сообщения состоит из одного или нескольких определённых полей, за которыми в качестве завершающего следует нулевой байт. Поля могут идти в любом порядке. Для каждого поля передаётся:
- Byte1
Код, задающий тип поля; ноль обозначает конец сообщения, после которого ничего нет. Типы полей, определённые в настоящее время, перечислены в Разделе 56.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, если начального ответа нет.
- Byte
n
«Начальный ответ», специфичный для механизма SASL.
- SASLResponse (F) #
- Byte1('p')
Обозначает это сообщение как ответ SASL. Заметьте, что оно также применяется для ответов GSSAPI, SSPI и при аутентификации по паролю. Точный тип сообщения можно определить из контекста.
- Int32
Длина содержимого сообщения в байтах, включая само поле длины.
- Byte
n
Данные сообщения, специфичные для механизма 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
. За подробностями обратитесь к Разделу 56.4.
В дополнение к ним могут задаваться и другие параметры. Имена параметров, начинающиеся с
_pq_.
, резервируются для использования в расширениях протокола, а остальные воспринимаются как параметры времени выполнения, передаваемые во время запуска серверному процессу. Такие параметры будут применяться при запуске серверного процесса (после разбора аргументов командной строки, если они есть) и будут действовать как параметры сеанса по умолчанию.- String
Значение параметра.
- Sync (F) #
- Byte1('S')
Указывает, что это сообщение представляет команду Sync.
- Int32(4)
Длина содержимого сообщения в байтах, включая само поле длины.
- Terminate (F) #
- Byte1('X')
Указывает, что это сообщение завершает сеанс.
- Int32(4)
Длина содержимого сообщения в байтах, включая само поле длины.