| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 42. 前/後端協議 | 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 資料表示全部的 COPY 格式都是文本的(資料行由換行符分隔,字串由分隔字元分隔等等)。 1 資料表示全部 COPY 格式都是二進制的(類似 DataRow 格式)。 參閱 COPY 獲取更多訊息。
資料中要拷貝的字串數(由下面的 N 解釋)。
每個字串將要用的格式代碼,目前每個都必須是零(文本)或者一(二進制)。 如果全部拷貝格式都是文本的,那麼所有的都必須是零。
標識這條消息是一條 Start Copy Out (開始拷貝進出)響應消息。 這條消息後面將跟著一條拷貝出資料消息。
以字元記的消息內容的長度,包括它自己。
0 資料表示全部拷貝格式都是文本(資料行由換行符分隔, 字串由分隔字元分隔等等)。1 資料表示所有拷貝格式都是二進制的(類似於 DataRow 格式)。參閱 COPY 獲取更多訊息。
要拷貝的資料的字串的數目(在下面的 N 說明)。
每個字串要試用的格式代碼。目前每個都必須是零(文本)或者一(二進制)。 如果全部的拷貝格式都是文本,那麼所有的都必須是零。
標識這個消息是一個資料行。
以字元記的消息內容的長度,包括長度自身。
後面跟著的字串值的個數(可能是零)。
然後,每個字串都會出現下面的資料域對:
字串值的長度,以字元記(這個長度不包括它自己)。 可以為零。一個特殊的情況是,-1 資料表示一個 NULL 的字串值。 在 NULL 的情況下就沒有跟著資料字串。
一個字串的數值,以相關的格式代碼資料表示的格式展現。 n 是上面的長度。
標識消息是一個 Describe (描述)命令。
以字元記的消息內容的長度,包括字元本身。
'S' 描述一個準備好的語句;或者 'P' 描述一個入口。
要描述的準備好的語句或者入口的名字(或者一個空字串,就會選取未命名的準備好語句或者入口)。
標識這條消息是對一個空查詢字串的響應。 (這個消息替換了 CommandComplete。)
以字元記的消息內容長度,包括它自己。
標識消息是一條錯誤。
以字元記的消息內容的長度,包括長度本身。
消息體由一個或多個標識出來的字串組成,後面跟著一個字元零作為終止符。 字串可以以任何順序出現。對於每個字串都有下面的東西:
一個標識字串類型的代碼;如果為零,這就是消息終止符並且不會跟著有字串。 目前定義的字串類型在 Section 42.5 列出。 因為將來可能增加更多的字串類型,所以前端應該不聲不響地忽略不認識類型的字串。
字串值。
標識消息識一個 Execute 命令。
以字元記的消息內容的長度,包括長度自身。
要執行的入口的名字(空字串選定未命名的入口)。
要返回的最大行數,如果入口包含返回行的查詢(否則忽略)。 零標識"沒有限制"。
標識消息識一條 Flush 命令。
以字元記的消息內容的長度,包括長度本身。
標識消息是一個函數調用.
以字元記的消息內容的長度,包括長度本身。
聲明待調用的函數的對象標識(OID)。
後面跟著的參數格式代碼的數目(用下面的C資料表示)。 它可以是零,資料表示沒有參數,或者是所有參數都試用預設格式(文本); 或者是一,這種情況下聲明的格式代碼應用於所有參數;或者它可以等於參數的實際個數。
參數格式代碼。目前每個必須是零(文本)或者一(二進制)。
聲明提供給函數的參數個數。
然後,每個參數都出現下面字串對:
以字元記的參數值的長度(不包括長度自己)。可以為零。 一個特殊的例子是,-1 資料表示一個 NULL 參數值。如果是 NULL,則沒有參數字元跟在後面。
參數的值,格式是用相關的格式代碼資料表示的。 n是上面的長度。
在最後一個參數之後,出現下面的字串:
函數結果的格式代碼。目前必須是零(文本)或者一(二進制)。
標識這條消息是一個函數調用結果。
以字元記的消息內容長度,包括長度本身。
以字元記的函數結果值的長度(不包括長度本身)。可以為零。一個特殊的情況是 -1 資料表示 NULL 函數結果。如果是 NULL 則後面沒有數值字元跟隨。
函數結果的值,格式是相關聯的格式代碼標識的。 n 是上面的長度。
標識這條消息是一個無資料指示器。
以字元記的消息內容長度,包括長度本身。
標識這條消息是一個通知。
以字元記的消息內容長度,包括長度本身。
消息體由一個或多個標識字串組成,後面跟著字元零作為終止符。 字串可以以任何順序出現。對於每個字串,都有下面的東西:
一個標識字串類型的代碼;如果為零,那麼它就是消息終止符,並且後面不會跟著字串。 目前定義的字串類型在 Section 42.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 命令。
以字元記的消息內容的長度,包括長度自身。
標識消息是一個終止消息。
以字元記的消息內容的長度,包括長度自身。