pg_ctl 用于启动、停止、重启 PostgreSQL 服务器,或者显示一个运行着的服务器状态。

TOAST(The Oversized-Attribute Storage Technique),主要用于存储一个大字段的值。在 PG 中,页是数据在文件存储中的基本单位,其大小是固定的且只能在编译期指定,之后无法修改,默认的大小为8 KB 。PG 不允许一行数据跨页存储,那么对于超长的行数据,PG 就会启动 TOAST ,具体就是采用压缩和切片的方式。如果启用了切片,实际数据存储在另一张系统表的多个行中,这张表就叫 TOAST 表,这种存储方式叫行外存储。

在 PG 中每个表字段有四种 TOAST 的策略:

  • PLAIN :避免压缩和行外存储。只有那些不需要 TOAST 策略就能存放的数据类型允许选择(例如 int 类型),而对于 text 这类要求存储长度超过页大小的类型,是不允许采用此策略的
  • EXTENDED :允许压缩和行外存储。一般会先压缩,如果还是太大,就会行外存储
  • EXTERNA :允许行外存储,但不许压缩。类似字符串这种会对数据的一部分进行操作的字段,采用此策略可能获得更高的性能,因为不需要读取出整行数据再解压。
  • MAIN :允许压缩,但不许行外存储。不过实际上,为了保证过大数据的存储,行外存储在其它方式(例如压缩)都无法满足需求的情况下,作为最后手段还是会被启动。因此理解为:尽量不使用行外存储更贴切。
    现在我们通过实际操作来研究 TOAST 的细节:

Reference:

  1. PostgreSQL TOAST 技术理解