PostgreSQL 消息格式

2021-09-14 16:48 更新

本節(jié)描述各種消息的詳細(xì)格式。每種消息都標(biāo)記來(lái)指示它是由前端(F)、后端(B)或者兩者(F & B)發(fā)送的。 請(qǐng)注意,盡管每條消息在開(kāi)頭都包含一個(gè)字節(jié)計(jì)數(shù),但是消息格式也被定義為無(wú)需參考字節(jié)計(jì)數(shù)就可以找到消息的結(jié)尾。 這樣是為了有效性檢查(CopyData消息是一個(gè)例外,因?yàn)樗纬梢粋€(gè)數(shù)據(jù)流的一部分;任意獨(dú)立的CopyData消息可能是無(wú)法自解釋的)。

AuthenticationOk (B)

Byte1('R')

標(biāo)識(shí)該消息是一條認(rèn)證請(qǐng)求。

Int32(8)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括這個(gè)長(zhǎng)度本身。

Int32(0)

指定該認(rèn)證是成功的。

AuthenticationKerberosV5 (B)

Byte1('R')

標(biāo)識(shí)該消息是一條認(rèn)證請(qǐng)求。

Int32(8)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度自身。

Int32(2)

指定要求Kerberos V5認(rèn)證。

AuthenticationCleartextPassword (B)

Byte1('R')

標(biāo)識(shí)該消息是一條認(rèn)證請(qǐng)求。

Int32(8)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度自身。

Int32(3)

指定要求一個(gè)明文的口令。

AuthenticationMD5Password (B)

Byte1('R')

標(biāo)識(shí)這條消息是一個(gè)認(rèn)證請(qǐng)求。

Int32(12)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Int32(5)

指定要求一個(gè)MD5加密的口令。

Byte4

加密口令的時(shí)候使用的鹽粒。

AuthenticationSCMCredential (B)

Byte1('R')

標(biāo)識(shí)這條消息是一個(gè)認(rèn)證請(qǐng)求。

Int32(8)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

Int32(6)

指定請(qǐng)求一個(gè)SCM信任消息。

AuthenticationGSS (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32(8)

消息內(nèi)容的長(zhǎng)度以字節(jié)為單位,包括自己。

Int32(7)

指定被請(qǐng)求的是GSSAPI認(rèn)證。

AuthenticationSSPI (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32(8)

消息內(nèi)容的長(zhǎng)度以字節(jié)為單位,包括自己。

Int32(9)

指定被請(qǐng)求的是SSPI認(rèn)證。

AuthenticationGSSContinue (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32

消息內(nèi)容的長(zhǎng)度以字節(jié)為單位,包括自己。

Int32(8)

指定該消息包含GSSAPI或SSPI數(shù)據(jù)。

Byten

GSSAPI或SSPI認(rèn)證數(shù)據(jù)。

AuthenticationSASL (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Int32(10)

指定SASL認(rèn)證被要求。

消息體是一個(gè)SASL認(rèn)證機(jī)制的列表,該列表按照服務(wù)器偏愛(ài)的順序組織。在最后一個(gè)認(rèn)證機(jī)制名稱的后面需要一個(gè)零字節(jié)作為終結(jié)符。對(duì)于每一種機(jī)制,有下列信息:

String

一種SASL認(rèn)證機(jī)制的名稱。

AuthenticationSASLContinue (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Int32(11)

指定這個(gè)消息包含一個(gè)SASL挑戰(zhàn)。

Byten

SASL數(shù)據(jù),與使用的SASL機(jī)制有關(guān)。

AuthenticationSASLFinal (B)

Byte1('R')

標(biāo)識(shí)該消息是一個(gè)認(rèn)證請(qǐng)求。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Int32(12)

指定SASL認(rèn)證已經(jīng)完成。

Byten

SASL產(chǎn)出的“額外數(shù)據(jù)”,與使用的SASL機(jī)制有關(guān)。

BackendKeyData (B)

Byte1('K')

標(biāo)識(shí)該消息是一個(gè)取消鍵數(shù)據(jù)。如果前端希望能夠在稍后發(fā)出CancelRequest消息, 那么它必須保存這個(gè)值。

Int32(12)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Int32

后端的進(jìn)程號(hào)(PID)。

Int32

此后端的密鑰。

Bind (F)

Byte1('B')

標(biāo)識(shí)該信息是一個(gè)綁定命令。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

String

目標(biāo)入口的名字(空字符串則選取未命名的入口)。

String

源預(yù)備語(yǔ)句的名字(空字符串則選取未命名的預(yù)備語(yǔ)句)。

Int16

后面跟著的參數(shù)格式代碼的數(shù)目(由下文的C說(shuō)明)。 這個(gè)數(shù)值可以是零,表示沒(méi)有參數(shù),或者是參數(shù)都使用缺省格式(文本); 也可以是一,這種情況下指定的格式代碼被應(yīng)用于所有參數(shù);或者它可以等于實(shí)際參數(shù)的數(shù)目。

Int16[C]

參數(shù)格式代碼。目前每個(gè)都必須是零(文本)或者一(二進(jìn)制)。

Int16

后面跟著的參數(shù)值的數(shù)目(可能為零)。這些必須和查詢需要的參數(shù)個(gè)數(shù)匹配。

然后,每個(gè)參數(shù)都會(huì)出現(xiàn)下面的域?qū)Γ?/p>

Int32

參數(shù)值的長(zhǎng)度,以字節(jié)計(jì)(這個(gè)長(zhǎng)度并不包含長(zhǎng)度本身)。可以為零。 一個(gè)特殊的情況是,-1 表示一個(gè)NULL參數(shù)值。在NULL 的情況下, 后面不會(huì)跟著字節(jié)值。

Byten

參數(shù)值,使用關(guān)聯(lián)的格式代碼表示的格式。n是上文的長(zhǎng)度。

在最后一個(gè)參數(shù)之后,出現(xiàn)下面的域:

Int16

后面跟著的結(jié)果列格式代碼數(shù)目(下文的R描述)。 這個(gè)數(shù)目可以是零表示沒(méi)有結(jié)果列或者結(jié)果列都使用缺省格式(文本); 也可以是一,這種情況下指定的格式代碼被應(yīng)用于所有結(jié)果列(如果有的話);或者它可以等于查詢的結(jié)果列的實(shí)際數(shù)目。

Int16[R]

結(jié)果列格式代碼。目前每個(gè)必須是零(文本)或者一(二進(jìn)制)。

BindComplete (B)

Byte1('2')

標(biāo)識(shí)該消息為一個(gè)綁定結(jié)束標(biāo)識(shí)符。

Int32(4)

以字節(jié)計(jì)的消息長(zhǎng)度,包括長(zhǎng)度本身。

CancelRequest (F)

Int32(16)

以字節(jié)計(jì)的消息長(zhǎng)度。包括長(zhǎng)度本身。

Int32(80877102)

取消請(qǐng)求代碼。該值被選中在高16位包含1234,并且在低16位包含 5678(為避免混淆,這個(gè)代碼不能和任何協(xié)議版本號(hào)相同)。

Int32

目標(biāo)后端的進(jìn)程號(hào)(PID)。

Int32

目標(biāo)后端的密鑰。

Close (F)

Byte1('C')

標(biāo)識(shí)這條消息是一個(gè)Close命令。

Int32

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

Byte1

'S'關(guān)閉一個(gè)準(zhǔn)備的語(yǔ)句;或者'P'關(guān)閉一個(gè)入口。

String

一個(gè)要關(guān)閉的預(yù)備語(yǔ)句或者入口的名字(一個(gè)空字符串選擇未命名的預(yù)備語(yǔ)句或者入口)。

CloseComplete (B)

Byte1('3')

標(biāo)識(shí)消息是一個(gè)Close完成指示器。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

CommandComplete (B)

Byte1('C')

標(biāo)識(shí)此消息是一個(gè)命令結(jié)束響應(yīng)。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

String

命令標(biāo)記。它通常是一個(gè)單字,標(biāo)識(shí)被完成的SQL命令。

對(duì)于INSERT命令,該標(biāo)記是INSERT oid rows , 其中rows是已被插入的行數(shù)。如果rows為1并且目標(biāo)表已有OIDs, oid為已插入行的對(duì)象ID;但是OIDs 系統(tǒng)列已經(jīng)不再被支持;因此oid始終為 0。

對(duì)于DELETE命令,該標(biāo)記是DELETE rows , 其中rows是已被刪除的行數(shù)。

對(duì)于UPDATE命令,該標(biāo)記是UPDATE rows ,其中rows是已被更新的行數(shù)。

對(duì)于SELECTCREATE TABLE AS命令,該標(biāo)記是SELECT rows ,其中rows是被檢索的行數(shù)。

對(duì)于MOVE命令,該標(biāo)記是MOVE rows ,其中rows是游標(biāo)位置被移動(dòng)的行數(shù)。

對(duì)于FETCH命令,該標(biāo)記是FETCH rows ,其中rows是已從游標(biāo)中檢索出來(lái)的行數(shù)。

對(duì)于COPY命令,該標(biāo)記是COPY rows ,其中rows是已拷貝的行數(shù)(注意,行計(jì)數(shù)只在PostgreSQL 8.2及其后的版本中出現(xiàn))。

CopyData (F & B)

Byte1('d')

標(biāo)識(shí)這條消息是一個(gè)COPY數(shù)據(jù)。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Byten

構(gòu)成COPY數(shù)據(jù)流的一部分的數(shù)據(jù)。從后端發(fā)出的消息總是對(duì)應(yīng)單一的數(shù)據(jù)行,但是前端發(fā)出的消息可能會(huì)任意分割數(shù)據(jù)流。

CopyDone (F & B)

Byte1('c')

標(biāo)識(shí)這條信息是一個(gè)COPY結(jié)束指示器。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

CopyFail (F)

Byte1('f')

標(biāo)識(shí)這條消息是一個(gè)COPY失敗指示器。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

String

一個(gè)報(bào)告失敗原因的錯(cuò)誤消息。

CopyInResponse (B)

Byte1('G')

標(biāo)識(shí)這條消息是一條Start Copy In(開(kāi)始拷貝入)響應(yīng)消息。前端現(xiàn)在必須發(fā)送拷貝入數(shù)據(jù)(如果還沒(méi)準(zhǔn)備好做這些事情,那么發(fā)送一條CopyFail消息)。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Int8

0表示全體拷貝格式都是文本(數(shù)據(jù)行由新符分隔, 列由分隔字符分隔等等)。1 表示全體拷貝格式都是二進(jìn)制的(類似于DataRow 格式)。參閱COPY獲取更多信息。

Int16

要拷貝的數(shù)據(jù)中的列數(shù)(由下文的N解釋)。

Int16[N]

每個(gè)列要使用的格式代碼。目前每個(gè)都必須是零(文本)或者一(二進(jìn)制)。 如果全體拷貝格式都是文本,那么所有的都必須是零。

CopyOutResponse (B)

Byte1('H')

標(biāo)識(shí)這條消息是一條Start Copy Out(開(kāi)始拷貝出)響應(yīng)消息。這條消息后面將跟著拷貝出數(shù)據(jù)。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括它自己。

Int8

0表示全體拷貝格式都是文本(數(shù)據(jù)行由新符分隔, 列由分隔字符分隔等等)。1 表示全體拷貝格式都是二進(jìn)制的(類似于DataRow 格式)。參閱COPY獲取更多信息。

Int16

要拷貝的數(shù)據(jù)的列數(shù)(在下文的N說(shuō)明)。

Int16[N]

每個(gè)列要使用的格式代碼。目前每個(gè)都必須是零(文本)或者一(二進(jìn)制)。 如果全體拷貝格式都是文本,那么所有的都必須是零。

CopyBothResponse (B)

Byte1('W')

標(biāo)識(shí)這個(gè)消息是一個(gè)Start Copy Both(啟動(dòng)雙向復(fù)制)響應(yīng)。這個(gè)消息只用于流復(fù)制。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

Int8

0表示全體COPY格式都是文本(數(shù)據(jù)行由新符分隔,列由分隔字符分隔等等)。1 表示全體拷貝格式都是二進(jìn)制的(類似于DataRow格式)。參閱COPY獲取更多信息。

Int16

要拷貝的數(shù)據(jù)中的列數(shù)目(在下文的N說(shuō)明)。

Int16[N]

每個(gè)列要使用的格式代碼。目前每個(gè)都必須是零(文本)或者一(二進(jìn)制)。 如果全體拷貝格式都是文本,那么所有的代碼都必須是零。

DataRow (B)

Byte1('D')

標(biāo)識(shí)這個(gè)消息是一個(gè)數(shù)據(jù)行。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

Int16

后面跟著的列值的個(gè)數(shù)(可能是零)。

然后,為每個(gè)列都會(huì)出現(xiàn)下面的域?qū)Γ?/p>

Int32

列值的長(zhǎng)度,以字節(jié)計(jì)(這個(gè)長(zhǎng)度不包括它自己)。可以為零。一個(gè)特殊的情況是,-1表示一個(gè)NULL的域值。 如果是NULL的情況則后面不會(huì)跟著值字節(jié)。

Byten

一個(gè)列的數(shù)值,以相關(guān)的格式代碼指示的格式展現(xiàn)。n是上文的長(zhǎng)度。

Describe (F)

Byte1('D')

標(biāo)識(shí)該消息是一個(gè)Describe(描述)命令。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括字節(jié)本身。

Byte1

'S'描述一個(gè)預(yù)備語(yǔ)句;或者 'P' 描述一個(gè)入口。

String

要描述的預(yù)備語(yǔ)句或者入口的名字(或者一個(gè)空字符串,就會(huì)選取未命名的預(yù)備語(yǔ)句或者入口)。

EmptyQueryResponse (B)

Byte1('I')

標(biāo)識(shí)這條消息是對(duì)一個(gè)空查詢字符串的響應(yīng)(這個(gè)消息替換了CommandComplete)。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括它自己。

ErrorResponse (B)

Byte1('E')

標(biāo)識(shí)該消息是一條錯(cuò)誤。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

消息體由一個(gè)或多個(gè)標(biāo)識(shí)域組成,后面跟著一個(gè)零字節(jié)作為終止符。域可以以任何順序出現(xiàn)。對(duì)于每個(gè)域都有下面的東西:

Byte1

一個(gè)標(biāo)識(shí)域類型的代碼;如果為零,這就是消息終止符并且不會(huì)跟著有字符串。目前定義的域類型在第 52.8 節(jié)列出。由于將來(lái)可能增加更多的域類型,所以前端應(yīng)該默默地忽略未識(shí)別類型的域。

String

域值。

Execute (F)

Byte1('E')

標(biāo)識(shí)該消息是一個(gè)Execute命令。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

String

要執(zhí)行的入口的名字(空字符串選擇未命名的入口)。

Int32

要返回的最大行數(shù),如果入口包含返回行的查詢(否則忽略)。零表示無(wú)限制

Flush (F)

Byte1('H')

標(biāo)識(shí)該消息是一條Flush命令。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

FunctionCall (F)

Byte1('F')

標(biāo)識(shí)該消息是一個(gè)函數(shù)調(diào)用。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Int32

指定要調(diào)用的函數(shù)的對(duì)象ID(OID)。

Int16

后面跟著的參數(shù)格式代碼的數(shù)目(用下文的C表示)。 它可以是零,表示沒(méi)有參數(shù),或者是所有參數(shù)都使用缺省格式(文本); 也可以是一,這種情況下聲明的格式代碼被應(yīng)用于所有參數(shù);或者它可以等于參數(shù)的實(shí)際個(gè)數(shù)。

Int16[C]

參數(shù)格式代碼。目前每個(gè)必須是零(文本)或者一(二進(jìn)制)

Int16

指定提供給函數(shù)的參數(shù)個(gè)數(shù)。

然后,對(duì)每個(gè)參數(shù)都出現(xiàn)下面域?qū)Γ?/p>

Int32

以字節(jié)計(jì)的參數(shù)值的長(zhǎng)度(不包括長(zhǎng)度本身)??梢詾榱?。一個(gè)特殊的例子是,-1表示一個(gè)NULL參數(shù)值。如果是NULL,則沒(méi)有參數(shù)字節(jié)跟在后面。

Byten

參數(shù)的值,格式由相關(guān)的格式代碼指示。n是上文的長(zhǎng)度。

在最后一個(gè)參數(shù)之后,出現(xiàn)下面的域:

Int16

函數(shù)結(jié)果的格式代碼。目前必須是零(文本)或者一(二進(jìn)制)。

FunctionCallResponse (B)

Byte1('V')

標(biāo)識(shí)這條消息是一個(gè)函數(shù)調(diào)用結(jié)果。

Int32

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

Int32

以字節(jié)計(jì)的函數(shù)結(jié)果值的長(zhǎng)度(不包括長(zhǎng)度本身)。可以為零。一個(gè)特殊的情況是,-1表示NULL函數(shù)結(jié)果。如果是NULL則后面沒(méi)有值字節(jié)跟隨。

Byten

函數(shù)結(jié)果的值,格式由相關(guān)聯(lián)的格式代碼指示。n是上文的長(zhǎng)度。

GSSResponse (F)

Byte1('p')

標(biāo)識(shí)該消息是一個(gè)GSSAPI或SSPI響應(yīng)。注意這也被用于SASL和口令響應(yīng)消息。準(zhǔn)確的消息類型可以從上下文中得出。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Byten

GSSAPI/SSPI相關(guān)的消息數(shù)據(jù)。

NegotiateProtocolVersion (B)

Byte1('v')

標(biāo)識(shí)該消息是一個(gè)協(xié)議版本協(xié)商消息。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Int32

對(duì)于客戶端請(qǐng)求的主協(xié)議版本,服務(wù)器能支持的最新的次協(xié)議版本。

Int32

服務(wù)器無(wú)法識(shí)別的協(xié)議選項(xiàng)數(shù)目。

然后,對(duì)于服務(wù)器無(wú)法識(shí)別的協(xié)議選項(xiàng),還有下列信息:

String

選項(xiàng)名稱。

NoData (B)

Byte1('n')

標(biāo)識(shí)這條消息是一個(gè)無(wú)數(shù)據(jù)指示器。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

NoticeResponse (B)

Byte1('N')

標(biāo)識(shí)這條消息是一個(gè)通知。

Int32

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

消息體由一個(gè)或多個(gè)標(biāo)識(shí)域組成,后面跟著零字節(jié)作為中止符。域可以以任何順序出現(xiàn)。對(duì)于每個(gè)域,都有下面的東西:

Byte1

一個(gè)標(biāo)識(shí)域類型的代碼;如果為零,那么它就是消息終止符,并且后面不會(huì)跟著字符串。目前定義的域類型在第 52.8 節(jié)里列出。由于將來(lái)可能會(huì)增加更多域類型,所以前端應(yīng)該將不能識(shí)別的域安靜地忽略掉。

String

域值。

NotificationResponse (B)

Byte1('A')

標(biāo)識(shí)這條消息是一個(gè)通知響應(yīng)。

Int32

以字節(jié)計(jì)地消息內(nèi)容地長(zhǎng)度,包括長(zhǎng)度本身。

Int32

通知后端進(jìn)程的進(jìn)程ID。

String

通知被拋出的通道的名字。

String

從通知進(jìn)程傳遞過(guò)來(lái)的載荷字符串。

ParameterDescription (B)

Byte1('t')

標(biāo)識(shí)該消息是一個(gè)參數(shù)描述。

Int32

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度本身。

Int16

語(yǔ)句所使用的參數(shù)的個(gè)數(shù)(可以為零)。

然后,對(duì)每個(gè)參數(shù),有下面的東西:

Int32

指定參數(shù)數(shù)據(jù)類型的對(duì)象ID。

ParameterStatus (B)

Byte1('S')

標(biāo)識(shí)這條消息是一個(gè)運(yùn)行時(shí)參數(shù)的狀態(tài)報(bào)告。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

String

被報(bào)告的運(yùn)行時(shí)參數(shù)的名字。

String

參數(shù)的當(dāng)前值。

Parse (F)

Byte1('P')

標(biāo)識(shí)該消息是一條Parse命令。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

String

目的預(yù)備語(yǔ)句的名字(空字符串選取未命名的預(yù)備語(yǔ)句)。

String

要分析的查詢字符串。

Int16

指定的參數(shù)數(shù)據(jù)類型的數(shù)目(可以為零)。請(qǐng)注意這個(gè)參數(shù)并不表示可能在查詢字符串里出現(xiàn)的參數(shù)個(gè)數(shù), 只是前端希望預(yù)先為其指定類型的參數(shù)數(shù)目。

然后,對(duì)每個(gè)參數(shù),有下面的東西:

Int32

指定參數(shù)數(shù)據(jù)類型的對(duì)象ID。這里為零等效于不指定該類型。

ParseComplete (B)

Byte1('1')

標(biāo)識(shí)該消息是一個(gè)Parse完成指示器。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度自身。

PasswordMessage (F)

Byte1('p')

標(biāo)識(shí)該消息是一個(gè)口令響應(yīng)。注意這也被用于GSSAPI、SSPI以及SASL響應(yīng)消息。確切的消息類型可以從上下文推出。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

String

口令(如果要求了,就是加密后的)。

PortalSuspended (B)

Byte1('s')

標(biāo)識(shí)這條消息是一個(gè)入口暫停指示器。請(qǐng)注意這個(gè)消息只出現(xiàn)在達(dá)到一條Execute消息的行計(jì)數(shù)限制的時(shí)候。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

Query (F)

Byte1('Q')

標(biāo)識(shí)該消息是一個(gè)簡(jiǎn)單查詢。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

String

查詢字符串自身。

ReadyForQuery (B)

Byte1('Z')

標(biāo)識(shí)消息的類型。在后端為新的查詢周期準(zhǔn)備好的時(shí)候,總會(huì)發(fā)送 ReadyForQuery。

Int32(5)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Byte1

當(dāng)前后端事務(wù)狀態(tài)指示器??赡艿闹凳强臻e狀況下的'I'(不在事務(wù)塊里);在事務(wù)塊里是'T'; 或者在一個(gè)失敗的事務(wù)塊里是'E'(在事務(wù)塊結(jié)束之前,任何查詢都將被拒絕)。

RowDescription (B)

Byte1('T')

標(biāo)識(shí)該消息是一個(gè)行描述。

Int32

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

Int16

指定在一個(gè)行里面的域的數(shù)目(可以為零)。

然后對(duì)于每個(gè)字段,有下面的東西:

String

字段名字。

Int32

如果域可以被標(biāo)識(shí)為一個(gè)指定表的列,這里就是表的對(duì)象ID;否則就是零。

Int16

如果該域可以被標(biāo)識(shí)為一個(gè)指定表的列,這里就是該列的屬性號(hào);否則就是零。

Int32

域數(shù)據(jù)類型的對(duì)象ID。

Int16

數(shù)據(jù)類型尺寸(參閱pg_type.typlen)。請(qǐng)注意負(fù)值表示變寬類型。

Int32

類型修飾詞(參閱pg_attribute.atttypmod)。 修飾詞的含義是類型相關(guān)的。

Int16

用于該域的格式碼。目前會(huì)是零(文本)或者一(二進(jìn)制)。 在Describe語(yǔ)句的變體返回的RowDescription里,格式碼還是未知的,因此總是零。

SASLInitialResponse (F)

Byte1('p')

標(biāo)識(shí)該消息是一個(gè)初始SASL響應(yīng)。注意這也被用于GSSAPI、SSPI以及口令響應(yīng)消息。確切的消息類型可以從上下文推知。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

String

客戶端選擇的SASL認(rèn)證機(jī)制的名稱。

Int32

后面跟著的SASL機(jī)制相關(guān)的"Initial Client Response"的長(zhǎng)度,如果沒(méi)有Initial Response則為-1。

Byten

SASL機(jī)制相關(guān)的"Initial Response"。

SASLResponse (F)

Byte1('p')

標(biāo)識(shí)該消息是一個(gè)初始SASL響應(yīng)。注意這也被用于GSSAPI、SSPI以及口令響應(yīng)消息。確切的消息類型可以從上下文推知。

Int32

消息內(nèi)容的長(zhǎng)度,以字節(jié)為單位,包括其自身。

Byten

SASL機(jī)制相關(guān)的消息數(shù)據(jù)。

SSLRequest (F)

Int32(8)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度本身。

Int32(80877103)

SSL請(qǐng)求碼。選取的值在高16位里包含1234,在低16位里包含5679 (為了避免混淆,這個(gè)編碼必須和任何協(xié)議版本號(hào)不同)。

GSSENCRequest (F)

Int32(8)

消息內(nèi)容的長(zhǎng)度以字節(jié)為單位,包括自己。

Int32(80877104)

GSSAPI加密請(qǐng)求代碼。選擇該值以在高16位中包含1234 ,并且在低16位中包含5680。 (為了避免混淆,此代碼不得與任何協(xié)議版本號(hào)相同。)

StartupMessage (F)

Int32

以字節(jié)計(jì)的消息內(nèi)容長(zhǎng)度,包括長(zhǎng)度自身。

Int32(196608)

協(xié)議版本號(hào)。高16位是主版本號(hào)(對(duì)這里描述的協(xié)議而言是 3)。低16位是次版本號(hào)(對(duì)于這里描述的協(xié)議而言是 0)。

協(xié)議版本號(hào)后面跟著一個(gè)或多個(gè)參數(shù)名和值字符串的對(duì)。要求在最后一個(gè)名字/數(shù)值對(duì)后面有個(gè)零字節(jié)作為終止符。 參數(shù)可以以任意順序出現(xiàn)。user是必須的,其它都是可選的。每個(gè)參數(shù)是這樣指定的:

String

參數(shù)名。目前可以識(shí)別的名字是:

user

用于連接的數(shù)據(jù)庫(kù)用戶名。必須;無(wú)缺省。

database

要連接的數(shù)據(jù)庫(kù)。缺省是用戶名。

options

給后端的命令行參數(shù)(這個(gè)特性已經(jīng)廢棄,更好的方法是設(shè)置單獨(dú)的運(yùn)行時(shí)參數(shù))。 這個(gè)字符串中的空格會(huì)被當(dāng)做參數(shù)的分隔符,除非用一個(gè)反斜線(\) 對(duì)它轉(zhuǎn)義。寫(xiě)\\可表示一個(gè)而字面意義上的反斜線。

replication

用于連入流復(fù)制模式,其中可以發(fā)出復(fù)制命令的一個(gè)小型集合而不是SQL語(yǔ)句。值可以是true、false或者database,默認(rèn)值是false。詳情請(qǐng)參考第 52.4 節(jié)

除了上述參數(shù)之外,還可以列出其他參數(shù)。以_pq_.開(kāi)頭的參數(shù)名被保留給協(xié)議擴(kuò)展之用,而其他的參數(shù)名被當(dāng)做在后端開(kāi)始時(shí)要設(shè)置的運(yùn)行時(shí)參數(shù)。這類設(shè)置將在后端啟動(dòng)期間被應(yīng)用(如果有命令行參數(shù),則在解析完命令行參數(shù)之后)并且將作為會(huì)話的默認(rèn)值。

String

參數(shù)值。

Sync (F)

Byte1('S')

表示該消息為一條 Sync 命令。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。

Terminate (F)

Byte1('X')

標(biāo)識(shí)本消息是一個(gè)終止。

Int32(4)

以字節(jié)計(jì)的消息內(nèi)容的長(zhǎng)度,包括長(zhǎng)度自身。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)