| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 44. 前/後端協議 | Fast Forward | Next |
本節描述各種消息的詳細格式.每種消息都標記為它是由一個前端 (F), 一個後端 (B)或者兩者(F & B)發送的。 請注意,盡管每條消息在開頭都包含一個字節計數,消息格式也定義為我們可以不用參考字節計數就可以找到消息的結尾。 這樣就增加了有效性檢查。(CopyData 消息是一個例外,因為它形成一個數據流的一部分; 任意獨立的 CopyData 消息可能是無法自解釋的。)
標識該消息是一條認證請求.
以字節記的消息內容長度,包括這個長度本身。
聲明該認證是成功的。
標識該消息是一條認證請求。
以字節記的消息內容長度,包括這個長度本身。
聲明需要 Kerberos V4 認證。
標識該消息是一條認證請求。
以字節記的消息內容長度,包括長度自身。
聲明需要 Kerberos V5 認證。
標識該消息是一條認證請求。
以字節記的消息內容長度,包括長度自身。
聲明需要一個明文的口令。
標識該消息是一條認證請求。
以字節記的消息內容的長度,包括長度本身。
聲明需要一個 crypt() 加密的口令。
加密口令使用的鹽粒(salt)。
標識這條消息是一個認證請求。
以字節記的消息內容的長度,包括長度本身。
聲明需要一個 MD5 加密的口令。
加密口令的時候使用的鹽粒。
標識這條消息是一個認證請求。
以字節記的消息內容長度,包括長度本身。
聲明需要一個 SCM 信任消息。
標識該消息是一個取消鍵字數據。 如果前端希望能夠在稍後發出 CancelRequest 消息, 那麼它必須保存這個值。
以字節記的消息內容的長度,包括長度本身。
後端的進程號(PID)。
此後端的密鑰(secret key )。
標識該信息是一個綁定命令。
以字節記的消息內容的長度,包括長度本身。
目標入口的名字(空字串則選取未命名的入口)。
源準備好語句的名字(空字串則選取未命名的準備好語句)。
後面跟著的參數格式代碼的數目(在下面的 C 中說明)。 這個數值可以是零,表示沒有參數,或者是參數都使用缺省格式(文本); 或者是一,這種情況下聲明的格式代碼應用于所有參數;或者它可以等于實際數目的參數。
參數格式代碼。目前每個都必須是零(文本)或者一(二進制)。
後面跟著的參數值的數目(可能為零)。這些必須和查詢需要的參數個數匹配。
然後,每個參數都會出現下面的字段對:
參數值的長度,以字節記(這個長度並不包含長度本身)。可以為零。 一個特殊的情況是,-1 表示一個 NULL 參數值。在 NULL 的情況下, 後面不會跟著數值字節。
參數值,格式是關聯的格式代碼標明的。n 是上面的長度。
在最後一個參數之後,出現下面的字段:
後面跟著的結果字段格式代碼數目(下面的 R 描述)。 這個數目可以是零表示沒有結果字段,或者結果字段都使用缺省格式(文本); 或者是一,這種情況下聲明格式代碼應用于所有結果字段(如果有的話);或者它可以等于查詢的結果字段的實際數目。
結果字段格式代碼。目前每個必須是零(文本)或者一(二進制)。
標識消息為一個綁定結束標識符。
以字節記的消息長度,包括長度本身。
以字節計的消息長度。包括長度本身。
取消請求代碼。選這個值是為了在高16位包含 1234, 低16位包含 5678。(為避免混亂,這個代碼必須與協議版本號不同.)
目標後端的進程號(PID)。
目標後端的密鑰(secret key)。
標識這條消息是一個 Close 命令。
以字節記的消息內容長度,包括長度本身。
'S' 關閉一個準備的語句;或者 'P' 關閉一個入口。
一個要關閉的準備好的語句或者入口的名字(一個空字串選擇未命名的準備好語句或者入口)。
標識消息是一個 Close 完畢指示器。
以字節記的消息內容的長度,包括長度本身。
標識此消息是一個命令結束響應。
以字節記的消息內容的長度,包括長度本身。
命令標記。它通常是一個單字,標識那個命令完成。
對于INSERT命令,標記是INSERT oidrows, 這裡的rows是插入的行數。oid 在row為 1 並且目標表有 OID 的時候是插入行的對象 ID; 否則oid就是 0。
對于DELETE 命令,標記是 DELETE rows, 這裡的 rows 是刪除的行數。
對于 UPDATE 命令,標記是 UPDATE rows 這裡的 rows 是更新的行數。
對于 MOVE 命令,標記是 MOVE rows,這裡的 rows 是遊標未知改變的行數。
對于 FETCH 命令,標記是 FETCH rows,這裡的 rows 是從遊標中檢索出來的行數。
標識這條消息是一個 COPY 數據。
以字節記的消息內容的長度,包括長度本身。
構成 COPY 數據流的一部分的數據。從後端發出的消息總是對應一個數據行,但是前端發出的消息可以任意分割數據流。
標識這條信息是一個 COPY 結束指示器。
以字節記的消息內容長度,包括長度本身。
標識這條消息是一個 COPY 失敗指示器。
以字節記的消息內容的長度,包括長度本身。
一個報告失敗原因的錯誤信息。
標識這條消息是一條 Start Copy In (開始拷貝進入)響應消息。 前端現在必須發送一條拷貝入數據。(如果還沒準備好做這些事情, 那麼發送一條 CopyFail 消息)。
以字節記的消息內容的長度,包括長度本身。
0 表示全部的拷貝格式都是文本的(數據行由換行符分隔,字段由分隔字符分隔等等)。 1 表示全部拷貝格式都是二進制的(類似 DataRow 格式)。 參閱 COPY 獲取更多信息。
數據中要拷貝的字段數(由下面的 N 解釋)。
每個字段將要用的格式代碼,目前每個都必須是零(文本)或者一(二進制)。 如果全部拷貝格式都是文本的,那麼所有的都必須是零。
標識這條消息是一條 Start Copy Out (開始拷貝進出)響應消息。 這條消息後面將跟著一條拷貝出數據消息。
以字節記的消息內容的長度,包括它自己。
0 表示全部拷貝格式都是文本(數據行由換行符分隔, 字段由分隔字符分隔等等)。1 表示所有拷貝格式都是二進制的(類似于 DataRow 格式)。參閱 COPY 獲取更多信息。
要拷貝的數據的字段的數目(在下面的 N 說明)。
每個字段要試用的格式代碼。目前每個都必須是零(文本)或者一(二進制)。 如果全部的拷貝格式都是文本,那麼所有的都必須是零。
標識這個消息是一個數據行。
以字節記的消息內容的長度,包括長度自身。
後面跟著的字段值的個數(可能是零)。
然後,每個字段都會出現下面的數據域對:
字段值的長度,以字節記(這個長度不包括它自己)。 可以為零。一個特殊的情況是,-1 表示一個 NULL 的字段值。 在 NULL 的情況下就沒有跟著數據字段。
一個字段的數值,以相關的格式代碼表示的格式展現。 n 是上面的長度。
標識消息是一個 Describe (描述)命令。
以字節記的消息內容的長度,包括字節本身。
'S' 描述一個準備好的語句;或者 'P' 描述一個入口。
要描述的準備好的語句或者入口的名字(或者一個空字串,就會選取未命名的準備好語句或者入口)。
標識這條消息是對一個空查詢字串的響應。 (這個消息替換了 CommandComplete。)
以字節記的消息內容長度,包括它自己。
標識消息是一條錯誤。
以字節記的消息內容的長度,包括長度本身。
消息體由一個或多個標識出來的字段組成,後面跟著一個字節零作為終止符。 字段可以以任何順序出現。對于每個字段都有下面的東西:
一個標識字段類型的代碼;如果為零,這就是消息終止符並且不會跟著有字串。 目前定義的字段類型在 Section 44.5 列出。 因為將來可能增加更多的字段類型,所以前端應該不聲不響地忽略不認識類型的字段。
字段值。
標識消息識一個 Execute 命令。
以字節記的消息內容的長度,包括長度自身。
要執行的入口的名字(空字串選定未命名的入口)。
要返回的最大行數,如果入口包含返回行的查詢(否則忽略)。 零標識"沒有限制"。
標識消息識一條 Flush 命令。
以字節記的消息內容的長度,包括長度本身。
標識消息是一個函數調用.
以字節記的消息內容的長度,包括長度本身。
聲明待調用的函數的對象標識(OID)。
後面跟著的參數格式代碼的數目(用下面的C表示)。 它可以是零,表示沒有參數,或者是所有參數都試用缺省格式(文本); 或者是一,這種情況下聲明的格式代碼應用于所有參數;或者它可以等于參數的實際個數。
參數格式代碼。目前每個必須是零(文本)或者一(二進制)。
聲明提供給函數的參數個數。
然後,每個參數都出現下面字段對:
以字節記的參數值的長度(不包括長度自己)。可以為零。 一個特殊的例子是,-1 表示一個 NULL 參數值。如果是 NULL,則沒有參數字節跟在後面。
參數的值,格式是用相關的格式代碼表示的。 n是上面的長度。
在最後一個參數之後,出現下面的字段:
函數結果的格式代碼。目前必須是零(文本)或者一(二進制)。
標識這條消息是一個函數調用結果。
以字節記的消息內容長度,包括長度本身。
以字節記的函數結果值的長度(不包括長度本身)。可以為零。一個特殊的情況是 -1 表示 NULL 函數結果。如果是 NULL 則後面沒有數值字節跟隨。
函數結果的值,格式是相關聯的格式代碼標識的。 n 是上面的長度。
標識這條消息是一個無數據指示器。
以字節記的消息內容長度,包括長度本身。
標識這條消息是一個通知。
以字節記的消息內容長度,包括長度本身。
消息體由一個或多個標識字段組成,後面跟著字節零作為中止符。 字段可以以任何順序出現。對于每個字段,都有下面的東西:
一個標識字段類型的代碼;如果為零,那麼它就是消息終止符,並且後面不會跟著字串。 目前定義的字段類型在 Section 44.5裡列出。 因為將來可能會增加更多字段類型,所以前端應該將不識別的字段安靜地忽略掉。
字段值。
標識這條消息是一個通知響應。
以字節記地消息內容地長度,包括長度本身。
通知後端進程地進程 ID。
觸發通知的條件的名字。
從通知進程傳遞過來的額外的信息。(目前,這個特性還未實現,因此這個字段總是一個空字串。)
標識消息是一個參數描述。
以字節記的消息內容長度,包括長度本身。
語句所使用的參數的個數(可以為零)。
然後,對每個參數,有下面的東西。
聲明參數數據類型的對象 ID。
標識這條消息是一個運行時參數狀態報告。
以字節記的消息內容的長度,包括長度自身。
被報告的運行時參數的名字。
參數的當前值。
標識消息是一條 Parse 命令。
以字節記的消息內容的長度,包括長度自身。
目的準備好語句的名字(空字串表示選取了未命名的準備好語句)。
要分析的查詢字串。
聲明的參數數據類型的數目(可以為零)。請注意這個參數並不意味著可能在查詢字串裡出現的參數個數的意思, 只是前端希望預先聲明的類型的數目。
然後,對每個參數,有下面的東西:
聲明參數數據類型的對象 ID。在這裡放一個零等效于不聲明該類型。
標識這條消息是一個 Parse 完成指示器。
以字節記的消息內容長度,包括長度自身。
標識這條消息是一個口令響應。
以字節記的消息內容的長度,包括長度本身。
口令(如果要求了,就是加密後的)。
標識這條消息是一個入口掛起指示器。請注意這個消息只出現在達到一條 Execute 消息的行計數限制的時候。
以字節記的消息內容的長度,包括長度自身。
標識消息是一個簡單查詢。
以字節記的消息內容的長度,包括長度自身。
查詢字串自身。
標識消息類型。在後端為新的查詢循環準備好的時候, 總會發送 ReadyForQuery。
以字節記的消息內容的長度,包括長度本身。
當前後端事務狀態指示器。可能的值是空閒狀況下的 'I'(不在事務塊裡);在事務塊裡是 'T'; 或者在一個失敗的事務塊裡是 'E'(在事務塊結束之前,任何查詢都將被拒絕)。
標識消息是一個行描述。
以字節記的消息內容的長度,包括長度自身。
聲明在一個行裡面的字段數目(可以為零)。
然後對于每個字段,有下面的東西:
字段名字。
如果字段可以標識為一個特定表的字段,那麼就是表的對象 ID; 否則就是零。
如果該字段可以標識為一個特定表的字段,那麼就是該表字段的屬性號;否則就是零。
字段數據類型的對象 ID。
數據類型尺寸(參閱pg_type.typlen)。 請注意負數表示變寬類型。
類型修飾詞(參閱pg_attribut.atttypmod)。 修飾詞的含義是類型相關的。
用于該字段的格式碼。目前會是零(文本)或者一(二進制)。 從語句變種 Describe 返回的 RowDescription 裡,格式碼還是未知的,因此總是零。
以字節記的消息內容的長度,包括長度本身。
SSL 請求碼。選取的數值在高16位裡包含 1234,在低16位裡包含 5679。 (為了避免混淆,這個編碼必須和任何協議版本號不同。)
以字節記的消息內容長度,包括長度自身。
協議版本號。高 16 位是主版本號(對這裡描述的協議而言是 3)。 低 16 位是次版本號(對于這裡描述的協議而言是 0)。
協議版本號後面跟著一個或多個參數名和值字串的配對。要求在最後一個名字/數值對後面有個字節零。 參數可以以任意順序出現。user是必須的,其它都是可選的。每個參數都是這樣聲明的:
參數名。目前可以識別的名字是:
用于連接的數據庫用戶名。必須;無缺省。
要連接的數據庫。缺省是用戶名。
給後端的命令行參數。(這個特性已經廢棄,更好的方法是設置單獨的運行時參數。)
除了上面的外,在後端啟動的時候可以設置的任何運行時參數都可以列出來。 這樣的設置將在後端啟動的時候附加(在分析了命令行參數之後---如果有的話)。這些值將成為會話缺省。
參數值。
表示該消息為一條 Sync 命令。
以字節記的消息內容的長度,包括長度自身。
標識消息是一個終止消息。
以字節記的消息內容的長度,包括長度自身。