我正在调查带宽问题,无意中发现了一个检索bytea值的问题.我用PostgreSQL 10和14、各自的psql客户端和psycopg2客户端库对此进行了测试.
问题是,如果bytea值的大小为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值(再次提高熵)时,它传输的数据超过了应有的数量.我的所有列都禁用了压缩,所以我不明白为什么会发生这种情况.
你知道为什么会这样吗?