PostgreSQL中的文本压缩

PostgreSQL中的文本压缩,postgresql,Postgresql,我知道在SQL中,我们可以按如下方式压缩文本字段: CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION); 我想知道如何在Postgres中实现文本压缩。默认情况下,所有字符串类型都启用压缩,您不必告诉数据库进行压缩。查看手册中关于 平面防止压缩或压缩 离线存储;而且 禁用单字节头的使用 对于varlena类型。这是唯一的 列的可能策略 不可编辑的数据类型 扩展允许压缩和压缩 离线存储这是 大多数可编辑数据的默认

我知道在SQL中,我们可以按如下方式压缩文本字段:

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION);

我想知道如何在Postgres中实现文本压缩。

默认情况下,所有字符串类型都启用压缩,您不必告诉数据库进行压缩。查看手册中关于

  • 平面防止压缩或压缩 离线存储;而且 禁用单字节头的使用 对于varlena类型。这是唯一的 列的可能策略 不可编辑的数据类型
  • 扩展允许压缩和压缩 离线存储这是 大多数可编辑数据的默认值 类型。将尝试压缩 首先,然后是离线存储(如果需要) 争吵还是太大了
  • 外部允许离线存储 但不是压缩。使用外部 将在上执行子字符串操作 宽文本和bytea列更快 (以增加存储量为代价) 因为这些操作是 优化为仅获取所需的 当 它没有被压缩
  • MAIN允许压缩,但不允许压缩 离线存储。(实际上, 离线存储仍将是可用的 对此类列执行,但仅限于 作为最后手段,当没有 其他使行变小的方法 足够放在一页上。)

从文档中可以看出,TOAST压缩仅在大于2kb的值时才有效。OP的示例不会达到2k阈值,因此不会被压缩。您可以强制压缩,具体取决于存储参数:通过更改TOAST\u TUPLE\u阈值?我认为这需要重新编译?对于小于2k的行,集合存储实际上是一个noop,对吗?“仅当要存储在表中的行值大于TOAST\u TUPLE\u阈值字节(通常为2 kB)时才会触发TOAST代码。”从文档中我发现,如果行大于2KB且其任何列都可以TOAST,则TOAST将尝试压缩,然后带外存储,TOAST-able列,直到它到达该行的TOAST\u TUPLE\u目标。因此,使用不同参数重新编译将是对<2KB行强制压缩的唯一方法