PG avg聚合操作如何將值返回給客戶端
我們執行avg聚合操作時,會得到一個浮點數值。例如:
簡單avg聚合操作分為2步:首先計算出和值及元組個數;然后將和值與元組個數相除。
1)第一步計算函數是int4_avg_accum:可以看到使用ArrayType轉換Int8TransTypeData結構后,使用sum作為和值,count作為元組個數。
2)第2步的求平均值函數是int8_avg。首先將transdata中的count和sum都轉換成numeric格式,然后再調用int8_numeric函數求平均值。結果值以Datum格式返回,也就是地址
那么問題來了,這個地址值如何返回給用戶?
向客戶端發送的TupleTableSlot里存儲的值并不是真實值?Datum值是47785920?這個值是什么?從客戶端接收的值看下如何轉換?
可以看到客戶端接收的值就是結果值,并沒有進行轉換。也就是說服務端發送的就是平均值。那就需要看服務端如何將Datum值進行轉換的。
從堆??闯鰌rinttup函數中進行轉換:
轉換函數由numeric_out進行轉換,轉換成字符串??梢钥吹浇Y果值轉換為了2.500000000000000
微軟雅黑;font-size:14px;">原文標題:PG avg聚合操作如何將值返回給客戶端
關鍵詞: PG源碼解析
X 關閉
X 關閉