经过一些实验,似乎COMPRESSION lz4
对列没有任何影响JSONB
(而对JSON
、 和有影响TEXT
)。事实确实如此吗?如果是这样,为什么呢?
我可以深入研究 Postgresql 邮件列表和/或源代码来尝试找到答案,但希望已经知道答案的人能够参与进来。
经过一些实验,似乎COMPRESSION lz4
对列没有任何影响JSONB
(而对JSON
、 和有影响TEXT
)。事实确实如此吗?如果是这样,为什么呢?
我可以深入研究 Postgresql 邮件列表和/或源代码来尝试找到答案,但希望已经知道答案的人能够参与进来。
我认为你谈论的是
这肯定会产生影响,但前提是你插入的表行足够大,PostgreSQL 才会开始压缩该
jsonb
值。此阈值设置为 8kB 页面中可用空间的四分之一,因此略小于 2kB。基本上,数据类型
jsonb
可以压缩:看:
但这只发生在新插入的列值超过Laurenz 指出的大小阈值时,并且仅当源不是同一 DB 中未更改的、已压缩的列时才会发生。Postgres 不会解压缩并重新压缩现有值,即使之前使用不同的算法压缩也是如此。每个单独的压缩值都会记住该算法。
更改压缩值会触发重新压缩,然后使用该列的当前默认算法。(无操作也会触发它。)
有关的: