本節描述每個訊息的詳細格式。每個訊息都標記為可以由前端 (F)、後端 (B) 或兩者 (F & B) 發送。請注意,雖然每個訊息的開頭都包含位元組計數,但訊息格式的定義方式是,無需參考位元組計數即可找到訊息結尾。這有助於驗證。(CopyData 訊息是一個例外,因為它構成資料串流的一部分;任何單個 CopyData 訊息的內容本身都無法解釋。)
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定驗證成功。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要 Kerberos V5 驗證。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要明文密碼。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要 MD5 加密的密碼。
加密密碼時要使用的 salt。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要 GSSAPI 驗證。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定此訊息包含 GSSAPI 或 SSPI 資料。
n
GSSAPI 或 SSPI 驗證資料。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要 SSPI 驗證。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定需要 SASL 驗證。
訊息主體是 SASL 驗證機制的列表,按照伺服器的偏好順序排列。在最後一個驗證機制名稱之後需要一個零位元組作為終止符。對於每個機制,都有以下內容
SASL 驗證機制的名稱。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定此訊息包含 SASL 質詢。
n
SASL 資料,特定於正在使用的 SASL 機制。
將訊息識別為身份驗證請求。
訊息內容的長度(以位元組為單位),包括自身。
指定 SASL 驗證已完成。
n
SASL 結果「附加資料」,特定於正在使用的 SASL 機制。
將訊息識別為取消金鑰資料。如果前端希望稍後能夠發出 CancelRequest 訊息,則必須保存這些值。
訊息內容的長度(以位元組為單位),包括自身。
此後端的進程 ID。
此後端的密鑰。
將訊息識別為 Bind 命令。
訊息內容的長度(以位元組為單位),包括自身。
目標入口網站的名稱(空字串選擇未命名入口網站)。
來源預處理語句的名稱(空字串選擇未命名預處理語句)。
接下來的參數格式代碼數量(以下以 C
表示)。此值可以為零,表示沒有參數或所有參數都使用預設格式(文字);或者為一,表示指定的格式代碼適用於所有參數;或者它可以等於實際的參數數量。
C
]參數格式代碼。目前每個代碼必須為零(文字)或一(二進位)。
接下來的參數值數量(可能為零)。此值必須與查詢所需的參數數量相符。
接下來,每個參數都會出現以下欄位對
參數值的長度,以位元組為單位(此計數不包含自身)。可以為零。作為一種特殊情況,-1 表示 NULL 參數值。在 NULL 情況下,後面沒有值位元組。
n
參數的值,其格式由相關的格式代碼指定。n
是上述長度。
在最後一個參數之後,會出現以下欄位
接下來的結果欄格式代碼數量(以下以 R
表示)。此值可以為零,表示沒有結果欄或結果欄應全部使用預設格式(文字);或者為一,在這種情況下,指定的格式代碼適用於所有結果欄(如果有的話);或者它可以等於查詢的結果欄的實際數量。
R
]結果欄格式代碼。目前每個代碼必須為零(文字)或一(二進位)。
將訊息識別為繫結完成指示符。
訊息內容的長度(以位元組為單位),包括自身。
訊息內容的長度(以位元組為單位),包括自身。
取消請求代碼。該值的選擇使其最高有效 16 位包含 1234
,最低有效 16 位包含 5678
。(為避免混淆,此代碼不得與任何協定版本號碼相同。)
目標後端的程序 ID。
目標後端的密鑰。
將訊息識別為 Close 命令。
訊息內容的長度(以位元組為單位),包括自身。
'S
' 用於關閉預備語句;或 'P
' 用於關閉入口。
要關閉的預備語句或入口的名稱(空字串選擇未命名的預備語句或入口)。
將訊息識別為 Close-complete 指示符。
訊息內容的長度(以位元組為單位),包括自身。
將訊息識別為命令完成回應。
訊息內容的長度(以位元組為單位),包括自身。
命令標籤。這通常是一個單詞,用於識別已完成的 SQL 命令。
對於 INSERT
命令,標籤為 INSERT
,其中 oid
rows
rows
是插入的列數。如果 rows
為 1 且目標表具有 OID,則 oid
曾經是插入列的物件 ID,但 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)。
要描述的預處理語句或入口的名稱(空字串表示選擇未命名的預處理語句或入口)。
識別訊息為空查詢字串的回應。(此訊息取代 CommandComplete。)
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為錯誤訊息。
訊息內容的長度(以位元組為單位),包括自身。
訊息主體由一個或多個已識別的欄位組成,後接一個零位元組作為終止符。欄位可以以任何順序出現。對於每個欄位,有以下内容:
一個識別欄位類型的代碼;如果為零,則表示訊息終止符,後面沒有字串。目前定義的欄位類型列於第 53.8 節。由於未來可能會新增更多欄位類型,前端應靜默忽略無法識別類型的欄位。
欄位值。
識別訊息為 Execute 命令。
訊息內容的長度(以位元組為單位),包括自身。
要執行的入口的名稱(空字串表示選擇未命名的入口)。
要返回的最大列數,如果入口包含返回列的查詢(否則將忽略)。零表示“無限制”。
識別訊息為 Flush 命令。
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為函數呼叫。
訊息內容的長度(以位元組為單位),包括自身。
指定要呼叫的函數的物件 ID。
後面跟隨的參數格式代碼的數量(以下用 C
表示)。可以是零,表示沒有參數或所有參數都使用預設格式(文字);或一,在這種情況下,指定的格式代碼適用於所有參數;或者它可以等於參數的實際數量。
C
]參數格式代碼。每個都必須是零(文字)或一(二進制)。
指定提供給函數的參數數量。
接下來,對於每個參數,都會出現以下一對欄位
參數值的長度,以位元組為單位(此計數不包括自身)。可以是零。作為一個特殊情況,-1 表示 NULL 參數值。在 NULL 情況下,後面沒有值位元組。
n
參數的值,格式由相關的格式代碼指示。n
是上述長度。
在最後一個參數之後,會出現以下欄位
函數結果的格式代碼。必須是零(文字)或一(二進制)。
識別訊息為函數呼叫結果。
訊息內容的長度(以位元組為單位),包括自身。
函數結果值的長度,以位元組為單位(此計數不包括自身)。可以是零。作為一個特殊情況,-1 表示 NULL 函數結果。在 NULL 情況下,後面沒有值位元組。
n
函數結果的值,格式由相關的格式代碼指示。n
是上述長度。
訊息內容的長度(以位元組為單位),包括自身。
TheGSSAPI加密請求代碼。該值被選擇在最高有效 16 位中包含 1234
,在最低有效 16 位中包含 5680
。(為避免混淆,此代碼不得與任何協議版本號相同。)
識別訊息為 GSSAPI 或 SSPI 回應。請注意,這也用於 SASL 和密碼回應訊息。可以從上下文中推斷出確切的訊息類型。
訊息內容的長度(以位元組為單位),包括自身。
n
GSSAPI/SSPI 特定訊息資料。
識別訊息為協議版本協商訊息。
訊息內容的長度(以位元組為單位),包括自身。
伺服器支援的最新次要協議版本,適用於用戶端請求的主要協議版本。
伺服器無法識別的協議選項的數量。
然後,對於伺服器無法識別的協議選項,有以下內容
選項名稱。
識別訊息為無資料指示符。
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為通知。
訊息內容的長度(以位元組為單位),包括自身。
訊息主體由一個或多個已識別的欄位組成,後接一個零位元組作為終止符。欄位可以以任何順序出現。對於每個欄位,有以下内容:
一個識別欄位類型的代碼;如果為零,則表示訊息終止符,後面沒有字串。目前定義的欄位類型列於第 53.8 節。由於未來可能會新增更多欄位類型,前端應靜默忽略無法識別類型的欄位。
欄位值。
識別訊息為通知回應。
訊息內容的長度(以位元組為單位),包括自身。
發出通知的後端處理程序的處理程序 ID。
已發出通知的通道名稱。
從通知處理程序傳遞的 “payload(有效負載)” 字串。
識別訊息為參數描述。
訊息內容的長度(以位元組為單位),包括自身。
語句使用的參數數量(可以為零)。
然後,對於每個參數,有以下内容:
指定參數資料類型的物件 ID。
識別訊息為執行時參數狀態報告。
訊息內容的長度(以位元組為單位),包括自身。
正在報告的執行時參數的名稱。
參數的目前值。
識別訊息為 Parse 命令。
訊息內容的長度(以位元組為單位),包括自身。
目標預處理語句的名稱(空字串表示選擇未命名的預處理語句)。
要解析的查詢字串。
指定的參數資料類型數量(可以為零)。請注意,這不是查詢字串中可能出現的參數數量的指示,而只是前端想要預先指定類型的數量。
然後,對於每個參數,有以下内容:
指定參數資料類型的物件 ID。在此處放置零等同於不指定類型。
識別訊息為 Parse 完成指示符。
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為密碼回應。請注意,這也用於 GSSAPI、SSPI 和 SASL 回應訊息。可以從上下文中推斷出確切的訊息類型。
訊息內容的長度(以位元組為單位),包括自身。
密碼(如果請求,則加密)。
識別訊息為入口暫停指示符。請注意,這只會在達到 Execute 訊息的列數限制時才會出現。
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為簡單查詢。
訊息內容的長度(以位元組為單位),包括自身。
查詢字串本身。
識別訊息類型。每當後端準備好進入新的查詢週期時,就會發送 ReadyForQuery。
訊息內容的長度(以位元組為單位),包括自身。
目前後端交易狀態指示器。可能的值為:'I
',表示閒置(不在交易區塊中);'T
',表示在交易區塊中;或 'E
',表示在失敗的交易區塊中(在區塊結束之前,查詢將會被拒絕)。
識別訊息為列描述。
訊息內容的長度(以位元組為單位),包括自身。
指定一列中的欄位數量(可以為零)。
然後,對於每個欄位,都有以下資訊:
欄位名稱。
如果欄位可以被識別為特定表格的欄位,則為表格的物件 ID;否則為零。
如果欄位可以被識別為特定表格的欄位,則為欄位的屬性編號;否則為零。
欄位資料類型的物件 ID。
資料類型大小(請參閱 pg_type.typlen
)。請注意,負值表示可變寬度的類型。
類型修飾符(請參閱 pg_attribute.atttypmod
)。修飾符的含義是特定於類型的。
用於欄位的格式代碼。目前將為零(文字)或一(二進制)。在從 Describe 的語句變體返回的 RowDescription 中,格式代碼尚未可知,並且將始終為零。
識別訊息為初始 SASL 回應。請注意,這也用於 GSSAPI、SSPI 和密碼回應訊息。確切的訊息類型是從上下文中推斷出來的。
訊息內容的長度(以位元組為單位),包括自身。
用戶端選擇的 SASL 驗證機制的名稱。
後面的 SASL 機制特定 "Initial Client Response" 的長度,如果沒有 Initial Response,則為 -1。
n
SASL 機制特定的 "Initial Response"。
識別訊息為 SASL 回應。請注意,這也用於 GSSAPI、SSPI 和密碼回應訊息。確切的訊息類型可以從上下文中推斷出來。
訊息內容的長度(以位元組為單位),包括自身。
n
SASL 機制特定的訊息資料。
訊息內容的長度(以位元組為單位),包括自身。
TheSSL請求代碼。該值的選擇使其最高有效 16 位包含 1234
,最低有效 16 位包含 5679
。(為避免混淆,此代碼不得與任何協定版本號相同。)
訊息內容的長度(以位元組為單位),包括自身。
協定版本號。最高有效 16 位是主版本號(此處描述的協定為 3)。最低有效 16 位是次版本號(此處描述的協定為 0)。
協定版本號之後是一個或多個參數名稱和值字串對。最後一個名稱/值對之後需要一個零位元組作為終止符。參數可以以任何順序出現。需要 user
,其他的是可選的。每個參數指定為
參數名稱。目前識別的名稱為
user
要連接的資料庫使用者名稱。必需;沒有預設值。
database
要連接的資料庫。預設為使用者名稱。
options
後端的命令行引數。(不建議使用此方法,而是設定個別的執行時間參數。)此字串中的空格被認為是分隔引數,除非使用反斜線 (\
) 逸出;寫入 \\
以表示文字反斜線。
replication
用於在串流複寫模式下連接,在該模式下,可以發出少量複寫命令,而不是 SQL 語句。值可以是 true
、false
或 database
,預設值為 false
。 有關詳細信息,請參閱第 53.4 節。
除了上述參數外,還可以列出其他參數。 以 _pq_.
開頭的參數名稱保留供協定擴充使用,而其他參數則被視為在後端啟動時設定的執行時間參數。 這些設定將在後端啟動期間應用(如果在有的話,在解析命令行引數之後),並將充當會話預設值。
參數值。
將訊息識別為 Sync 命令。
訊息內容的長度(以位元組為單位),包括自身。
識別訊息為終止。
訊息內容的長度(以位元組為單位),包括自身。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的地方,請使用此表格來報告文件問題。