本節描述了每個訊息的詳細格式。每個訊息都進行了標記,以指示它是前端 (F)、後端 (B) 還是兩者 (F&B) 都可以傳送。請注意,儘管每條訊息的開頭都包含一個位元組計數,但大多數訊息的定義方式使得無需參考位元組計數即可找到訊息的結尾。這是歷史原因,因為原始的、現已廢棄的 2.0 協議版本沒有顯式的長度欄位。這也便於進行有效性檢查。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定認證成功。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要 Kerberos V5 認證。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要明文密碼。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要 MD5 加密密碼。
加密密碼時使用的鹽值。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要 GSSAPI 認證。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定此訊息包含 GSSAPI 或 SSPI 資料。
n
GSSAPI 或 SSPI 認證資料。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要 SSPI 認證。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定需要 SASL 認證。
訊息體是一個 SASL 認證機制列表,按伺服器的優先順序排列。在最後一個認證機制名稱後需要一個零位元組作為終止符。對於每個機制,都有以下內容:
SASL 認證機制的名稱。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定此訊息包含 SASL 挑戰。
n
SASL 資料,特定於所使用的 SASL 機制。
標識此訊息為認證請求。
訊息內容(包括自身)的位元組長度。
指定 SASL 認證已完成。
n
SASL 結果“附加資料”,特定於所使用的 SASL 機制。
標識此訊息為取消金鑰資料。如果前端希望稍後能夠發出 CancelRequest 訊息,則必須儲存這些值。
訊息內容(包括自身)的位元組長度。
此後端的程序 ID。
n
此後端的金鑰。此欄位延伸到訊息末尾,由長度欄位指示。
金鑰的最小和最大長度分別為 4 位元組和 256 位元組。 PostgreSQL 伺服器僅傳送長度最多為 32 位元組的金鑰,但更大的最大尺寸允許將來的伺服器版本,以及連線池和其他中介軟體使用更長的金鑰。一種可能的用例是使用額外資訊來增強伺服器的金鑰。因此,也鼓勵中介軟體不要使用所有位元組,以防多箇中間件應用程式堆疊在彼此之上,每個應用程式都可能用額外資料包裝金鑰。
在 3.2 協議版本之前,金鑰總是 4 位元組長。
標識此訊息為 Bind 命令。
訊息內容(包括自身)的位元組長度。
目標 portal 的名稱(空字串選擇未命名的 portal)。
源預處理語句的名稱(空字串選擇未命名的預處理語句)。
後面引數格式程式碼的數量(在下面用 C
表示)。這可以是零,表示沒有引數或所有引數都使用預設格式(文字);或者為一,在這種情況下,指定的格式程式碼應用於所有引數;或者可以等於實際引數的數量。
C
]引數格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。
後面引數值的數量(可能為零)。這必須與查詢所需的引數數量匹配。
接下來,對於每個引數,都會出現以下欄位對:
引數值的長度(以位元組為單位)(此計數不包括自身)。可以是零。作為特殊情況,-1 表示 NULL 引數值。在 NULL 的情況下,後面沒有值位元組。
n
引數的值,格式由關聯的格式程式碼指示。n
是上面的長度。
在最後一個引數之後,會出現以下欄位:
後面結果列格式程式碼的數量(在下面用 R
表示)。這可以是零,表示沒有結果列或所有結果列都應使用預設格式(文字);或者為一,在這種情況下,指定的格式程式碼應用於所有結果列(如果有);或者可以等於查詢的實際結果列數量。
R
]結果列格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。
標識此訊息為 Bind-complete 指示符。
訊息內容(包括自身)的位元組長度。
訊息內容(包括自身)的位元組長度。
取消請求程式碼。該值被選擇為在高 16 位包含 1234
,在低 16 位包含 5678
。(為避免混淆,此程式碼不得與任何協議版本號相同。)
目標後端的程序 ID。
n
目標後端的金鑰。此欄位延伸到訊息末尾,由長度欄位指示。最大金鑰長度為 256 位元組。
在 3.2 協議版本之前,金鑰總是 4 位元組長。
標識此訊息為 Close 命令。
訊息內容(包括自身)的位元組長度。
'S
' 關閉預處理語句;或 'P
' 關閉 portal。
要關閉的預處理語句或 portal 的名稱(空字串選擇未命名的預處理語句或 portal)。
標識此訊息為 Close-complete 指示符。
訊息內容(包括自身)的位元組長度。
標識此訊息為命令完成響應。
訊息內容(包括自身)的位元組長度。
命令標籤。這通常是一個單詞,用於標識已完成的 SQL 命令。
對於 INSERT
命令,標籤為 INSERT
,其中 oid
rows
rows
是插入的行數。oid
以前是插入行的物件 ID(如果 rows
是 1 且目標表有 OID),但 OID 系統列已不再支援;因此 oid
總是 0。
對於 DELETE
命令,標籤為 DELETE
,其中 rows
rows
是刪除的行數。
對於 UPDATE
命令,標籤為 UPDATE
,其中 rows
rows
是更新的行數。
對於 MERGE
命令,標籤為 MERGE
,其中 rows
rows
是插入、更新或刪除的行數。
對於 SELECT
或 CREATE TABLE AS
命令,標籤為 SELECT
,其中 rows
rows
是檢索到的行數。
對於 MOVE
命令,標籤為 MOVE
,其中 rows
rows
是遊標位置更改的行數。
對於 FETCH
命令,標籤為 FETCH
,其中 rows
rows
是已從遊標檢索到的行數。
對於 COPY
命令,標籤為 COPY
,其中 rows
rows
是複製的行數。(注意:行計數僅在 PostgreSQL 8.2 及更高版本中出現。)
標識此訊息為 COPY
資料。
訊息內容(包括自身)的位元組長度。
n
COPY
資料流的一部分資料。從後端傳送的訊息總是對應於單個數據行,但從前端傳送的訊息可能任意分割資料流。
標識此訊息為 COPY
-complete 指示符。
訊息內容(包括自身)的位元組長度。
標識此訊息為 COPY
-failure 指示符。
訊息內容(包括自身)的位元組長度。
一個錯誤訊息,用於報告失敗的原因。
標識此訊息為 Start Copy In 響應。前端現在必須傳送 copy-in 資料(如果準備不這樣做,則傳送 CopyFail 訊息)。
訊息內容(包括自身)的位元組長度。
0 表示整體 COPY
格式為文字(行以換行符分隔,列以分隔符字元分隔等)。1 表示整體複製格式為二進位制(類似於 DataRow 格式)。有關更多資訊,請參閱 COPY。
要複製的資料中的列數(在下面用 N
表示)。
N
]將用於每列的格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。如果整體複製格式為文字,則所有程式碼都必須為零。
標識此訊息為 Start Copy Out 響應。此訊息之後將是 copy-out 資料。
訊息內容(包括自身)的位元組長度。
0 表示整體 COPY
格式為文字(行以換行符分隔,列以分隔符字元分隔等)。1 表示整體複製格式為二進位制(類似於 DataRow 格式)。有關更多資訊,請參閱 COPY。
要複製的資料中的列數(在下面用 N
表示)。
N
]將用於每列的格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。如果整體複製格式為文字,則所有程式碼都必須為零。
標識此訊息為 Start Copy Both 響應。此訊息僅用於流式複製。
訊息內容(包括自身)的位元組長度。
0 表示整體 COPY
格式為文字(行以換行符分隔,列以分隔符字元分隔等)。1 表示整體複製格式為二進位制(類似於 DataRow 格式)。有關更多資訊,請參閱 COPY。
要複製的資料中的列數(在下面用 N
表示)。
N
]將用於每列的格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。如果整體複製格式為文字,則所有程式碼都必須為零。
標識此訊息為資料行。
訊息內容(包括自身)的位元組長度。
後面列值的數量(可能為零)。
接下來,對於每列,都會出現以下欄位對:
列值的長度(以位元組為單位)(此計數不包括自身)。可以是零。作為特殊情況,-1 表示 NULL 列值。在 NULL 的情況下,後面沒有值位元組。
n
列的值,格式由關聯的格式程式碼指示。n
是上面的長度。
標識此訊息為 Describe 命令。
訊息內容(包括自身)的位元組長度。
'S
' 描述預處理語句;或 'P
' 描述 portal。
要描述的預處理語句或 portal 的名稱(空字串選擇未命名的預處理語句或 portal)。
標識此訊息為對空查詢字串的響應。(此訊息替代 CommandComplete。)
訊息內容(包括自身)的位元組長度。
標識此訊息為錯誤。
訊息內容(包括自身)的位元組長度。
訊息體由一個或多個標識欄位組成,後跟一個零位元組作為終止符。欄位可以按任意順序出現。對於每個欄位,都有以下內容:
一個標識欄位型別的程式碼;如果為零,則這是訊息終止符,並且後面沒有字串。當前定義的欄位型別列在 第 54.8 節中。由於將來的版本可能會新增更多欄位型別,因此前端應靜默忽略未知型別的欄位。
欄位的值。
標識此訊息為 Execute 命令。
訊息內容(包括自身)的位元組長度。
要執行的 portal 的名稱(空字串選擇未命名的 portal)。
如果 portal 包含一個返回行的查詢,則返回的最大行數(否則忽略)。零表示“無限制”。
標識此訊息為 Flush 命令。
訊息內容(包括自身)的位元組長度。
標識此訊息為函式呼叫。
訊息內容(包括自身)的位元組長度。
要呼叫的函式的物件 ID。
後面引數格式程式碼的數量(在下面用 C
表示)。這可以是零,表示沒有引數或所有引數都使用預設格式(文字);或者為一,在這種情況下,指定的格式程式碼應用於所有引數;或者可以等於實際引數的數量。
C
]引數格式程式碼。每個程式碼目前必須是零(文字)或一(二進位制)。
指定的要提供給函式的引數數量。
接下來,對於每個引數,都會出現以下欄位對:
引數值的長度(以位元組為單位)(此計數不包括自身)。可以是零。作為特殊情況,-1 表示 NULL 引數值。在 NULL 的情況下,後面沒有值位元組。
n
引數的值,格式由關聯的格式程式碼指示。n
是上面的長度。
在最後一個引數之後,會出現以下欄位:
函式結果的格式程式碼。目前必須是零(文字)或一(二進位制)。
標識此訊息為函式呼叫結果。
訊息內容(包括自身)的位元組長度。
函式結果值的長度(以位元組為單位)(此計數不包括自身)。可以是零。作為特殊情況,-1 表示 NULL 函式結果。在 NULL 的情況下,後面沒有值位元組。
n
函式結果的值,格式由關聯的格式程式碼指示。n
是上面的長度。
訊息內容(包括自身)的位元組長度。
該GSSAPI加密請求程式碼。該值被選擇為在高 16 位包含 1234
,在低 16 位包含 5680
。(為避免混淆,此程式碼不得與任何協議版本號相同。)
標識此訊息為 GSSAPI 或 SSPI 響應。請注意,這也用於 SASL 和密碼響應訊息。確切的訊息型別可以從上下文中推斷。
訊息內容(包括自身)的位元組長度。
n
GSSAPI/SSPI 特定訊息資料。
標識此訊息為協議版本協商訊息。
訊息內容(包括自身)的位元組長度。
伺服器支援的、與客戶端請求的主協議版本對應的新版本號。
伺服器未識別的協議選項的數量。
然後,對於伺服器未識別的每個協議選項,都有以下內容:
選項名稱。
標識此訊息為無資料指示符。
訊息內容(包括自身)的位元組長度。
標識此訊息為通知。
訊息內容(包括自身)的位元組長度。
訊息體由一個或多個標識欄位組成,後跟一個零位元組作為終止符。欄位可以按任意順序出現。對於每個欄位,都有以下內容:
一個標識欄位型別的程式碼;如果為零,則這是訊息終止符,並且後面沒有字串。當前定義的欄位型別列在 第 54.8 節中。由於將來的版本可能會新增更多欄位型別,因此前端應靜默忽略未知型別的欄位。
欄位的值。
標識此訊息為通知響應。
訊息內容(包括自身)的位元組長度。
通知後端程序的程序 ID。
通知已觸發的通道名稱。
從通知程序傳遞的“負載”字串。
標識此訊息為引數描述。
訊息內容(包括自身)的位元組長度。
語句使用的引數數量(可能為零)。
然後,對於每個引數,都有以下內容:
指定引數資料型別的物件 ID。
標識此訊息為執行時引數狀態報告。
訊息內容(包括自身)的位元組長度。
正在報告的執行時引數的名稱。
引數的當前值。
標識此訊息為 Parse 命令。
訊息內容(包括自身)的位元組長度。
目標預處理語句的名稱(空字串選擇未命名的預處理語句)。
要解析的查詢字串。
指定引數資料型別的數量(可能為零)。請注意,這並不表示查詢字串中可能出現的引數數量,僅僅表示前端希望預先指定型別的引數數量。
然後,對於每個引數,都有以下內容:
指定引數資料型別的物件 ID。在此處放置零等同於不指定型別。
標識此訊息為 Parse-complete 指示符。
訊息內容(包括自身)的位元組長度。
標識此訊息為密碼響應。請注意,這也用於 GSSAPI、SSPI 和 SASL 響應訊息。確切的訊息型別可以從上下文中推斷。
訊息內容(包括自身)的位元組長度。
密碼(如果請求,則已加密)。
標識此訊息為 portal-suspended 指示符。請注意,這僅在 Execute 訊息的行數限制被達到時出現。
訊息內容(包括自身)的位元組長度。
標識此訊息為簡單查詢。
訊息內容(包括自身)的位元組長度。
查詢字串本身。
標識訊息型別。每當後端準備好進行新的查詢週期時,都會發送 ReadyForQuery。
訊息內容(包括自身)的位元組長度。
當前的後端事務狀態指示符。可能的值為:'I
' 表示空閒(不在事務塊中);'T
' 表示在事務塊中;或'E
' 表示在失敗的事務塊中(查詢將被拒絕,直到事務塊結束)。
標識此訊息為行描述。
訊息內容(包括自身)的位元組長度。
指定一行中的欄位數量(可能為零)。
然後,對於每個欄位,都有以下內容:
欄位名稱。
如果欄位可以被識別為特定表的列,則為該表的物件 ID;否則為零。
如果欄位可以被識別為特定表的列,則為該列的屬性編號;否則為零。
欄位資料型別的物件 ID。
型別大小(請參閱 pg_type.typlen
)。請注意,負值表示可變寬度型別。
型別修飾符(請參閱 pg_attribute.atttypmod
)。修飾符的含義是特定於型別的。
正在用於該欄位的格式程式碼。目前為零(文字)或一(二進位制)。在 Describe 的語句變體返回的 RowDescription 中,格式程式碼尚不確定,將始終為零。
標識此訊息為初始 SASL 響應。請注意,這也用於 GSSAPI、SSPI 和密碼響應訊息。確切的訊息型別是從上下文中推斷出來的。
訊息內容(包括自身)的位元組長度。
客戶端選擇的 SASL 認證機制的名稱。
後面 SASL 機制特定“初始客戶端響應”的長度,或者 -1 表示沒有初始響應。
n
SASL 機制特定的“初始響應”。
標識此訊息為 SASL 響應。請注意,這也用於 GSSAPI、SSPI 和密碼響應訊息。確切的訊息型別可以從上下文中推斷。
訊息內容(包括自身)的位元組長度。
n
SASL 機制特定的訊息資料。
訊息內容(包括自身)的位元組長度。
該SSL請求程式碼。該值被選擇為在高 16 位包含 1234
,在低 16 位包含 5679
。(為避免混淆,此程式碼不得與任何協議版本號相同。)
訊息內容(包括自身)的位元組長度。
協議版本號。最高 16 位是主版本號(此處描述的協議為 3)。最低 16 位是次版本號(此處描述的協議為 2)。
協議版本號後面跟著一個或多個引數名稱和值字串對。最後一個名稱/值對後需要一個零位元組作為終止符。引數可以按任意順序出現。user
是必需的,其他可選。每個引數指定為:
引數名稱。當前識別的名稱包括:
user
要連線的資料庫使用者名稱。必需;沒有預設值。
database
要連線的資料庫。預設為使用者名稱。
options
後端的命令列引數。(這已棄用,改為設定單個執行時引數。)除非用反斜槓(\
)進行轉義,否則此字串中的空格被視為分隔引數;編寫 \\
表示字面反斜槓。
replication
用於連線到流式複製模式,在此模式下可以發出少量複製命令而不是 SQL 語句。值可以是 true
、false
或 database
,預設為 false
。有關詳細資訊,請參閱 第 54.4 節。
除了上述內容之外,還可以列出其他引數。以 _pq_.
開頭的引數名稱保留用於協議擴充套件,而其他引數則被視為在後端啟動時設定的執行時引數。此類設定將在後端啟動期間應用(在解析命令列引數(如果有)之後),並將作為會話預設值。
引數值。
標識此訊息為 Sync 命令。
訊息內容(包括自身)的位元組長度。
標識此訊息為終止。
訊息內容(包括自身)的位元組長度。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 來報告文件問題。