PostgreSQL中的文本压缩

kar*_*_ms 27 postgresql

我知道在SQL中我们可以压缩文本字段,如下所示:

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION);
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ens 29

默认情况下,对所有字符串类型都启用压缩,您不必告诉数据库执行此操作.查看有关TOAST的手册

  • PLAIN可防止压缩或外线存储; 此外,它禁止使用varlena类型的单字节标头.对于非TOAST-capable数据类型列,这是唯一可行的策略.
  • EXTENDED允许压缩和外线存储.这是大多数TOAST-capable数据类型的默认值.首先尝试压缩,然后在行仍然太大的情况下进行线外存储.
  • EXTERNAL允许外部存储但不允许压缩.使用EXTERNAL将使宽文本和bytea列上的子字符串操作更快(以增加的存储空间为代价),因为这些操作被优化为在未压缩时仅获取外部值的所需部分.
  • MAIN允许压缩但不允许外线存储.(实际上,仍然会为这些列执行外部存储,但只有在没有其他方法使行足够小以适合页面时才作为最后的手段.)

  • 从文档来看,看起来TOAST压缩仅对大于2kb的值有效.OP的示例不会达到2k阈值,因此不会被压缩. (5认同)
  • 通过更改 TOAST_TUPLE_THRESHOLD ?我认为这需要重新编译? (2认同)
  • 在我看来,从文档来看,如果一行大于2KB并且其任何列都是TOAST-able,则TOAST将尝试压缩,然后存储带外的TOAST-able列,直到达到行的TOAST_TUPLE_TARGET.因此,使用不同参数重新编译将是强制压缩<2KB行的唯一方法. (2认同)