我正在調查帶寬問題,并偶然發現了檢索 bytea 值的問題。我使用 PostgreSQL 10 和 14、各自的 psql 客戶端和 psycopg2 客戶端庫對此進行了測驗。
問題是,如果一個位元組值的大小是例如。10 MB(我可以通過做來確認select length(value) from table where id=1),我做select value from table where id=1了,那么通過套接字傳輸的資料量約為 20MB。注意資料庫中的值是預壓縮的(熵這么高),表設定為不壓縮bytea值,避免重復作業。
我找不到任何明顯的編碼問題,因為它只是位元組。我可以理解 psql CLI 命令可能會協商一些編碼,以便它可以列印結果,但 psycopg2 絕對不會這樣做,而且我遇到了同樣的行為。
我使用文本欄位測驗了相同的場景,并且幾乎按預期作業。我從 lorem ipsum 的復制粘貼開始,它傳輸了正確數量的資料,但是當我將文本更改為隨機擴展的 ASCII 值(再次更高的熵)時,它傳輸的資料超出了應有的數量。我對所有列都禁用了壓縮,所以我不明白為什么會發生這種情況。
關于為什么會發生這種情況的任何想法?
uj5u.com熱心網友回復:
這是正常的。默認情況下,值作為字串傳輸,因此 abytea將以十六進制數字呈現,這使其大小加倍。
作為一種解決方法,您可以以二進制模式傳輸此類資料。前端-后端協議和 C 庫對此提供支持,但是否可以使用它取決于您的客戶端 API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491945.html
標籤:PostgreSQL
