我正在做一些测试,以检查将加密数据存储在PostgreSQL数据库中的最佳方法。
现在,我已将文件内容存储在text
表中。我100%确定此数据已由TOAST https://www.postgresql.org/docs/9.3/storage-toast.html压缩
我发现的-这不是真的。我的所有“文件”或什至是普通文本(用1M行随机1000个字符的文本进行检查)都没有压缩。
我尝试手动SET STORAGE EXTENDED
,但这没用。
实验:
(对TEXT,TEXT(1001)和VARCHAR(1001)进行了检查。唯一的区别是varchar表的Toast大小为null)
使用以下网站的查询进行测量:https://wiki.postgresql.org/wiki/Disk_Usage
我的问题是:为什么默认情况下,Postgres不压缩长文本,如手册(https://www.postgresql.org/docs/9.3/storage-toast.html)所述,我应该怎么做才能使它工作?
答案 0 :(得分:3)
仅当要存储在表中的行值大于TOAST_TUPLE_THRESHOLD字节(通常为2 kB)时,才会触发TOAST管理代码。
对于最大长度为1000个字符的列(除非您使用的是真正的UTF-8字符,否则为1KB),您不会超过2KB的TOAST阈值,因此不会压缩数据。您需要使用多个列,或者在单个列中使用更大的值